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 |
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. |