Programación en castellano
Inicio > Tutoriales > Internet > ASP > Bases de datos en la Web
-Tutoriales

Bases de datos en la Web


ASP

. Introducción

El sistema de acceso a bases datos a través de la web utilizando la tecnología Microsoft, se denomina ADO (ActiveX Data Objects). Aquí se expone una introducción 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 métodos y propiedades de los objetos está también en la biblioteca online de MSDN (msdn.microsoft.com). Ahí verá múltiples ejemplos en los que comprobará la flexibilidad del sistema ADO (al mismo resultado se puede llegar por vías distintas). Por motivos pedagógicos, aquí se expone una utilización más rígida.

. Terminología

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 métodos hay que utilizar. Estos objetos están registrados en el sistema, sin embargo no están 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 están definidas en un archivo llamado adovbs.inc para Visual Basic script y adojavas.inc para Javascript. Estos archivos los podrá encontrar en su instalación local de ADO. Para incluirlos en las páginas ASP es necesario utilizar un código de este tipo al comienzo de cada página ASP que use las constantes:

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

Para que esta inclusión funcione el archivo adovbs.inc debe estar en el mismo directorio que la página ASP que lo incluye.

. Connection

Representa una conexión 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 conexión.

. Propiedades y métodos más relevantes

ConnectionString

Es una cadena de caracteres con la información necesaria para establecer una conexión con la fuente de datos. Por tanto, es la propiedad básica de este objeto. Aunque hay hasta 7 argumentos distintos que se pueden suministrar en esta cadena, los básicos 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=micontraseña"

Open

Abre la conexión con la base de datos. Si antes hemos asignado la propiedad ConnectionString, este método no necesita parámetros.

Close

Cierra la conexión 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 más 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 física de la base de datos o bien una obtenida mediante una operación como un filtrado o sentencia SQL. En cualquier caso, el objeto representa a la tabla con todos sus registros, aunque sólo uno de ellos es el activo. El registro activo es en el que podemos leer o modificar los valores de los campos. También se le llama cursor.

. Propiedades y métodos más importantes

Para una mejor compresión y puesto que son numerosos, los hemos dividido por categorías 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, también 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 sólo sirve para leer datos. Si deseamos editar o añadir registros, tendremos que cambiar esta propiedad por otro valor. El más usado es adLockOptimistic que permite editar la base de datos o añadir registros realizando un bloqueo optimista (sólo 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 sólo permite moverse hacia adelante. Por ello si queremos utilizar libremente todos los métodos de movimiento de un recordset (MoveFirst, MoveTo, MoveNext, MovePrevious, etc) tendremos que cambiar el cursor por uno más 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 demás que sigan: Se supone que debe hacerse algo parecido a esto para abrir el Recordset. Es decir, en los restantes ejemplos escribimos sólo el código que iría en el lugar de los puntos suspensivos de este script (NOTA: Recuerde que si hay que añadir 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 número de registros:

RecordCount

Número 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

Acrónimo de End Of File. Vale TRUE si estamos en el último registro y FALSE si no. Se usa mucho como condición en bucles while, los cuales se ejecutan hasta llegar al último registro.

BOF

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

Métodos para mover el cursor (registro activo):

Estos métodos 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 atrás:

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

Nótese que la asignación de propiedades al recordset debe hacerse antes de invocar el método 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 modificación 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 expresión

dom = mirecordset("Domicilio")

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

mirecordset("Domicilio") = "C/ Bretón de los Herreros 19, 1º M" 
mirecordset.Update

asignamos un valor al campo Domicilio del registro activo. Tras la edición del registro, es necesario llamar al método 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 demás

<%

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

Métodos para agregar o eliminar registros de la tabla

Delete

Eliminar el registro activo es muy fácil. Basta con invocar este método. 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 métodos: Primero AddNew crea un nuevo registro en blanco. Después asignamos valores a los distintos campos del registro. Por último invocamos el método Update para que se haga efectiva la incorporación 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 edición 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 representación de un comando que se envía 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 método 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 método que ejecuta la consulta. El resultado de la ejecución del comando normalmente será un recordset.

En el ejemplo, obtenemos un recorset con un filtrado de la tabla Clientes en el que se toma sólo 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 añadir un nuevo registro en la BD.

También hemos explicado en este capítulo como borrar y moverse por el recordset, pero en el ejemplo no lo usamos porque la mayoría de las veces el cliente sólo debe poder ver y añadir 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
 
Patrocinados
 

Copyright © 1999-2007 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network

red internet: musica mp3 | logos y melodias | hospedaje web linux | registro de dominios | servidores dedicados
más internet: comprar | recursos gratis | posicionamiento en buscadores | tienda virtual | gifs animados