Sie sind auf Seite 1von 7

ADO: conexiones, cursores, recordsets, etc.

Por gentileza de F. Salvador

ADO, conexiones, cursores, recordsets, bloqueos, etc. Sin duda, la mejor parte de ASP y Visual Basic es la con el acceso a bases de datos, mediante la utilizacin de ActiveX Data Objects, ms conocido como ADO. Este modelo de acceso a bases de datos se basa en la utilizacin de siete objetos: Connection, Recordset, Command, Field, Parameter, Property y Error. Sin embargo, de estos siete objetos uno de los ms importantes y ms ricos en cuanto a las posibilidades que nos brinda para el manejo de datos es el Recordset. Definiendo el Concepto Recordset En trminos sencillos, un objeto Recordset es una tabla que contiene los datos que manejar nuestra aplicacin. Esta tabla almacena el resultado obtenido por las consultas realizadas sobre la base de datos a la que nos encontremos conectados mediante el objeto Connection. Un Recordset se encuentra formado por filas (registros) y columnas (campos), a las que deberemos hacer referencia para poder acceder a sus datos. Las buenas aplicaciones de base de datos emplean el objeto Connection para establecer un vnculo y el objeto Recordset para manipular los datos devueltos. Ubicacin del cursor Un aspecto que afecta al rendimiento y a un uso eficaz de los recursos es la ubicacin del cursor. Un cursor puede estar localizado en el cliente o en el servidor. Ubicacin adUseClient adUseServer Valor 3 2 Descripcin Abre un cursor en el lado del cliente. Abre un cursor en el lado del servidor.

Un cursor que reside en el cliente siempre ser de tipo esttico (adOpenStatic). Tipos de Cursor Un cursor es un conjunto lgico de registros administrados por el origen de datos o por el administrador de controladores ODBC. Dependiendo de cmo se configuren las propiedades del tipo de cursor, se puede recorrer y actualizar los registros. Los cursores de la base de datos se comportan como punteros que permiten encontrar un elemento especfico de un conjunto de registros. Los cursores son especialmente tiles para recuperar y examinar registros, y despus realizar operaciones basadas en dichos registros. Si lo que necesitamos es recorrer el Recordset en forma secuencial, lo mejor es utilizar el cursor por defecto (adOpenForwardOnly), ya que es el que consume menos recursos, agilizando las operaciones. La siguiente tabla resume los tipos de cursores.

Revisin: 1.0

Pgina 1

ADO: conexiones, cursores, recordsets, etc.

Por gentileza de F. Salvador

Tipo de Cursor adOpenForwardOnly

Valor 0

Descripcin Es el cursor por defecto y nos permite recorrer el Recordset en forma secuencial con el metodo movenext. No soportan marcadores (bookmarks). Este tipo de cursor no informa del nmero de registros obtenidos mediante la propiedad recordcount. Este tipo de cursor crea una lista de claves hacia los registros que pertenecen al cursor, y usa esas claves para acceder a los campos del registro actual. El nmero de claves no cambia mientras el cursor esta abierto, lo que significa que no se pueden ver las inserciones realizadas por otros usuarios. La ventaja de estos cursores frente a los estticos, es que se pueden ver las eliminaciones y modificaciones realizadas por otros usuarios. Cada vez que el usuario se mueve a otro registro del cursor, ADO obtiene los datos de la base de datos. Si el registro se ha modificado se obtiene la versin ms reciente; si el registro ya no existe porque se ha borrado, ADO se lo saltar. Los cursores controlados por conjuntos de claves se pueden explorar en ambas direcciones. Por su condicin de miembro fijo, admite la propiedad recordcount. Es el cursor ms flexible y exigente. No lee los registros de la base de datos en el momento de la creacin del cursor, sino que se accede a los registros mediante punteros en las filas reales. Si un usuario aade un registro despus de la creacin del cursor, se inserta una clave en el cursor para el nuevo registro en la posicin adecuada. As mismo, permite ver los cambios y registros eliminados hechos despus de abrir el cursor. Los cursores dinmicos no pueden informar del numero de registros (propiedad recordcount) por su condicin de miembros no fijos. Es una instantnea (snapshot) de la base de datos en el momento de la creacin del cursor. Permite movernos hacia delante y atrs. No permite ver las modificaciones que otros usuarios hagan a los registros despus de la creacin del cursor, ni los nuevos registros que hayan podido surgir desde que se abri el cursor, incluso si se eliminan registros, su aplicacin seguir pensando que forman parte del cursor. Para actualizar un recordset esttico, utilice los mtodos Resync o Requery. Debido a su condicin de miembro fijo, admite la propiedad recordcount.

adOpenKeySet

adOpenDynamic

adOpenStatic

Una de las formas ms utilizadas para abrir un Recordset, es la siguiente: rs.Open SQL, ConexionActiva, TipoDeCursor, TipoDeBloqueo

Revisin: 1.0

Pgina 2

ADO: conexiones, cursores, recordsets, etc.

Por gentileza de F. Salvador

Otra forma de abrir un Recordset podra ser esta otra: With rs .Source = " Select * from Clientes order by Nombre" .ActiveConnection = cnGestion .CursorLocation = adUseClient .CursorType = adOpenStatic .LockType = adLockOptimistic End With Tipos de Cerrojo del Recordset Los cerrojos deben ser utilizados casi obligatoriamente en Recordset que hacen referencia a bases de datos con alta concurrencia de usuarios. Mediante la utilizacin de estos cerrojos podremos controlar el tipo de acceso que le daremos a los dems usuarios cuando alguien ya se encuentre modificando el Recordset. Los tipos de cerrojos que podremos utilizar son los siguientes: Tipo de Cerrojo adLockReadOnly Valor 1 Descripcin Es el cerrojo por defecto y no permite modificar los registros de la tabla. Abre el cursor en modo de solo lectura. Con este tipo de cerrojo el registro se bloquea cuando una aplicacin comienza a editarlo. Otros usuarios podrn consultar el registro, pero no podrn cambiarlo. El bloqueo se elimina, cuando la aplicacin que lo gener, actualiza el registro. Esta es la tcnica de bloqueo ms comn. El registro modificado se bloquea en el momento de su actualizacin, operacin que dura un instante. Algunas aplicaciones pueden descargar un recordset al cliente, cortar la comunicacin con el servidor, actualizar varios registros, e intentar conectar de nuevo para aplicar los cambios realizados. Este mtodo se usa con objetos recordset no conectados.

adLockPessimistic

adLockOptimistic

adBatchOptimistic

Una de las formas de utilizar un tipo de cerrojo puede ser la siguiente: rs.Open SQL, ConexionActiva, TipoDeCursor, TipoDeCerrojo Donde rs y ConexionActiva corresponden a objetos Recordset y Connection respectivamente, y SQL corresponde a la sentencia que contendr la consulta a la base de datos.

Revisin: 1.0

Pgina 3

ADO: conexiones, cursores, recordsets, etc.

Por gentileza de F. Salvador

Otra forma de definir el tipo de cerrojo de un Recordset sera utilizando la propiedad LockType, de la siguiente forma: rs.LockType = cerrojo Movindonos por el Recordset Teniendo claro el uso de los cursores y los cerrojos, podemos comenzar a ver los mtodos y propiedades que utilizaremos para recorrer un Recordset. A travs de la utilizacin de los mtodos podremos definir el movimiento a realizar, el que ser complementado con la utilizacin de las propiedades que nos permitirn controlar la situacin del puntero, evitando que nos salgamos de los lmites del Recordset. Mtodo Move Descripcin Permite movernos hacia arriba si le indicamos un nmero positivo, o hacia abajo si le indicamos uno negativo. Ej.: rs.Move -2 Nos lleva al primer registro del Recordset. Nos permite recorrer secuencialmente el Recordset, avanzando un registro hacia adelante. Nos lleva al ltimo registro del Recordset. Nos permite recorrer en forma inversa el Recordset, avanzando un registro hacia atrs. Nos lleva al registro anterior.

MoveFirst MoveNext MoveLast MovePrevious

Las propiedades relacionadas con el movimiento a travs del Recordset son las siguientes: Propiedad AbsolutePosition Descripcin Nos indica el nmero del registro en el que nos encontramos. Tambin lo podemos utilizar para movernos a una determinada posicin. Ej.: rs.AbsolutePosition = 5 Es True cuando nos encontramos al principio del Recordset, antes del primer registro. Es True cuando nos encontramos al final del Recordset, despus del ltimo registro. Nos seala el nmero de registros que contiene el objeto Recordset.

BOF EOF RecordCount

Revisin: 1.0

Pgina 4

ADO: conexiones, cursores, recordsets, etc.

Por gentileza de F. Salvador

Mtodos, propiedades y colecciones del Recordset Ahora que hemos visto los aspectos bsicos de un Recordset entregaremos al lector una gua con los principales mtodos asociados a este objeto, de forma que se pueda profundizar en el estudio y utilizacin del objeto Recordset. Mtodo AddNew Descripcin Crea un nuevo registro en el Recordset. Slo ser insertado en la tabla cuando se aplique el mtodo Update. Ejemplo: rs.AddNew rs("Nombre") = "Rodrigo" rs("Apellido") = "Rohland" rs.Update Cancela un proceso de actualizacin, ya sea de creacin o de modificacin de registros. Crea una copia del objeto Recordset. Ejemplo: Set rs2 = rs.Clone Cierra el objeto Recordset utilizado. Elimina del Recordset el registro que estemos utilizando en ese momento. Crea un arreglo con el contenido del Recordset. Permite movernos hacia arriba si le indicamos un nmero positivo, o hacia abajo si le indicamos uno negativo. Ejemplo: rs.Move -2 Nos lleva al primer registro del Recordset. Nos permite recorrer secuencialmente el Recordset, avanzando un registro hacia adelante. Nos lleva al ltimo registro del Recordset. Nos permite recorrer en forma inversa el Recordset, avanzando un registro hacia atrs. Nos lleva al registro anterior. En algunos casos una consulta SQL puede devolver ms de un Recordset. Con este mtodo borraremos el Recordset actual y avanzaremos al siguiente. Abre el objeto Recordset, cargando en l los resultados de la consulta efectuada a una o varias tablas. Ejemplo: rs.Open SQL, oConn, cursor, cerrojo Con este mtodo se puede actualizar el objeto Recordset, observndose los cambios ocurridos en los datos. Mediante este mtodo podremos validar si el objeto Recordset abierto, soporta algn mtodo o funcin en particular. Este mtodo nos presente las siguientes posibilidades:
Revisin: 1.0

CancelUpdate Clone Close Delete GetRows Move

MoveFirst MoveNext MoveLast MovePrevious

NextRecordSet

Open

Requery

Supports

adAddNew. El Recordset soporta el mtodo


Pgina 5

ADO: conexiones, cursores, recordsets, etc.

Por gentileza de F. Salvador

Update

AddNew. adApproxPosition. Soporta las propiedades AbsolutePosition y AbsolutePage. adDelete. Soporta el mtodo Delete. adMovePrevious. Soporta los mtodos Move y MovePrevious. adUpdate. Soporta el mtodo Update.

Actualiza la tabla a la que hace referencia el objeto Recordset, haciendo efectivos los cambios realizados.

Vistos los mtodos, pasaremos a analizar las propiedades del objeto Recordset, con las cuales podremos conocer el estado de este objeto durante la ejecucin de nuestra aplicacin. Propiedad AbsolutePage Descripcin Cuando hayamos paginado nuestro Recordset, podremos utilizar esta propiedad para ubicarnos en una pgina determinada del objeto paginado. Nos indica el nmero del registro en el que nos encontramos. Tambin lo podemos utilizar para movernos a una determinada posicin. Ej.: rs.AbsolutePosition = 5 Sirve para leer el DSN o la ruta correspondiente a la conexin relacionada con nuestro objeto Recordset. Es True cuando nos encontramos al principio del Recordset, antes del primer registro. Devuelve o fija un identificador para el registro actual. Define el nmero de registros o filas que el Recordset va a pre-almacenar en la memoria cach. Se relaciona con el tipo de cursor que utilizaremos en el objeto Recordset. Las opciones se analizaron en el apartado "Tipos de Cursor del Recordset" Seala el estado de edicin de un registro. Existen tres posibilidades: adEditNone. El registro no se encuentra editado. adEditInProgress. El registro se encuentra editado, pero no se ha grabado. adEditAdd. Se ha llamado al mtodo AddNew.

AbsolutePosition

ActiveConnection BOF Bookmark CacheSize CursorType

EditMode

EOF Filter

Es True cuando nos encontramos al final del Recordset, despus del ltimo registro. Permite filtrar un Recordset, manteniendo slo los registros que superen ese filtro. Ejemplo: Filtro = "Fecha='" & Date "'" rs.Filter = Filtro
Pgina 6

Revisin: 1.0

ADO: conexiones, cursores, recordsets, etc.

Por gentileza de F. Salvador

LockType

Se relaciona con el tipo de cerrojo que utilizaremos en el objeto Recordset. Las opciones se analizaron en el apartado "Tipos de Cerrojo del Recordset" Nos permite fijar el nmero mximo de registros que aceptar el objeto Recordset. El valor por defecto es 0 e indica que no existir lmite. Nos dice cuntas pginas tenemos en funcin del tamao de cada pgina que hemos con PageSize. Define el nmero de registros o filas que forman una pgina. Por defecto son 10. Nos seala el nmero de registros que contiene el objeto Recordset. Seala el estado del objeto Recodset. Existen las siguientes posibilidades: adStateClosed. El Recordset est cerrado. adStateOpen. El Recordset est abierto.

MaxRecords

PageCount PageSize RecordCount State

Por ltimo, debemos referirnos a las dos colecciones que forman parte del objeto Recordset. Estas colecciones son las siguientes: Coleccin Fields Descripcin La coleccin Fields representa los campos o columnas del objeto Recordset. Los objetos Field de un objeto Recordset se utilizan para leer y establecer valores para los campos del registro activo del objeto Recordset. Para hacer referencia a un objeto Field en una coleccin por su nmero de orden o por su valor de propiedad Name, podemos utilizar los siguientes formatos de sintaxis : Fields(0) Fields("nombre") Corresponde al conjunto de propiedades del objeto Recordset, ya sean por defecto o modificadas por nosotros. Accederemos a ellas de la siguiente forma: rs.Propierties(propiedad)

Properties

En resumen... El modelo de acceso a datos ADO, y sus objetos asociados nos entregan una manera sumamente fcil, pero no por ello poco poderosa para el acceso a datos. En este artculo, hemos pretendido mostrar de forma sencilla y clara las caractersticas, mtodos y propiedades ms importantes del objeto Recordset, que constituye la base principal para el desarrollo de cualquier aplicacin que implique la generacin dinmica de contenido HTML, tomando como referencia informacin contenida en base de datos externas.

Revisin: 1.0

Pgina 7

Das könnte Ihnen auch gefallen