El modelo RDO

Objetos de datos remotos (RDO)

El modelo RDO (Objetos de Acceso a Datos Remotos) viene definido así:

 
Con RDO y el control RemoteData, nuestras aplicaciones pueden acceder a fuentes de datos ODBC sin utilizar un motor local. Este hecho es muy importante a la hora de conseguir el máximo rendimiento y flexibilidad cuando accedamos a motores de bases de datos remotos. Aunque se puede acceder a cualquier fuente de datos ODBC con RDO y el control de Acceso Remoto, donde conseguiremos el mayor rendimiento será cuando trabajemos con servidores de bases de datos, como Microsoft SQL Server y  Oracle, ya que disponen de los 
más sofisticados motores. 

 

Empleando RDO, podemos trabajar con todo tipo de cursores desde los más simples a los más complejos. Podemos ejecutar queries que devuelvan cualquier número de resultados , o ejecutar procedimientos almacenados que devuelvan resultados con o sin parámetros y valores de retorno.

 

Podemos limitar el número de filas que se devuelven, y monitorizar todos los mensajes y errores generados por la fuente de datos remota sin que esto afecte a la query que se está ejecutando.


RDO permite operaciones tanto síncronas como asíncronas, por lo que nuestra aplicación no queda bloqueada mientras se ejecutan largas queries.

 

RDO (Objetos de datos remotos) es una interfaz de acceso a datos para ODBC orientada a objetos, que incorpora un estilo sencillo de DAO y cuya interfaz expone prácticamente toda la flexibilidad y eficacia de bajo nivel de ODBC. Sin embargo, RDO presenta limitaciones al no proporcionar un acceso apropiado a las bases de datos Jet o ISAM, y al sólo permitir el acceso a bases de datos relacionales a través de los controladores ODBC existentes. A pesar de ello, se ha constatado que RDO es la interfaz elegida por muchos programadores de SQL Server, de Oracle y de otras bases de datos relacionales de gran tamaño. RDO proporciona los objetos, las propiedades y los métodos necesarios para tener acceso a los aspectos más complejos relacionados con los procedimientos almacenados y los conjuntos de resultados.

 

Proporcionan un modelo de información para tener acceso a orígenes de datos remotos mediante ODBC. RDO ofrece un conjunto de objetos que facilitan la conexión con una base de datos, la ejecución de consultas y procedimientos almacenados, la manipulación de resultados y la confirmación de los cambios en el servidor.

El modelo RDO puede tener mayor rendimiento, ya que todo el proceso se lleva a cabo en el servidor y no en nuestra máquina. 
El modelo RDO es capaz de llevar a cabo queries síncronas o asíncronas. El DAO tiene limitaciones a la hora de ejecutar este tipo de queries. 
El modelo RDO puede trabajar con cursores complejos, los cuales se encuentran limitados en el DAO.

En la siguiente tabla, el tipo de colección de la primera columna contiene el tipo de objeto de la segunda columna. La tercera columna describe qué representa cada tipo de objeto.

 

Colección

Objeto

Descripción

rdoConnections

rdoConnection

Una conexión abierta o asignada.

Ninguna

rdoEngine

El motor de base de datos remoto.

rdoErrors

rdoError

Información acerca de errores ODBC.

rdoEnvironments

rdoEnvironment

Un conjunto lógico de objetos rdoConnection con un nombre de usuario y una contraseña comunes.

rdoColumns

rdoColumn

Una columna que forma parte de un objeto rdoResultset.

rdoParameters

rdoParameter

Un parámetro de un objeto rdoQuery o un objeto rdoPreparedStatement.

rdoPreparedStatements

rdoPreparedStatements

Una definición de consulta almacenada (obsoleta).

rdoQueries

rdoQuery

Una definición de consulta guardada.

rdoResultsets

rdoResultset

Las filas devueltas por una consulta.

rdoTables

rdoTable

Una definición de tabla.

 

rdoEngine (Objeto)

El objeto rdoEngine representa el origen de datos remoto. Como objeto de nivel superior, contiene todos los demás objetos de la jerarquía de Objetos de datos remotos (RDO).

 

rdoCreateEnvironment (Método, datos remotos)

Crea un nuevo objeto rdoEnvironment.

Sintaxis

Set variable = rdoCreateEnvironment(nombre, usuario, contraseña)

 

La sintaxis del método rdoCreateEnvironment consta de las siguientes partes:

 

Parte

Descripción

variable

Una expresión de objeto que da como resultado un objeto rdoEnvironment.

nombre

Una variable de tipo String que asigna nombre de forma exclusiva al nuevo objeto rdoEnvironment. Vea la propiedad Name para ver detalles de nombres de rdoEnvironment válidos.

usuario

Una variable de tipo String que identifica al propietario del nuevo objeto rdoEnvironment. Vea la propiedad UserName para obtener más información al respecto.

contraseña

Una variable de tipo String que contiene la contraseña para el nuevo objeto rdoEnvironment. La contraseña puede tener hasta 14 caracteres de longitud y puede incluir cualquier carácter excepto el carácter ASCII 0 (null).

 

rdoDefaultCursorDriver (Propiedad)

Devuelve o establece la biblioteca de cursores utilizada por el Administrador de controladores ODBC.

Sintaxis

objeto.rdoDefaultCursorDriver [= valor]

 

La sintaxis de la propiedad rdoDefaultCursorDriver consta de las siguientes partes:

 

Parte

Descripción

objeto

Una expresión de objeto que da como resultado un objeto de la lista Se aplica a.

valor

Una constante o un valor Integer que especifica un tipo de cursor ODBC como se describe en Valores.

 


Valores

Los valores admitidos para valor son:

 

Constante

Valor

Descripción

rdUseIfNeeded

0

(Predeterminado) RDO elige el estilo de cursores más apropiado para el controlador. Los cursores del servidor se utilizan si están disponibles.

rdUseODBC

1

RDO utiliza la biblioteca de cursores ODBC. Esto proporciona un mejor rendimiento para pequeños conjuntos de resultados pero perjudica considerablemente cuando se trata de conjuntos de resultados grandes.

rdUseServer

2

RDO utiliza cursores del servidor. Para la mayoría de las operaciones grandes esto proporcionará mejores resultados, pero puede provocar más tráfico en la red.

rdUseClientBatch

3

RDO usa la biblioteca de cursores optimista por lotes que requieren todas las operaciones por lotes y objetos rdoResultset disociados.

rdUseNone

4

RDO no crea un cursor desplazable. Básicamente es un conjunto de resultados de sólo lectura de tipo forward-only, con RowsetSize establecida a 1. Este tipo de conjunto de resultados se ejecuta más rápido que los que necesitan la creación de un cursor.

 

rdoEnvironment (Objeto)

Un objeto rdoEnvironment define un conjunto lógico de conexiones y el alcance de una transacción para un determinado nombre de usuario. Contiene tanto conexiones abiertas como asignadas pero no abiertas, proporciona mecanismos para transacciones simultáneas y proporciona un contexto de seguridad para las operaciones del lenguaje de manipulación de datos (DML) en la base de datos.

OpenConnection (Método, datos remotos)

Abre una conexión con un origen de datos ODBC y devuelve una referencia al objeto rdoConnection que representa una base de datos específica.

Sintaxis

Set conexión = entorno.OpenConnection(dsNombre[, líneaComandos[, sóloLectura[, conectar[, opciones]]]])

 

La sintaxis del método OpenConnection consta de las siguientes partes:

 

Parte

Descripción

conexión

Una expresión de objeto que da como resultado un objeto rdoConnection que está abriendo.

entorno

Una expresión de objeto que da como resultado un objeto rdoEnvironment existente. Debe proporcionar un objeto rdoEnvironment.

dsNombre

Una expresión de cadena que es el nombre de un origen de datos ODBC registrado o una cadena de longitud cero (""), como se describe en Valores.

líneaComandos

Un tipo Variant o una constante que determina cómo se lleva a cabo la operación, como se describe en Valores.

sóloLectura

Un valor de tipo Boolean que es True si la conexión se abre para acceso de sólo lectura y False si la conexión se abre para lectura y escritura. Si omite este argumento, la conexión se abre para acceso de lectura y escritura.

conectar

Una expresión de cadena que se usa para pasar argumentos al Administrador de controladores ODBC para abrir la base de datos; es la cadena de conexión como se describe en Valores.

opciones

Un tipo Variant o una constante que determina cómo se lleva a cabo la operación, como se describe en Valores.

 


Use una de las siguientes constantes para definir el valor de líneaComandos:

 

Constante de líneaComandos

Valor

Descripción

rdDriverPrompt

0

El Administrador de controladores ODBC muestra el cuadro de diálogo Orígenes de datos ODBC. La cadena de conexión usada para establecer la conexión se construye a partir del DSN seleccionado y la completa el usuario mediante los cuadros de diálogo o bien, si no se ha elegido DSN y la propiedad DataSourceName está vacía (en el caso del control RemoteData), se utiliza el DSN predeterminado.

rdDriverNoPrompt

1

El Administrador de controladores usa la cadena de conexión proporcionada por dsNombre y conectar. Si no se proporciona información suficiente, el método OpenConnection devuelve un error interceptable.

rdDriverComplete

2

(Predeterminado) Si la cadena de conexión proporcionada incluye la palabra clave DSN, el Administrador de controladores ODBC usa la cadena proporcionada en conectar. De lo contrario, se comportará igual que cuando se especifica rdDriverPrompt.

rdDriverComplete
Required

3

Se comporta como rdDriverComplete excepto en que el controlador deshabilita los controles para cualquier información no necesaria para completar la conexión. Si los controles están deshabilitados, los usuarios no pueden seleccionar o especificar argumentos que falten.

 

Puede usar la siguiente constante en el argumento opciones:

 

Constante

Valor

Descripción

rdAsyncEnable

32

Ejecuta la operación de forma asíncrona.

 


rdoConnection (Objeto)

Un objeto rdoConnection representa una conexión abierta con un origen de datos remoto y una base de datos específica en ese origen de datos, o un objeto asignado pero no conectado todavía, que puede usarse para establecer una conexión posteriormente.

EstablishConnection (Método, datos remotos)

Establece una conexión física con un servidor ODBC.

Sintaxis

objeto.EstablishConnection líneaComandos, sóloLectura, opciones

 

La sintaxis del método EstablishConnection consta de las siguientes partes:

 

Parte

Descripción

objeto

Una expresión de objeto que da como resultado un objeto rdoConnection.

líneaComandos

Opcional. Un valor de tipo Integer que indica si ODBC pregunta por sus características (vea el método OpenConnection del objeto rdoEnvironment).

sóloLectura

Opcional. Un valor de tipo Boolean que es True si quiere conectarse como sólo lectura.

opciones

Opcional. Un valor de tipo Integer que indica las opciones de conexión. Este parámetro tiene las mismas reglas, restricciones y valores posibles que el método OpenConnection del objeto rdoEnvironment.



CreateQuery (Método, datos remotos)

Crea un nuevo objeto de consulta y lo agrega a la colección rdoQueries.

Sintaxis

objeto.CreateQuery nombre, cadenaSQL

 

La sintaxis del método CreateQuery consta de las siguientes partes:

 

Parte

Descripción

objeto

Una expresión de objeto que da como resultado un objeto rdoConnection

nombre

Requerido. Una expresión de cadena que da como resultado el nombre del nuevo objeto

cadenaSQL

Opcional. Una consulta SQL para la nueva instrucción preparada.

 

OpenResultset (Método, datos remotos)

Crea un nuevo objeto rdoResultset.

Sintaxis

Set variable = conexión.OpenResultset(nombre [,tipo [,tipoBloq [,opciones]]])

Set variable = objeto.OpenResultset([tipo [,tipoBloq [, opciones]]])

 

La sintaxis del método OpenResultset consta de las siguientes partes:

 

Parte

Descripción

variable

Una expresión de objeto que da como resultado un objeto rdoResultset.

conexión

Una expresión de objeto que da como resultado un objeto rdoConnection existente que desea usar para crear el nuevo rdoResultset.

objeto

Una expresión de objeto que da como resultado un objeto rdoQuery o rdoTable existente que desea usar para crear el nuevo rdoResultset.

nombre

Un valor de tipo String que especifica el origen de las filas para el nuevo rdoResultset. Este argumento puede especificar el nombre de un objeto rdoTable, el nombre de un objeto rdoQuery o una instrucción SQL que puede devolver filas.

tipo

Un valor de tipo Variant o una constante que especifica el tipo de cursor que se va a crear, como se indica en Valores.

tipoBloq

Un valor de tipo Variant o una constante que especifica el tipo de control de concurrencia. Si no especifica ningún tipoBloq, se asumirá que es rdConcurReadOnly.

opciones

Un valor de tipo Variant o una constante que especifica las características del nuevo rdoResultset.

 

Valores

 

·        nombre

El argumento nombre se utiliza cuando se emplea el método OpenResultset en lugar del objeto rdoConnection y no se han predefinido consultas. En este caso, nombre suele contener una consulta SQL que devuelve filas. La consulta puede contener más de una instrucción SELECT o una combinación de consultas de acciones e instrucciones SELECT, pero no sólo consultas de acciones, ya que se produciría un error interceptable. Vea la propiedad SQL para obtener más detalles al respecto.

 

·        Cursor tipo

Use una de las siguientes constantes de tipos de conjunto de resultados que definen el tipo de cursor del nuevo objeto rdoResultset. Vea la propiedad CursorType para obtener más detalles acerca de los tipos de cursores.

 

 

Constante

Valor

Descripción

rdOpenForwardOnly

0

(Predeterminado) Abre un objeto rdoResultset de tipo forward-only.

RdOpenKeyset

1

Abre un objeto rdoResultset de tipo keyset.

rdOpenDynamic

2

Abre un objeto rdoResultset de tipo dinamic.

rdOpenStatic

3

Abre un objeto rdoResultset de tipo estatic.

 

·        Concurrencia tipoBloq

Para mantener un control adecuado de los datos que se van a actualizar, RDO proporciona varias opciones de concurrencia para controlar cómo se concede o niega acceso a los usuarios a los datos que se van a actualizar. En algunos casos, cuando bloquee una fila en particular mediante uno de los valores de tipoBloq, el motor remoto puede bloquear también la página completa que contiene la fila. Si hay demasiadas páginas bloqueadas, el servidor remoto puede también extender el bloqueo de la página a un bloqueo de tabla para mejorar el rendimiento global del sistema.

No están permitidos todos los tipos de bloqueos en todos los orígenes de datos. Por ejemplo, en los servidores SQL Server y Oracle, los objetos rdoResultset de tipo static sólo admiten rdConcurValues o rdConcurReadOnly. Para obtener más información acerca de los tipos de concurrencia, vea la propiedad LockType.

 

 

 

Constante

Valor

Descripción

RdConcurReadOnly

1

(Predeterminado) Sólo lectura.

RdConcurLock

2

Concurrencia pesimista.

rdConcurRowVer

3

Concurrencia optimista basada en el Id. de fila.

rdConcurValues

4

Concurrencia optimista basada en valores de filas.

rdConcurBatch

5

Concurrencia optimista usando actualizaciones de modo por lotes. Valores Status devueltos por cada fila actualizada con éxito.

 

·        Otras opciones

En el argumento opciones puede usar las siguientes constantes:

 

Constante

Valor

Descripción

rdAsyncEnable

32

Ejecuta la operación de forma asíncrona.

rdExecDirect

64

(Predeterminado) Evita la creación de procedimientos almacenados para ejecutar la consulta. Usa SQLExecDirect en lugar de SQLPrepare y SQLExecute.