<%
Set DB = Server.CreateObject("ADODB.Connection")
Set RS = Server.CreateObject("ADODB.RecordSet")
%>
Esta es una buena muestra de la gran potencia y versatilidad de ASP. Con el objeto Server.CreateObject() hemos creado otros dos objetos de ADO: Connection y RecordSet. el primero será utilizado para establecer un vínculo con la base de datos, y el segundo nos servirá para manipular los datos.
Seguramente te habrás fijado en que hay una instrucción que hasta ahora no habíamos visto: Set. En efecto, hasta el momento para asignar un valor a una variable, simplemente escribíamos una igualdad, por ejemplo:
Nuevocod = Request.Form("NuevoCod").
Esto se puede hacer siempre que la variable vaya a recibir como valor un string, un número, el resultado de una función, una propiedad o un método, pero en el caso de un objeto hay que anteponer la instrucción Set, tal como se muestra. Cuando más tarde se cierre el objeto, hay que recuperar los recursos asignados ahora.
Close es en realidad un método, y se encarga de vaciar el buffer y de cerrar el objeto. Después, la instrucción Nothing indica al sistema que el objeto ya no está vinculado a ninguna variable, por lo que sus recursos pueden ser recuperados.
Veamos ahora cómo utilizar las propiedades de los dos objetos creados. Si preparamos una consulta escrita en SQL para el objeto DB, podremos extraer información de la Base de Datos y cargarla en el objeto RS, lo que nos permitirá movernos por el RecordSet o ver su contenido con toda facilidad:
<% SQL ="SELECT convert(char(8), nom_dni) + nom_nif AS 'NIF', " & _ "nom_apellidos AS 'Apellidos', " & _ "nom_nombre AS 'Nombre', " & _ "nom_postal AS 'Postal' " & _ "nom_postal + ' ' + nom_localidad AS 'Localidad', " & _ "nom_provincia AS 'Provincia' " & _ "FROM nombres WHERE nom_dni = 12345678 " %>Y ahora abrimos los objetos y les damos parámetros:
<%
DB.Open "DB_nombre", "DB_user", "DB_password"
RS.Open SQL, DB
%>
Esto coloca el puntero en el primer registro del RecordSet. Ahora, mediante un bucle, mostraremos en la pantalla del cliente el contenido del RecordSet en formato de tabla:
<% '---Se comprueba si el RecordSet viene vacio. Si tiene contenido, se muestran los '---registros utilizando las propiedades y colecciones del objeto RS. If RS.EOF AND RS.BOF Then Response.Write("Error. No se encontraron registros") Else Response.Write("<TABLE BORDER=1>") For i = 0 to RS.Fields.Count - 1 Response.Write("<TR><TH>") Response.Write(RS(i).Name) Response.Write("</TH><TD>") Response.Write(RS(i)) Response.Write("</TD></TR>") Next Response.Write("</TABLE>") End if '---Se cierran los objetos, en orden inverso a como se abrieron, y se liberan los '---recursos que el servidor les habia asignado, con la instrucción Nothing RS.Close Set RS = Nothing DB.Close Set DB = Nothing %>
Y este podría ser el resultado (en cuanto a forma, el contenido depende de lo que haya en la tabla, claro):
NIF 12345678Z Apellidos Garcia Nombre Juan Postal 12345 Localidad 12345 Villa Desconocida Provincia Guadalajara
En este ejemplo se han visualizado todos los registros y campos de la tabla contenida en el objeto RS, sin necesidad de saber cuantos hay ni sus nombres, es decir utilizando una colección, pero este objeto tiene varios métodos que nos permitirán movernos por los registros, y por los campos que los componen, invocando su nombre: por ejemplo, para ver sólo el contenido del campo Provincia, se escribe:
<%
Response.Write( RS("Provincia") )
%>
Para escribir un valor en un campo de un registro se procede así:
<%
RS("Provincia") = "Toledo"
RS("Postal") = 54321
%>
Fíjate en que si el tipo de dato del campo es numérico el valor no debe ir entrecomillado, pero si el tipo es de texto sí. Para moverse por el RecordSet tenemos los siguientes métodos:
<%
Const adOpenkeyset = 1
%>
Dispondremos de tres propiedades para movernos por las páginas del RecordSet:
<%
Set RS = Server.CreateObject("ADODB.Recordset")
Const adOpenkeyset = 1
RS.PageSize = 10
RS.Open SQL, DB, adOpenKeyset
%>
Como puedes ver, se procede igual que en el anterior ejemplo, pero incluyendo como parámetro de apertura del objeto RS la constante adOpenKeyset e indicando, antes de proceder a la apertura, el número de registros que debe contener la página: RS.PageSize = 10.
Con todo lo dicho hasta aquí no debes tener dificultad (salvo en los comandos VBScript, tal vez) en comprender cómo funciona el siguiente ejemplo de programa con estos dos objetos ADO (ActiveX Data Object).