Un objeto Recordset representa los registros de una tabla base o los registros que se generan al ejecutar una consulta.

 

Comentarios

 

Utilice los objetos Recordset para manipular datos en una base de datos a nivel de registro. Cuando utiliza objetos de acceso de datos, interactúa con los datos prácticamente utilizando objetos Recordset. Todos los objetos Recordset se construyen utilizando registros (filas) y campos (columnas). Existen tres tipos de objetos Recordset:

 

·               Recordset de tipo Table - una representación en código de una tabla base que puede utilizarse para añadir, cambiar o eliminar registros desde una única tabla de base de datos (sólo espacios de trabajo Microsoft Jet).

·               Recordset de tipo Dynaset - el resultado de una consulta cuyos registros pueden actualizarse. Un objeto Recordset de tipo Dynaset es un conjunto dinámico de registros que puede utilizarse para añadir, cambiar o eliminar registros desde una tabla o tablas subyacentes de una base de datos. Un objeto Recordset de tipo Dynaset puede contener campos de una o más tablas de una base de datos. Este tipo corresponde a un cursor de tipo keyset ODBC.

 

·               Recordset de tipo Snapshot - una copia estática de un conjunto de registros que puede utilizar para encontrar datos o generar informes. Un objeto Recordset de tipo Snapshot puede contener campos de una o más tablas de una base de datos pero no se puede actualizar. Este tipo corresponde a un cursor de tipo static ODBC.

·               Recordset de tipo Forward-only - idéntico a un tipo Snapshot excepto que no se proporciona ningún cursor. Sólo puede avanzar en los registros. Esto mejora el rendimiento en situaciones donde sólo necesita hacer una pasada sencilla en el conjunto de resultado. Este tipo corresponde a un cursor de tipo forward-only ODBC.

 

·               Recordset de tipo Dynamic - un conjunto de resultado de una consulta de una o más tablas base en las que puede agregar, cambiar o eliminar registros de una consulta que devuelve filas. Además, también aparecen en el objeto Recordset los registros que agregan, eliminan o modifican otros usuarios en la tablas base. Este tipo corresponde a un cursor de tipo dynamic ODBC (sólo espacios de trabajo ODBCDirect).

 

Puede elegir el tipo de objeto Recordset que quiere crear usando el argumento tipo del método OpenRecordset.

 

En un espacio de trabajo Microsoft Jet, si no especifica un tipo, DAO intenta crear el tipo de objeto Recordset con la mayor funcionalidad disponible, comenzando con tabla. Si no está disponible este tipo, DAO intenta un Dynaset, después un Snapshot y por último un objeto Recordset de tipo Forward-only.

 

En un espacio de trabajo ODBCDirect, si no especifica un tipo, DAO intenta crear el tipo de objeto Recordset con la respuesta de consulta más rápida, comenzando con Forward-only. Si no está disponible este tipo, DAO intenta un Snapshot, después un Dynaset y por último un objeto Recordset de tipo Dynamic.

 

Cuando se crea un objeto Recordset utilizando un objeto TableDef no adjunto, se crean objetos Recordset de tipo Table. Sólo pueden crearse Recordset de tipo Dynaset o Snapshot con tablas adjuntas o tablas de bases de datos externas ODBC.

 

Cuando abre el objeto se agrega automáticamente un nuevo objeto Recordset a la colección Recordsets y se elimina automáticamente cuando lo cierra.

 

Nota   Si utiliza variables para representar un objeto Recordset y el objeto Database que contiene el conjunto de registros, compruebe que las variables tengan el mismo alcance o duración. Por ejemplo, si establece una variable global que representa un objeto Recordset, debe asegurarse de que la variable que represente la base de datos que contiene el conjunto de registros también sea global o se encuentra en un procedimiento Sub o Function con la palabra clave Static.

 

Su aplicación puede crear tantas variables objeto Recordset como se necesiten. Un objeto Recordset puede hacer referencia a una o más tablas o consultas y los campos sin conflictos.

 

Los Recordset de tipo Dynaset y Snapshot se almacenan en la memoria local. Si no hay suficiente espacio en la memoria local para almacenar los datos, el motor de base de datos Microsoft Jet guarda los datos adicionales en el disco TEMP. Si este espacio está agotado, se producirá un error.

 

La colección predeterminada de un objeto Recordset es la colección Fields y la propiedad predeterminada de un objeto Field es la propiedad Value. El código puede simplificarse utilizando estos valores predeterminados.

 

Cuando se crea un objeto Recordset, el registro activo se coloca como primer registro si existen varios registros. Si no hay registros, el valor de la propiedad RecordCount será 0 y los valores de la propiedad BOF y EOF serán True.

 

Puede utilizar los métodos MoveNext, MovePrevious, MoveFirst y MoveLast para volver a establecer el registro activo. Los objetos Recordset de tipo Forward-only sólo admiten el método MoveNext. Cuando se utilizan los métodos Move para moverse entre los registros (o "andar" a través del objeto Recordset), puede utilizar las propiedades BOF y EOF para comprobar el inicio o el fin del objeto Recordset.

 

Con los objetos Recordset de tipo Dynaset y Snapshot en un espacio de trabajo Microsoft Jet, también puede utilizar los métodos Find, como FindFirst, para localizar un registro específico basado en un criterio. Si no se encuentra el registro, la propiedad NoMatch se establece a True. Para objetos Recordset de tipo Table, puede buscar registros utilizando el método Seek.

 

La propiedad Type indica el tipo de objeto Recordset creado y la propiedad Updatable indica si puede cambiar los registros del objeto.

 

La información acerca de la estructura de la tabla base, como los nombres y los tipos de datos de cada objeto Field y cualquier objeto Index, se almacena en un objeto TableDef.

 

Para hacer referencia a un objeto Recordset en una colección por su número de orden o por el valor de la propiedad Name, utilice cualquiera de los formatos de sintaxis siguientes:

 

Recordsets(0)

Recordsets("nombre")

Recordsets![nombre]

 

Nota   Puede abrir un objeto Recordset del mismo origen de datos o base de datos más de una vez creando nombres duplicados en la colección Recordsets. Debe asignar objetos Recordset a variables de objeto y hacer referencia a ellos por el nombre de variable.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Un objeto Recordset de tipo Table es una representación en código de una tabla base que puede utilizarse para añadir, cambiar o borrar registros de una tabla. Sólo el registro activo está cargado en la memoria. Se utiliza un índice predefinido para determinar el orden de los registros en el objeto Recordset (sólo espacios de trabajo Microsoft Jet).

 

Comentarios

 

Para crear un objeto Recordset, utilice el método OpenRecordset en un objeto Database abierto.

Se puede crear un objeto Recordset de tipo Table con una tabla base de una base de datos Microsoft Jet, pero no con una ODBC o con una tabla adjunta. El objeto Recordset de tipo Table puede utilizarse con bases de datos ISAM (como FoxPro, dBASE o Paradox) cuando se abren directamente.

 

A diferencia de los objetos Recordset de tipo Dynaset o Snapshot, el objeto Recordset de tipo Table no puede hacer referencia a más de una tabla base y no puede accederse al mismo utilizando una instrucción SQL que filtre u ordene los datos. Por lo general, cuando se accede a un objeto Recordset de tipo Table, se especifica uno de los índices definidos de forma predeterminada para la tabla que ordena los datos devueltos a la aplicación. Si la tabla no tiene índice, no se puede garantizar el orden de los datos devueltos. Si es necesario, la aplicación puede crear un índice que devuelva los registros en un orden específico. Para seleccionar un orden específico para su objeto Recordset de tipo Table, puede establecer un índice válido para la propiedad Index.

 

También a diferencia de los objetos Recordset de tipo Dynaset o Snapshot, no necesita llenar explícitamente los objetos Recordset de tipo Table para obtener un valor exacto para la propiedad RecordCount.

Para mantener la integridad de los datos, los objetos Recordset de tipo Table se mantienen bloqueados durante los métodos Edit y Update, de modo que sólo un usuario puede actualizar un registro determinado cada vez. Cuando el motor de base de datos Microsoft Jet bloquea un registro, bloquea la página completa de 2 KB que contiene el registro.

 

Con las tablas no -ODBC se utilizan dos tipos de bloqueo: pesimista y optimista. Las tablas de acceso ODBC siempre utilizan el bloqueo optimista. La propiedad LockEdits determina las condiciones de bloqueo durante la edición.

 

 

Un objeto Recordset es un conjunto de registros dinámico que puede contener campos de una o más tablas o consultas en una base de datos y se puede actualizar. En una base de datos ODBCDirect, un objeto Recordset de tipo Dynaset corresponde a un cursor de tipo keyset ODBC.

 

Comentarios

 

Un objeto Recordset de tipo Dynaset es un tipo de objeto Recordset que puede utilizar para manipular datos en una tabla o unas tablas de base de datos base.

Se diferencia de un objeto Recordset de tipo Snapshot ya que el tipo Dynaset sólo almacena la clave principal de cada registro, en vez de los datos actuales. Como resultado, un tipo Dynaset se actualiza con los cambios realizados en el origen de datos, mientras que el Snapshot no. Como el objeto Recordset de tipo Table, un tipo Dynaset recupera el registro completo sólo cuando lo necesita para modificarlo o mostrarlo.

 

Para crear un objeto Recordset de tipo Dynaset, utilice el método OpenRecordset en una base de datos abierta, en vez de otro objeto Recordset de tipo Snapshot o Dynaset, en un objeto QueryDef  o en un objeto TableDef. (Abrir objetos Recordset en otro objeto Recordset usuario objetos TableDef sólo está disponible en espacios de trabajo Microsoft Jet.)

 

Si solicita un objeto Recordset de tipo Dynaset y el motor de base de datos Microsoft Jet no puede aprovechar el acceso de lectura y escritura a los registros, el motor de base de datos Microsoft Jet puede crear un objeto Recordset de tipo Dynaset de sólo lectura.

Cuando los usuarios actualizan datos, las tablas base reflejan estos cambios. Por lo tanto, los datos actuales están disponibles en la aplicación cuando se vuelve a posicionar en el registro actual. En una base de datos multiusuario, más de un usuario puede abrir un objeto Recordset de tipo Dynaset que hace referencia a los mismos registros. Debido a que un objeto Recordset de tipo Dynaset es dinámico, cuando un usuario cambia usuario registro, los otros usuarios tienen acceso inmediato a los datos cambiados. Sin embargo, si un usuario agrega un registro, los otros usuarios no verán el nuevo registro hasta que utilicen el método Requery en el objeto Recordset. Si un usuario elimina un registro, se informa a los otros usuarios cuando intentan tener acceso al mismo.

 

Los registros añadidos a la base de datos no llegan a formar parte del objeto Recordset de tipo Dynaset, a menos que los añada utilizando los métodos AddNew y Update. Por ejemplo, si realiza una consulta de acciones que contenga una instrucción SQL INSERT INTO para añadir registros, los nuevos registros no se incluirán en su objeto Recordset de tipo Dynaset hasta que utilice el método Requery o reconstruya su objeto Recordset con el método OpenRecordset.

 

Para mantener la integridad de los datos, el motor de base de datos Microsoft Jet puede bloquear los objetos Recordset de tipo Table y Dynaset durante las operaciones Edit (bloqueo pesimista) o Update (bloqueo optimista) así que sólo un usuario puede actualizar un registro concreto al mismo tiempo. Cuando el motor de base de datos Microsoft Jet bloquea un registro, bloquea la página entera de 2 KB que contiene el registro.

También puede utilizar el bloqueo optimista y pesimista con tablas no ODBC. Cuando tiene acceso a tablas externas utilizando ODBC mediante un espacio de trabajo Microsoft Jet, siempre debe utilizar el bloqueo optimista. La propiedad LockEdits y el parámetro bloquearmodificaciones del método OpenRecordset determinan las condiciones de bloqueo durante la modificación.

No es posible actualizar todos los campos en todos los objetos Recordset de tipo Dynaset. Para determinar si puede actualizar un campo determinado, verifique la propiedad DataUpdatable del objeto Field.

 

Un objeto Recordset de tipo Dynaset no se puede actualizar si:

 

·               No hay un índice en la tabla o las tablas ODBC o Paradox.

·               La página de datos está bloqueada por otro usuario.

·               El registro ha cambiado después de la última lectura.

·               El usuario no tiene autorización.

·               Una o más tablas o campos están definidas como sólo lectura.

·               La base de datos se ha abierto como sólo lectura.

·               El objeto Recordset se ha creado con tablas múltiples sin una instrucción JOIN o la consulta era demasiado compleja.

 

El orden del objeto Recordset de tipo Dynaset o de los datos del objeto Recordset no sigue necesariamente una secuencia determinada. Para ordenar los datos, puede utilizarse una instrucción SQL con una cláusula ORDER BY para crear el objeto Recordset. También puede utilizar una cláusula WHERE para filtrar los registros para que se agreguen sólo ciertos registros al objeto Recordset. Utilizar instrucciones SQL de este modo para seleccionar un subconjunto de registros y ordenarlos normalmente resulta un modo de acceso más rápido a los datos que utilizar las propiedades Filter y Sort.

 

Un objeto Recordset de tipo Snapshot es un conjunto estático de registros que se puede utilizar para examinar datos en una tabla o tablas subyacentes. En una base de datos ODBCDirect, un objeto Recordset de tipo Snapshot corresponde a un cursor de tipo static.

 

Comentarios

 

Para crear un objeto Recordset de tipo Snapshot, utilice el método OpenRecordset en un base de datos abierta, en otro objeto Recordset de tipo Dynaset o Snapshot o en un objeto QueryDef.

 

 

Un objeto Recordset de tipo puede contener campos de una o más tablas de la base de datos. En un espacio de trabajo Microsoft Jet, no se puede actualizar un tipo Snapshot. En un espacio de trabajo ODBCDirect, un tipo Snapshot se puede actualizar, dependiendo del controlador ODBC.

 

Cuando se crea un objeto Recordset de tipo Snapshot, los valores de los datos de todos los campos (excepto los tipos de datos de campos Memo y OLE (Long Binary) de los archivos .mdb) se lleva a la memoria. Una vez cargados, los cambios realizados en los datos de la tabla base no se reflejan en los datos del objeto Recordset de tipo Snapshot. Para volver a cargar el objeto Recordset de tipo Snapshot con datos actuales, puede utilizar el método Requery o volver a ejecutar el método OpenRecordset.

 

El orden de los datos del objeto Recordset no sigue necesariamente ninguna secuencia específica. Para ordenar los datos se puede utilizar una instrucción SQL con una cláusula ORDER BY para crear el objeto Recordset. También puede utilizarse esta técnica para filtrar los registros, de modo que sólo algunos registros se añadan al objeto Recordset. Utilizar esta técnica en vez de las propiedades Filter o Sort o probar cada registro individualmente generalmente da como resultado un acceso más rápido a los datos.

 

Los objetos Recordset de tipo Snapshot suelen ser más rápidos a la hora de crear y acceder que los objetos Recordset de tipo Dynaset, porque sus registros se encuentran en la memoria o bien almacenados en el espacio TEMP del disco y el motor de base de datos Microsoft Jet no necesita bloquear páginas ni manejar objetivos multiusuario. Sin embargo, los objetos Recordset de tipo Snapshot utilizan más recursos que los objetos Recordset de tipo Dynaset porque se carga el registro completo en la memoria de trabajo.

 

Este tipo de objeto Recordset es idéntico a una Snapshot excepto que sólo puede desplazarse hacia delante en sus registros. Esto mejora el rendimiento en situaciones donde sólo se necesita hacer una única pasada por un conjunto de resultados.

En un espacio de trabajo ODBCDirect este tipo se corresponde con un cursor de tipo Forward-only de ODBC

 

 

 

Este tipo de Recordset representa un conjunto de resultados de una consulta de una o más tablas base en el que puede agregar, cambiar o eliminar registros de una consulta que devuelve filas. También aparecen en su Recordset los registros que otros usuarios agregan, eliminan o editan en las tablas base.

Este tipo sólo está disponible en espacios de trabajo ODBCDirect y se corresponde con un cursor de tipo Dynamic ODBC.