Bases de datos en la Web

El sistema de acceso a bases datos a travs de la web utilizando la tecnologa Microsoft, se denomina ADO (ActiveX Data Objects). Aqu se expone una introduccin comprensiva en castellano. Para ver una completa referencia acerca de todo el sistema de bases de datos de Microsoft, consulte en www.microsoft.com/data. La referencia completa de mtodos y propiedades de los objetos est tambin en la biblioteca online de MSDN (msdn.microsoft.com). Ah ver mltiples ejemplos en los que comprobar la flexibilidad del sistema ADO (al mismo resultado se puede llegar por vas distintas). Por motivos pedaggicos, aqu se expone una utilizacin ms rgida.

.Terminologa

ADO: ActiveX Data Objects. Es una familia de objetos componentes dedicados a facilitar el acceso a bases de datos. El ProgID de cada uno de ellos se forma combinando ADODB. con el nombre del objeto (por ejemplo ADODB.Recordset, ADODB.Connection, ADODB.Command, etc). Por tanto, en VBScript los objetos se crean con sentencias tipo Set mirst = Server.CreateObject("ADODB.Recordset"), etc

.Los objetos componentes de ADO

Todo el sistema ADO se basa en una serie de objetos cuyas propiedades y mtodos hay que utilizar. Estos objetos estn registrados en el sistema, sin embargo no estn predefinidos. Es decir, hay que crearlos utilizando Server.CreateObject.

Como valores de muchas de las propiedades de los objetos ADO se utilizan constantes, como adOpenForwardOnly, adOpenKeySet, etc. Todas estas constantes empiezan por ad y estn definidas en un archivo llamado adovbs.inc para Visual Basic script y adojavas.inc para Javascript. Estos archivos los podr encontrar en su instalacin local de ADO. Para incluirlos en las pginas ASP es necesario utilizar un cdigo de este tipo al comienzo de cada pgina ASP que use las constantes:

<!--#INCLUDE FILE="adovbs.inc"-->  

Para que esta inclusin funcione el archivo adovbs.inc debe estar en el mismo directorio que la pgina ASP que lo incluye.

.Connection

Representa una conexin a una base de datos. Este es el primer objeto que debemos crear para poder conectar con la base de datos. Tanto el objeto ADO que nos permite acceder a los datos (Recordset) como el que nos permite realizar consultas (Command) disponen de una propiedad llamada ActiveConnection que es una referencia al objeto connection que enlaza con la base de datos a la que queremos atacar. De ah que el primer paso sea crear la conexin.

.Propiedades y mtodos ms relevantes

ConnectionString

Es una cadena de caracteres con la informacin necesaria para establecer una conexin con la fuente de datos. Por tanto, es la propiedad bsica de este objeto. Aunque hay hasta 7 argumentos distintos que se pueden suministrar en esta cadena, los bsicos son el DSN que identifica al archivo de base de datos y el login y password si existen. Los argumentos se separan con punto y coma.

Ejemplo: "DSN=midsn; UID=milogin; PWD=micontrasea"

Open

Abre la conexin con la base de datos. Si antes hemos asignado la propiedad ConnectionString, este mtodo no necesita parmetros.

Close

Cierra la conexin con la base de datos.

Ejemplo de uso
<%

    Set miconexion = Server.CreateObject("ADODB.Connection") 
    miconexion.ConnectionString = "DSN=midsn" 
    miconexion.Open 
    ' .......  
    '........  
    miconexion.Close 
%> 

.Recordset

Este es el objeto ADO ms importante ya que es con el que accederemos directamente a los datos de las tablas, tanto para leerlos como para modificarlos.

Un objeto Recordset representa una tabla, que puede ser una tabla fsica de la base de datos o bien una obtenida mediante una operacin como un filtrado o sentencia SQL. En cualquier caso, el objeto representa a la tabla con todos sus registros, aunque slo uno de ellos es el activo. El registro activo es en el que podemos leer o modificar los valores de los campos. Tambin se le llama cursor.

.Propiedades y mtodos ms importantes

Para una mejor compresin y puesto que son numerosos, los hemos dividido por categoras de utilidad.

Propiedades que hacen referencia al origen de los datos:

Estas dos propiedades deben ser asignadas a todo Recordset, pues le dicen la base de datos y la tabla de la que obtener sus datos.

ActiveConnection

Como se ha comentado antes a esta propiedad se le debe asignar un objeto connection que se haya creado previamente. Indicar al Recordset la base de datos en la que buscar su tabla.

Source

Indica al objeto Recordset la tabla a la que representar. A la propiedad Source se le asigna normalmente una cadena de caracteres con el nombre de la tabla. Sin embargo, tambin es posible asignarle una sentencia SQL y entonces el objeto Recordset referenciar al resultado de aplicar dicha sentencia.

LockType

Indica el tipo de bloqueo que se realiza sobre la base de datos. Por defecto toma el valor adLockReadOnly que como su nombre indica slo sirve para leer datos. Si deseamos editar o aadir registros, tendremos que cambiar esta propiedad por otro valor. El ms usado es adLockOptimistic que permite editar la base de datos o aadir registros realizando un bloqueo optimista (slo cuando sea estrictamente necesario).

CursorType

El tipo de cursor que se utiliza para recorrer los registros de un recordset. Por defecto toma el valor adOpenForwardOnly que como su nombre indica slo permite moverse hacia adelante. Por ello si queremos utilizar libremente todos los mtodos de movimiento de un recordset (MoveFirst, MoveTo, MoveNext, MovePrevious, etc) tendremos que cambiar el cursor por uno ms potente. Esto puede hacerse asignando a esta propiedad el valor adOpenKeyset

Ejemplo

Aqu creamos en primer lugar un objeto Connection y luego un Recordset al que se asigna dicho objeto. Este ejemplo es una especie de esqueleto para los dems que sigan: Se supone que debe hacerse algo parecido a esto para abrir el Recordset. Es decir, en los restantes ejemplos escribimos slo el cdigo que ira en el lugar de los puntos suspensivos de este script (NOTA: Recuerde que si hay que aadir registros es necesario cambiar el LockType antes de inicializar el recordset).

<%
    Set miconexion = Server.CreateObject("ADODB.Connection") 
    miconexion.ConnectionString = "DSN=midsn" 
    miconexion.Open 
    Set mirecordset = Server.CreateObject("ADODB.Recordset") 
    mirecordset.ActiveConnection = miconexion 
    mirecordset.Source = "Clientes" 
    mirecordset.Open 
    ........ ' Operaciones con los datos 
    ........' de la tabla Clientes. 
    mirecordset.Close 
    miconexion.Close 
%>

Propiedades que hacen referencia al nmero de registros:

RecordCount

Nmero de registros de la tabla a la que representa el objeto recordset.

Ejemplo:

<h3>
Tenemos <%= rstClientes.RecordCount%> 
clientes registrados en nuestra base de datos
</h3>

EOF

Acrnimo de End Of File. Vale TRUE si estamos en el ltimo registro y FALSE si no. Se usa mucho como condicin en bucles while, los cuales se ejecutan hasta llegar al ltimo registro.

BOF

Acrnimo de Begin Of File. Vale TRUE si estamos en el primer registro y FALSE si no.

Mtodos para mover el cursor (registro activo):

Estos mtodos pueden funcionar todos o no dependiendo del tipo de cursor creado. El tipo de cursor se asigna en la propiedad CursorType. Por ejemplo, para asignar un cursor adOpenKeySet que permita moverse hacia adelante o hacia atrs:

<%
    Set miconexion = Server.CreateObject("ADODB.Connection") 
    miconexion.ConnectionString = "DSN=midsn" 
    miconexion.Open 
    Set mirecordset = Server.CreateObject("ADODB.Recordset") 
    mirecordset.ActiveConnection = miconexion 
    mirecordset.Source = "Clientes" 
    mirecordset.CursorType = adOpenKeySet 
    mirecordset.Open 
    ........ ' Operaciones con los datos 
    ........' de la tabla Clientes. 
    mirecordset.Close 
    miconexion.Close 
%>

Ntese que la asignacin de propiedades al recordset debe hacerse antes de invocar el mtodo open que es el que lo inicializa con registros.

MoveFirst

Mueve el cursor al primer registro de la tabla

MoveLast

Mueve el cursor al ltimo registro de la tabla

MoveNext

Mueve el cursor al siguiente registro.

MovePrevious

Mueve el cursor al registro anterior.

Ejemplo de un bucle que recorre todos los registros de una tabla

<%
    mirecordset.MoveFirst 
    do while not mirecordset.EOF 
..... ' Tratamiento 
..... ' de datos 
mirecordset.MoveNext 
    loop 
%>

Lectura y modificacin de los campos del registro activo

La sintaxis para acceder a los datos de un campo del registro activo de un recordset es:

mirecordset("Domicilio")

Esto se usa tanto para leer como asignar valores. En nuestro ejemplo, el objeto mirecordset representa a una tabla uno de cuyos campos tiene el nombre "Domicilio". As, con la expresin

dom = mirecordset("Domicilio")

Leemos el valor del campo domicilio del registro activo y se lo asignamos a la variable dom. Con la expresin

mirecordset("Domicilio") = "C/ Bretn de los Herreros 19, 1 M" 
mirecordset.Update

asignamos un valor al campo Domicilio del registro activo. Tras la edicin del registro, es necesario llamar al mtodo Update. El motivo es que los cambios en el registro activo se realizan sobre un buffer (espacio de almacenamiento intermedio) y no sobre el registro propiamente dicho.

Ejemplo:

El recordset rstClientes representa a nuestra tabla de clientes que, entre otros, tiene los campos Provincia e IVA . El siguiente bucle recorre todos los clientes, comprueba su provincia y le asigna el IVA correspondiente: 0 para Canarias y 16 para los dems

<%

    rstClientes.MoveFirst 
    do while not rstClientes.EOF 
        if rstClientes("Provincia") = 
          "Las Palmas" or rstClientes("Provincia") = "Tenerife" 
        Then 
            rstClientes("IVA") = 0 
        else 
            rstClientes("IVA") = 16 
        end if 
        rstClientes.Update 
        rstClientes.MoveNext 
    loop 
%>

Mtodos para agregar o eliminar registros de la tabla

Delete

Eliminar el registro activo es muy fcil. Basta con invocar este mtodo. Por ejemplo, este bucle elimina todos los clientes morosos de nuestra base de datos:

<%
    rstClientes.MoveFirst 
    do while not rstClientes.EOF 
        if rstClientes("Deuda") > 0 Then 
            rstClientes.Delete 
        end if 
    rstClientes.MoveNext 
    loop 
%>

AddNew y Update

Crear un nuevo registro involucra dos mtodos: Primero AddNew crea un nuevo registro en blanco. Despus asignamos valores a los distintos campos del registro. Por ltimo invocamos el mtodo Update para que se haga efectiva la incorporacin del nuevo registro con los valores asignados.

En este ejemplo incorporamos un nuevo cliente a nuestra base de datos

<%

    rstClientes.AddNew 
    rstClientes("Nombre") = "Pepe Gotera" 
    rstClientes("Direccion") = "Rue del Percebe, 13" 
    rstClientes("Localidad") = "Sildavia" 
    rstClientes("Profesion") = "Chapuzas a domicilio" 
    rsClientes.Update 
%>

Recuerde que para que esto funcione hay que asignar un tipo de bloqueo que permita la edicin de la base de datos. Esto se hace asignando a la propiedad LockType del recordset uno de estos valores: adLockOptimistic, adLockPessimistic o adLockBatchOptimistic.

.Command

Este objeto es la representacin de un comando que se enva a la base de datos. Este comando puede ser una de estas 3 cosas:

  • Llamada a un procedimiento guardado en la base de datos.
  • El texto de una sentencia SQL.
  • El nombre de una tabla.

ActiveConnection

Es una referencia al objeto connection que enlaza con la base de datos. es imprescindible asignar esta propiedad antes de invocar el mtodo command.execute para ejecutar el comando.

CommandText

Este es el texto del comando. Si se trata de una consulta SQL (lo habitual), esta propiedad es simplemente una cadena con el texto de la consulta.

Execute

El mtodo que ejecuta la consulta. El resultado de la ejecucin del comando normalmente ser un recordset.

En el ejemplo, obtenemos un recorset con un filtrado de la tabla Clientes en el que se toma slo aquellos clientes cuya provincia es Navarra.

<%

    Set miconexion = Server.CreateObject("ADODB.Connection") 
    miconexion.ConnectionString = "DSN=midsn" 
    miconexion.Open 
    Set SqlCommand = Server.CreateObject("ADODB.Command") 
    SqlCommand.ActiveConnection = miconexion 
    SqlCommand.CommandText = 
          "SELECT * FROM Clientes WHERE Provincia = 'Navarra'" 
    Set rstNavarros = SqlCommand.execute 
    ' .......  
    '........  
    miconexion.Close 
%>

.Nuestro Ejemplo

En nuestro ejemplo vamos a usar el script bd.asp, PWS y la base de datos Ejemplo1 en formato Access.

Como casi todos los script que vamos a desarrollar en este turorial, primero nos presenta el estado actual de la tabla Clientes y un formulario para aadir un nuevo registro en la BD.

Tambin hemos explicado en este captulo como borrar y moverse por el recordset, pero en el ejemplo no lo usamos porque la mayora de las veces el cliente slo debe poder ver y aadir registros a la base de datos, y no modificarlos y / o borrarlos.

Llamando al scripts desde el browser cliente con http://127.1.1.1/sie/asp/bd.asp debe aparecernos algo parecido a esto:

Pantalla de ejemplo

COMPARTE ESTE ARTÍCULO

ENVIAR A UN AMIGO
COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN GOOGLE +
SIGUIENTE ARTÍCULO

¡SÉ EL PRIMERO EN COMENTAR!
Conéctate o Regístrate para dejar tu comentario.