utilización de siete objetos: Connection, Recordset

Anuncio
Sin duda, la mejor parte de ASP es la relacionada con la facilidad que nos permite
para el acceso a bases de datos, mediante la utilización de ActiveX Data Objects,
más conocido como ADO. Este modelo de acceso a bases de datos se basa en la
utilización de siete objetos: Connection, Recordset, Command, Field, Parameter,
Property y Error. Sin embargo, de estos siete objetos uno de los más importantes y
más ricos en cuanto a las posibilidades que nos brinda para el manejo de datos es el
Recordset.
Definiendo el Concepto Recordset
En términos sencillos, un objeto
Recordset es una tabla que contiene los datos que
manejará nuestra aplicación ASP. 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.
Para recuperar datos, examinar resultados y modificar bases de datos, ADO nos
proporciona el objeto Recordset. El objeto Recordset tiene las funciones necesarias
para, dependiendo de las restricciones de las consultas, recuperar y presentar un
conjunto de filas, o registros, de una base de datos. El objeto Recordset mantiene la
posición de cada registro devuelto por la consulta, lo que nos permite "recorrer" los
resultados de uno en uno.
Las buenas aplicaciones de base de datos emplean el objeto Connection para
establecer un vínculo y el objeto Recordset para manipular los datos devueltos. Si
utilizamos conjuntamente las funciones especializadas de ambos objetos podremos
desarrollar aplicaciones de bases de datos que realicen casi cualquier tarea de
tratamiento de datos.
Tipos de Cursor del Recordset
Un cursor corresponde a un tipo de restricción aplicable al Recordset, y que señala la
forma en que se podrá recorrer este objeto. Dependiendo de cómo se configuren las
propiedades del tipo de cursor del objeto Recordset, se puede recorrer y actualizar
los registros. Los cursores de la base de datos se comportan como punteros que
permiten encontrar un elemento específico de un conjunto de registros. Los cursores
son especialmente útiles para recuperar y examinar registros, y después 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 ya que es el
que consume menos recursos, agilizando las operaciones. Por el contrario, si
necesitamos recorrer el Recordset de otra forma, estos son los tipos de cursores
existentes:
Tipo de Cursor
Valor
adOpenForwardOnly
0
Descripción
Es el cursor por defecto y nos
permite recorrer el Recordset en
forma secuencial.
1
adOpenKeySet
Permite movernos hacia delante y
atrás. Permite observar las
modificaciones en los datos del
Recordset , no así si existen
ingresos de nuevos registros.
2
adOpenDynamic
Permite movernos en cualquier
sentido, viendo cualquier
modificación, ingreso o eliminación
de datos del Recordset.
3
adOpenStatic
Permite movernos en cualquier
sentido, pero no se verá ningún
cambio ocurrido en la tabla.
Una de las formas de utilizar un tipo de cursor puede ser la siguiente:
rs.Open SQL, oConn, cursor
Donde
y
rs y oConn corresponden a objetos Recordset y Connection respectivamente,
SQL corresponde a la sentencia que contendrá la consulta a la base de datos.
Otra forma de definir el tipo de cursor de un Recordset sería utilizando la propiedad
CursorType, de la siguiente forma:
rs.CursorType = cursor
Tipos de Cerrojo del Recordset
Los cerrojos deben ser utilizados casi obligatoramente en Recordset que hacen
referencia a bases de datos con alta concurrencia de usuarios. Mediante la utilización
de estos cerrojos podremos controlar el tipo de acceso que le daremos a los demás
usuarios cuando alguien ya se encuentre modificando el Recordset. Los tipos de
cerrojos que podremos utilizar son los siguientes:
Tipo de Cerrojo
Valor
Descripción
adLockReadOnly
1
Es el cerrojo por defecto y no permite
modificar los registros de la tabla.
2
adLockPessimistic
Una vez que alguien abre la tabla,
ésta queda bloqueada para los demás
usuarios. Con este modo se asegura
la integridad de los datos.
3
adLockOptimistic
La tabla sólo será bloqueada a los
demás usuarios mientras se ejecute
una operación Update. De esta forma
la tabla se bloqueará durante mucho
menos tiempo que con el método
anterior.
4
adBatchOptimistic
Los registros serán actualizados en
modo batch.
Una de las formas de utilizar un tipo de cerrojo puede ser la siguiente:
rs.Open SQL, oConn, cursor, cerrojo
Donde
y
rs y oConn corresponden a objetos Recordset y Connection respectivamente,
SQL corresponde a la sentencia que contendrá la consulta a la base de datos.
Otra forma de definir el tipo de cerrojo de un Recordset sería utilizando la propiedad
LockType, de la siguiente forma:
rs.LockType = cerrojo
Definiendo nuestras Constantes: ADOVBS.INC o METADATA
Tanto los cursores, como los cerrojos utilizados por ADO deben encontrarse definidos
como constanstes en nuestras aplicaciones para poder ser usados en nuestro código.
Uno de los métodos existentes para definir estas constantes consiste en utilizar una
biblioteca de tipos de componentes. Una biblioteca de tipos de componentes
corresponde a un archivo que almacena todos los parámetros ADO. Para utilizar este
tipo de archivos basta con agregar, al archivo .asp o al Global.asa, la siguiente línea
de códigos:
<!-- METADATA NAME="Microsoft ActiveX Data Objects 2.5 Library"
TYPE="TypeLib"
UUID="{00000205-0000-0010-8000-00AA006D2EA4}"-->
Otra alternativa, mucho más simple y por ello más utilizada es la de incluir el archivo
ADOVBS.INC. Este archivo se incluye en la instalación del IIS y contiene todas las
constantes ADO posibles de utilizar desde ASP. Para poder utilizar este archivo se
debe agregar la siguiente línea en nuestro código:
<!-- #include virtual = "adovbs.inc" -->
Una vez que hemos incluido este archivo, podremos utilizar las constantes definidas
en él, haciendo referencia a los valores declarados para cada uno de los parámetros
ADO. Por ejemplo, si queremos definir un recordset que utilice un cursor de tipo
adOpenKeySet escribiremos el siguiente código, haciendo referencia al valor 1 que
corresponde a la constante adOpenKeySet:
rs.Open SQL, oConn, 1
Si quieres saber más del archivo ADOVBS.INC lee este artículo.
Moviéndonos por el Recordset
Teniendo claro el uso de los cursores y los cerrojos, podemos comenzar a ver los
métodos y propiedades que utilizaremos para recorrer un Recordset. A través de la
utilización de los métodos podremos definir el movimiento a realizar, el que será
complementado con la utilización de las propiedades que nos permitirán controlar la
situación del puntero, evitando que nos salgamos de los límites del Recordset.
Método
Descripción
Move
Permite movernos hacia arriba si le indicamos
un número positivo, o hacia abajo si le
indicamos uno negativo. Ej.:
rs.Move -2
MoveFirst
Nos lleva al primer registro del Recorset.
MoveNext
Nos permite recorrer secuencialmente el
Recordset, avanzando un registro hacia
adelante.
MoveLast
Nos lleva al último registro del Recordset.
MovePrevious
Nos permite recorrer en forma inversa el
Recordset, avanzando un registro hacia atrás.
Nos lleva al registro anterior.
Las propiedades relacionadas con el movimiento a través del Recordset son las
siguientes:
Propiedad
Descripción
AbsolutePosition
Nos indica el número del registro en el que nos
encontramos. También lo podemos utilizar para
movernos a una determinada posición.
Ej.:
BOF
Es
rs.AbsolutePosition = 5
True cuando nos encontramos al principio
del Recordset, antes del primer registro.
EOF
Es
True cuando nos encontramos al final del
Recordset, después del último registro.
RecordCount
Nos señala el número de registros que contiene
el objeto Recordset.
Métodos, propiedades y colecciones del Recordset
Ahora que hemos visto los aspectos básicos de un Recordset entregaremos al lector
una guía con los principales métodos asociados a este objeto, de forma que se pueda
profundizar en el estudio y utilización del objeto Recordset.
Método
AddNew
Descripción
Crea un nuevo registro en el Recordset. Sólo
será insertado en la tabla cuando se aplique el
método Update. Ejemplo:
rs.AddNew
rs("Nombre") = "Rodrigo"
rs("Apellido") = "Rohland"
rs.Update
CancelUpdate
Cancela un proceso de actualización, ya sea de
creación o de modificación de registros.
Clone
Crea una copia del objeto Recordset. Ejemplo:
Set rs2 = rs.Clone
Close
Cierra el objeto Recordset utilizado.
Delete
Elimina del Recordset el registro que estemos
utilizando en ese momento.
GetRows
Crea un arreglo con el contenido del Recordset.
Si quieres aprender más sobre este método
visita este artículo.
Move
Permite movernos hacia arriba si le indicamos
un número positivo, o hacia abajo si le
indicamos uno negativo. Ejemplo:
rs.Move -2
MoveFirst
Nos lleva al primer registro del Recorset.
MoveNext
Nos permite recorrer secuencialmente el
Recordset, avanzando un registro hacia
adelante.
MoveLast
Nos lleva al último registro del Recordset.
MovePrevious
Nos permite recorrer en forma inversa el
Recordset, avanzando un registro hacia atrás.
Nos lleva al registro anterior.
NextRecordSet
En algunos casos una consulta SQL puede
devolver más de un Recordset. Con este
método borraremos el Recordset actual y
avanzaremos al siguiente.
Open
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
Requery
Con este método se puede actualizar el objeto
Recordset, observándose los cambios ocurridos
en los datos.
Supports
Mediante este método podremos validar si el
objeto Recordset abierto, soporta algún
método o función en particular. Este método
nos presente las siguientes posibilidades:
•
adAddNew. El Recordset soporta el
método AddNew.
•
adApproxPosition. Soporta las
propiedades AbsolutePosition y
AbsolutePage.
•
adDelete. Soporta el método Delete.
•
adMovePrevious. Soporta los métodos
Move y MovePrevious.
•
Update
adUpdate. Soporta el método Update.
Actualiza la tabla a la que hace referencia el
objeto Recordset, haciendo efectivos los
cambios realizados.
Vistos los métodos, pasaremos a analizar las propiedades del objeto Recordset, con
las cuales podremos conocer el estado de este objeto durante la ejecución de
nuestra aplicación.
Propiedad
AbsolutePage
Descripción
Cuando hayamos paginado nuestro Recordset,
podremos utilizar esta propiedad para
ubicarnos en una página determinada del
objeto paginado. Para aprender más sobre la
paginación de Recordset lee el este artículo.
AbsolutePosition
Nos indica el número del registro en el que
nos encontramos. También lo podemos
utilizar para movernos a una determinada
posición.
Ej.:
ActiveConnection
rs.AbsolutePosition = 5
Sirve para leer el DSN o la ruta
correspondiente a la conexión relacionada con
nuestro objeto Recordset.
BOF
Es
True cuando nos encontramos al principio
del Recordset, antes del primer registro.
Bookmark
Devuelve o fija un identificador para el
registro actual.
CacheSize
Define el número de registros o filas que el
Recordset va a pre-almacenar en la memoria
caché.
CursorType
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"
EditMode
Señala el estado de edición 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 método
AddNew.
EOF
Es
True cuando nos encontramos al final del
Recordset, después del último registro.
Filter
Permite filtrar un Recordset, manteniendo
sólo los registros que superen ese filtro.
Ejemplo:
Filtro = "Fecha='" & Date "'"
rs.Filter = Filtro
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"
MaxRecords
Nos permite fijar el número máximo de
registros que aceptará el objeto Recordset. El
valor por defecto es 0 e indica que no existirá
límite.
PageCount
Nos dice cuántas páginas tenemos en función
del tamaño de cada página que hemos con
PageSize.
PageSize
Define el número de registros o filas que
forman una página. Por defecto son 10.
RecordCount
Nos señala el número de registros que
contiene el objeto Recordset.
State
Señala el estado del objeto Recodset. Existen
las siguientes posibilidades:
•
adStateClosed. El Recordset está
cerrado.
•
adStateOpen. El Recordset está
abierto.
Por último, debemos referirnos a las dos colecciones que forman parte del objeto
Recordset. Estas colecciones son las siguientes:
Colección
Fields
Descripción
La colección 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 colección
por su número de orden o por su valor de
propiedad Name, podemos utilizar los
siguientes formatos de sintaxis :
Fields(0)
Fields("nombre")
Properties
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)
En resumen...
El modelo de acceso a datos ADO y sus objetos asociados nos entregan una manera
sumamente fácil, pero no por ello poco poderosa para el acceso a datos. En este
artículo, hemos pretendido mostrar de forma sencilla y clara las características,
métodos y propiedades más importantes del objeto Recordset, que constituye la
base principal para el desarrollo de cualquier aplicación que implique la generación
dinámica de contenido HTML, tomando como referencia información contenida en
base de datos externas.
Descargar