1. Active Server Pages
ASP: Active Page Server
1.- INTRODUCCIÓN
ASP (Active Server Page, página activa en el servidor), es la propuesta de Microsoft
para crear páginas Web dinámicas.
Se puede combinar con páginas HTML, secuencias de comandos y componentes
ActiveX, para crear páginas y aplicaciones web interactivas.
El sentido de ASP, es liberar espacio en el servidor: Las páginas HTML son estáticas
y si el servidor tuviese que tenerlas guardadas ocuparían un espacio inmenso. La
solución es tener una fuente de datos y dependiendo de las peticiones del cliente
generar las páginas en ese momento. Cuando el cliente desconecta desaparecen dichas
páginas.
ASP, se basa en la programación para las redes TC-IP que se conoce con el nombre
de programación cliente- servidor que consiste en desdoblar un programa en dos
partes, una se ejecutará en el cliente y otra parte en el servidor.
La parte cliente se encarga del interfaz e interacción con el usuario y la parte servidor
se encarga de obtener y manipular los datos.
Hasta ahora nosotros hemos creado aplicaciones con código HTML y algunas con
código ejecutable, a través de JavaScript, pero siempre en el cliente, con nuestro
navegador. A partir de ahora crearemos programas que serán ejecutados por el
servidor y cuya salida se envía al navegador del cliente.
Página 1 de 48
2. Active Server Pages
2.- Modelo de Páginas ASP
2.1 - Cliente -> Servidor
Las páginas ASP comienzan a ejecutarse, cuando un usuario solicita un archivo .ASP
al servidor web a través del navegador. El servidor web llama al motor ASP, que lee
el archivo solicitado, ejecuta la secuencia de comandos y envía los resultados al
ordenador del cliente. Puesto que la secuencia de comandos se ejecuta en el servidor
y no en el cliente, es el servidor el que hace todo el trabajo para generar las páginas
que se envían al explorador.
Las secuencias de comandos quedan ocultas al usuario, estos solo reciben el resultado
de la ejecución en formato HTML. El servidor solo envía el resultado en código
HTML interpretable por cualquier navegador.
3.- Concepto de PG. ASP
Active Server Page (ASP), es un entorno para crear y ejecutar aplicaciones dinámicas
e interactivas en la web.
Se caracteriza por tener en un mismo archivo de extensión .asp código script, que se
ejecuta en el servidor, y código HTML, que se ejecuta en el cliente.
Así pues, la gran ventaja que presentan las páginas ASP, es que engloba tanto páginas
web con HTML, como scripts CGI (Common Gateway Interface). Una página ASP,
puede consistir solo en código HTML (sería una página web normal) o bien solo
código ejecutable (sería como un CGI), o bien ambos, ejecutable en el servido y
ejecutable en el cliente.
Para crear páginas ASP, se utiliza un procesador de texto normal, no es necesario
ningún editor especial.
Página 2 de 48
3. Active Server Pages
4.- Software Necesario.
Para ejecutar una página .asp necesitamos un servidor WEB, y para ello tenemos
dos opciones o bien instalamos un servidor como APACHE, o bien utilizamos un
simulador de un servidor web como es el Internet Information Server.
Para instalar el IIS:
1) Inicio/Panel de control/Agregar-Quitar programas /Programas de windows/
Seleccionamos IIS
2) Para acceder a él: Inicio/Panel de Contrl/Administrador de Herramientas/IIS
3) Una vez instalado el servidor web que vamos a utilizar en local, el siguiente
paso es crear un directorio virtual en el que alojaremos nuestras páginas.
4) Para visualizar las páginas en el navegador debemos introducir:
a. http://localhost/nombre -directorio-virtual/archivo.asp
b. Pinchamos en nuestra máquina que aparece dentro de Servicios de
Internet Information
c. Nos vamos a “sitio web predeterminado” con el botón derecho del
ratón seleccionamos: Nuevo/Directorio Virtual
d. Seguimos el asistente /Siguiente….. nos pide el nombre del directorio
virtual: asp (por ejemplo) / Siguiente…. Nos pide el nombre del
directorio físico que contiene los archivos .asp para ello pinchamos en
Examinar seleccionamos la carpeta y finalizamos.
e. Para ejecutar un archivo .asp en el IIS seleccionamos el archivo, botón
derecho/Explorar.
5) Otra opción bastante más sencilla es utilizar el Babyweb, que simula un
servidor web. Funciona sin grandes problemas.
Página 3 de 48
4. Active Server Pages
5.-MARCAS DE CÓDIGO <%............%>
ASP viene de forma nativa con dos motores de comandos, Visual Basic Script y
Microsoft JScript. Pero puede instalar y utilizar otros motores de lenguajes como
ReXX y Perl.
Para establecer el lenguaje principal de secuencias de comandos, en todas las páginas
de una aplicación, hay que agregar la directiva <%@LANGUAGE=VBscript%> o
bien <%@LANGUAGE=Javascript%>.
Por defecto, si no especificamos nada, el lenguaje utilizado es Visual Basic Script
(VBScript). Si utilizamos las marcas <%...........%> sin especificar lenguaje utilizará
por defecto el VBScript.
Tenemos otra forma de marcar el código ASP sin utilizar las etiquetas <%........%>:
1. <script LANGUAGE=”VBscript “ RUNAT=SERVER>
</script>
2. <script LANGUAGE=”JAVASCRIPT” RUNAT=SERVER>
</script>
Con “Runat= Server” estamos indicando que el código se ejecute en la parte del
servidor
COMENTARIOS
Para escribir un comentario en VBScript utilizaremos el apóstrofe:
<% ‘este es un comentario de VBScript %>
Página 4 de 48
5. Active Server Pages
Ver ejemplos:
1-Escribe-Texto
• 1Escribe-Texto-BVS.asp nos muestra cómo escribir texto
variables
• 2Escribe-Texto-BVS.asp muestra declaración de vbles de forma
implícia
• Error2.asp muestra la ejecución del código pero no nos dice
dónde está el error
• Error3.asp con Option Explict nos indica dónde nos hemos
equivocado.
6.-VARIABLES
Una variable es una pequeña sección de memoria de una computadora a la que se le
asigna un nombre.
Página 5 de 48
6. Active Server Pages
6.1.- TIPOS DE DATOS
Existen muchos tipos de datos que se pueden almacenar dentro de una variable.
1) Enteras (Integer) , sin parte fraccionaria
2) Float (numero de puntos flotantes), pueden tener un decimal p.ejem 5.1
• Podemos diferenciar Single y Double, la diferencia entre os dos tiene
que ver con la precisión utilizada para almacenar el número. El tipo de
datos Double requiere el doble de memoria que el tipo Single, pero
obviamente mantiene un rango de números mucho más grande y con
mayor precisión .
3) String (cadena de caracteres), siempre debe ir escrita entre comillas
4) Bolean (true o false),muy utilizadas en estructuras de control
5) Date (fecha)
6) Currency (dato de tipo dinero), se podrí utilizar un tipo de dato Single, pero
este tipo en conjunto con una serie de funciones especiales de VBScript
permite una mejor representación.
6.2.- DECLARACIÓN DE VARIABLES
Muchos lenguajes de programación requieren que, antes de utilizar una variable se
indique al sistema el tipo de datos que va a almacenar.
En VBScript podemos realizar la declaración de dos formas:
1.- Declaración Implícita: No es necesario indicar al sistema (declarar) el tipo de dato
que va a contener la variable (NO ES LO MÁS ACONSEJABLE)
mi_variable=2 Sería una variable con datos enteros
mi_variable=”Hola” Sería una variable que contiene cadena de
caracteres
2.- Declaración Explícita: De esta forma antes de introducir cualquier variable deberemos
introducir la siguiente línea <% OPTION EXPLCIT%> y además declararlas previamente
con DIM.
¿Por qué utilizar declaraciones Explícitas en VBScript ¿Veamos un ejemplo:
Página 6 de 48
7. Active Server Pages
Archivo: Código 3/Error2.asp
<%@ Language=VBScript %>
<% miprimeravariable = 2 %>
<HTML>
<BODY>
La variable llamada "miprimeravariable" tiene un valor de
<%
Response.Write(miprmeravariable)
%>
</BODY>
</HTML>
En este caso hemos hecho una declaración implícita, si ejecutamos el código no nos
dará ningún error, simplemente no mostrará el valor de “miprimeravariable”. Sin
embargo si realizamos una declaración Explícita, nos indicará que el error está en el
nombre de la variable, lo que nos ahorrará bastantes quebraderos de cabeza.
Archivo: Código 3/Error3.asp
<%@ Language=VBScript %>
<% Option Explicit %>
<% Dim miprimeravariable
miprimeravariable = 2
%>
<HTML>
<BODY>
La variable llamada "miprimeravariable" tiene un valor de
<% Ver ejemplos:
Response.Write(miprmeravariable)
Declara-Vables
%>
• DemoAsignacion.asp nos muestra cómo asignar valores a
</BODY> variables
</HTML>
• Error1.asp muestra declaración de vbles de forma implícia
• Error2.asp muestra la ejecución del código pero no nos dice
dónde está el error
• Error3.asp con Option Explict nos indica dónde nos hemos
equivocado. Página 7 de 48
8. Active Server Pages
Normas que se suelen utilizar en VBscript para declarar variables y así saber qué tipo de
variable es sin lugar a equivocarnos.
i (entero)
Str (string)
Dt (fecha)
Cur (currency)
Arr(array)
Ejemplo: inota=7m, strnombre=”Sergio”…etc
6.3 -MATRICES:
Existe otro tipo de datos fundamental, la matriz. Una matriz de variables es una
secuencia de variables, con el mismo nombre, pero diferenciadas por un índice.
En nuestro ejemplo el (6) indica el límite superior de la matriz, siendo el límite
inferior el (0).
<%@ Language=VBScript %>
<% Option Explicit
Dim ArrDias(6), iIndice %>
<HTML>
<BODY>
<% iIndice = 3
arrDias(0) = "Domingo"
arrDias(1) = "Lunes"
Página 8 de 48
9. Active Server Pages
arrDias(2) = "Martes"
arrDias(3) = "Miércoles"
arrDias(4) = "Jueves"
arrDias(5) = "Viernes"
arrDias(6) = "Sábado"
Response.Write ("iIndice tiene un valor de ")
Response.Write(iIndice) %> <BR>
arrDias(1) tiene un valor de
<% Response.Write(arrDias(1)) %> <BR>
arrDias(iIndice) tiene un valor de
<% Response.Write(arrDias(iIndice)) %> <BR>
arrDias(2+3) tiene un valor de
<% Response.Write(arrDias(2+3)) %> <BR>
arrDias(iIndice+1) tiene un valor de
<% Response.Write(arrDias(iIndice+1)) %>
</BODY>
</HTML>
Otra forma de asignar valores rápidamente a cada elemento de una matriz es
utilizando la Función Array
Nuestro ejemplo anterior quedaría:
arrDias = Array(“Domingo”,”Lunes”,“Martes”,“Miércoles”,“Jueves”, “Viernes”,
“Sábado”)
6.4.- CÓMO DETERMINAR EL TIPO DE VARIABLE
Existen dos tipos de funciones para determinar el tipo de datos que será almacenado
en una variable.
Página 9 de 48
10. Active Server Pages
1.- La primera función es VartType, que se utiliza de la siguiente manera:
VarType(nombre_variable) devolviendo un código entero que corresponde al tipo
de datos.
1=> Es un dato no valido
2=>Entero
3=>Entero largo
4=>Singer
5=>double
6=>currency
7=>date
8=>string
2.- La segunda función es TypeName, ésta devuelve una cadena con el nombre del
tipo de datos en lugar de un código. Se utiliza de la misma forma que la anterior :
TypeName(nombre_variable)
Ejemplo:
<%@ Language=VBScript %>
<% Option Explicit Dim strNombre, iEdad %>
<HTML>
<BODY>
<% Response.Write("Antes de asignar un valor, strNombre es de tipo ")
Response.Write(TypeName(strNombre))
Response.Write(", que es el número del tipo ")
Response.Write(VarType(strNombre))
%>
7.- OPERADORES
=
+
-
*
Página 10 de 48
11. Active Server Pages
/
5 Mod 3 =>2
Exponención 3^ 3= 3*3*3
Concatenación &
Operadores Lógicos ------AND, OR
Ejemplo:
<%@ Language=VBScript %>
<% Option Explicit
Dim iTermino1, iTermino2, sngAritmetica, sngGeometrica, strSalida %>
<HTML>
<BODY>
<%
iTermino1 = 5
iTermino2 = 16
strSalida = "El programa calcula los promedios de " & iTermino1 & _
" y " & iTermino2 & "<BR>"
Response.Write(strSalida)
sngAritmetica = iTermino1 + iTermino2
sngAritmetica = sngAritmetica / 2
sngGeometrica = (iTermino1 * iTermino2)^0.5
Página 11 de 48
12. Active Server Pages
strSalida = "Su media aritmética es " & sngAritmetica & _
" y su media geométrica es " & sngGeometrica
Response.Write(strSalida) %>
</BODY> </HTML>
8.- ESTRUCTURAS DE CONTROL
8.1 -CONDICION “ IF “
Formato:
If condición then
Bloque de código
End If
8.2.- IF ANIDADOS
Formato:
If condición1 Then
Primer bloque de código
If condición2 Then
Segundo bloque de código
Else
Tercer bloque de código
Página 12 de 48
13. Active Server Pages
End if
Else
Cuarto bloque de código
End if
No se debe utilizar muchas instrucciones If anidadas ya que dificulta la revisión rápida
8.3 INSTRUCCIONES FOR…….NEXT
Esta instrucción ejecuta un bloque de código un número especificado de veces, mientras
incrementa un contador.
Formato:
For variable-contador = valor-inicio to valor- final Step valor-incremental
Bloque de código
Next
8.4.- INSTRUCCIONES Do While………Loop
Formato:
Do While condición
Bloque de código
Loop
El bloque de código se ejecuta mientras que la condición sea verdadera
Página 13 de 48
14. Active Server Pages
8.5.- INSTRUCCIONES Do Until………Loop
Es muy parecida a la anterior , la única diferencia es que el ciclo se ejecuta hasta que la
condición es verdadera y no falsa. Ambos tipos de instrucciones oueden realizar las mismas
funciones, la única diferencia es que la condición se escribe en forma positiva o negativa
Formato:
Do Until condición
Bloque de código
Loop
Ver Ejemplos
3Estructuras de Control
Página 14 de 48
15. Active Server Pages
9.- SUBRUTINAS
Las subrutinas también llamados procedimientos realizan acciones
Formato:
Sub nombre
Bloque de código
End Sub
La llamada a una subrutina indica al sistema que ejecute la subrutina y después
regrese a la ejecución normal de la secuencia de comandos.
Dentro de la subrutina se puede crear un bucle for por ejemplo. Los procedimientos no
devuelven un valor, sino que realizan la ejecución de lo que haydentro de él. La función
principal será la de poder llamar el resultado obtenido en alguna otra parte del código.ç
Ejemplo:
Sub subEncabezado
For iCounter = 1 to 3
Response.Write("Su Nombre<BR>")
Next
End Sub
10.- FUNCIONES
Las funciones calculan valores.
Página 15 de 48
16. Active Server Pages
Diferencia entre un procedimiento y una función :
o Los procedimientos no generan ningún resultado
o La forma de llamar a un procedimiento es mediante una línea
Por otra parte las funciones devuelven valores, lo que significa que una llamada a
función puede colocarse en una expresión, se le pueden agregar elementos, etc.
Formato:
Function nombre_funcion (parámetros)
……
End Function
Para llamar a una función : Nombrefunción (listaparámetros), si la función no tiene
parámetros se puede llamr ya sea con los paréntesis vacíos o sin paréntesis.
11.- PÁGINAS SSI (Server Side Include)
De los comandos SSI (Server Side Include), las páginas ASP sólo soportan el
#include, aunque ciertamente se trata del más importante. Este comando es útil si
tenemos código (bien sea HTML o ejecutable) que se va a repetir en distintas páginas
web.
Por ejemplo, tenemos un pie de página común para todas nuestras páginas web. En
lugar de escribir el código en todas ellas, creamos un archivo con el pie de página y lo
incluimos en todas las páginas de nuestra web. No sólo ahorraremos trabajo, sino que
Página 16 de 48
17. Active Server Pages
si queremos modificar el pie de página, bastará con modificar un archivo y
automáticamente se reflejará el cambio en toda la web.
En el caso del código de servidor, resulta muy útil crear bibliotecas de funciones que
se puedan reutilizar más adelante. Una forma de reutilizar funciones es guardarlas en
archivos e incluir éstos cuando sea necesario. Esto es mucho mejor que copiar y pegar
la función. Ahorra trabajo y al igual que antes, si realizamos una mejora en la función
se reflejará en todo el código que la llame.
El Visual Basic Script es un lenguaje que no tiene facilidades de inclusión de código.
Esto se puede suplir mediante este comando. Sin embargo, si se programa en
PerlScript, se pueden utilizar las facilidades del lenguaje para incluir código de otros
scripts o de bibliotecas mediante las palabas clave require o use.
Formato:
La sintaxis del comando tiene dos variantes:
<!--#include file="archivo.asp"-->
En la variante file hay que escribir la ruta del archivo relativa al directorio en el que
se encuentra el ASP que se está ejecutando. En nuestro ejemplo, archivo.asp está en
el mismo directorio que el ASP que lo incluye.
<!--#include virtual="/dirweb/archivo.asp"-->
En este caso se escribe la dirección web comenzando desde el raíz del servidor web.
En nuestro ejemplo, estamos incluyendo el archivo cuya dirección web completa es
www.midominio.com/dirweb/archivo.asp. Es decir, en el primer caso nos referimos a
archivos según la estructura de directorios, y en el segundo, según la estructura de la
web.
El archivo a incluir no tiene por qué ser un ASP, puede tener cualquier extensión. Si
se trata de archivos que sólo están pensados para ser incluídos, es una buena práctica
de programación el colocarles la extensión .inc. El preprocesado de los #include es
previo a la ejecución del script, por lo que no puede haber includes condicionados a
sentencias if then. Hay que imaginarse que cada include es sustituido por el archivo
completo y que entonces es cuando se procesa el código ASP.
Página 17 de 48
18. Active Server Pages
OBJETOS ASP
Cada script ASP dispone desde el momento en que es ejecutado de una serie de
objetos predefinidos. No es necesario crear estos objetos ya que vienen integrados en
ASP. Se encuentran disponibles para cualquier script y permiten realizar funciones
básicas como averiguar los parámetros pasados al script, enviar información al
usuario, guardar variables persistentes, etcétera. Aquí exponemos un breve resumen
de los más importantes, con sus propiedades y métodos más utilizados.
1.-OBJETO RESPONSE:
Se utiliza para enviar la salida del script, es decir, lo que verá el usuario en su
navegador. Response también puede controlar la forma y el momento en que se
envían los datos, y escribir cookies para almacenar información.
MÉTODOS MÁS IMPORTANTES
1.- Response.Write (“cadena de caracteres”): Envía la cadena de caracteres al
cliente. También se utiliza para intercalar código HTML entre el ejecutable.
Ejemplo:
<%
Response.Write ("<h1>Se ha pasado de rosca</h1>")
%>
Página 18 de 48
19. Active Server Pages
Esto nos sacará por pantalla el literal con formato de cabecera Se ha pasado de rosca.
Ya que todo el código HTML que escribamos dentro de las comillas del
Response.Write esté lo ejecutará sacando en el navegador su resultado.
2.- Response.Write(Server.HTMLEncode) :Utilizaremos esta sentencia si lo que
pretendemos es enviar texto codificado para que el explorador no lo interprete como
HTML.
Ejemplo:
<%
Response.Write (Server.HTMLEncode(“<P align=right>"))
%>
Ocasionará que se implima <P align=right> en la pantalla sin interpretarlo como
HTML.
3.- Response.Redirect (Url) : Redirige la página ASP a la URL especificada. Por
ejemplo, esto que sigue es una página ASP completa que simplemente redirige a la
web www.arsys.es. Pg 190
<% Response.Redirect ("http://www.arsys.es") %>
La redirección se implementa mediante cabeceras HTTP que son distintas que las
enviadas cuando se muestra una página web. Eso significa que si se utiliza
Response.Write o se intercala cualquier código HTML, ya no funcionará un posterior
Response.Redirect porque se habrán enviado las cabeceras de mostrar una página
web, no las de redirección. Es decir sólo funcionará si no se le ha enviado algo al
cliente. Esto significa que debemos colocar el Response.Redirect antes de enviar
cualquier salida o de utilizar el almacenamiento en búfer.
Esto implica el uso de la propiedad Buffer y los métodos Flush y Clear, como se
explica a continuación.
4.- Response.Buffer. Si se establece en True, se utiliza un búffer para la salida de
datos, en combinación con los métodos anteriormente descritos. A pesar de la
insistencia en el buffer, es algo que prácticamente no se usa a no ser que sea
realmente necesario, pues ralentiza el mostrado de la página web.
5.- Response.Flush. Envía de inmediato los datos del buffer. Si se establece en True
la propiedad Response.Buffer, la salida del script (enviada mediante comandos
Response.Write o HTML intercalado) no se envía directamente al navegador, sino
Página 19 de 48
20. Active Server Pages
que queda en un buffer (espacio intermedio de almacenamiento) del servidor. El
método Response.Flush envía los datos del buffer al navegador. Otra forma de enviar
los datos del buffer es simplemente dejar que termine el script o invocar el método
End. Primero envía los datos y luego los elimina.
6.- Response.Clear. Supongamos que tenemos activado el almacenamiento en búfer.
A medida que su secuencia de comandos se ejecuta, la salida es enviada al búfer. Al
llamar a Response.Clear el búfer será vaciado. ¿Por qué es deseable esto? Talvez
tnemos una página que no queremos que sea vista bajo un conjunto de circunstancias
especiales. Si la página no sabe que dichas circunstancias se han cumplido, hasta que
la secuencia ya se haya ejecutado, Response.Clear podría ser la mejor opción.
7.- Response.End. Finaliza la ejecución de la secuencia de comandos. Si el
almacenamiento en búfer está activado y hay muchos datos almacenados, éstos son
enviados. Cualquier instrucción que esté después de Response.End no es ejecutada .
Ésta es una finalización más abrupta que simplemente permitir que la secuencia de
comandos termine por sí misma y , por lo tanto, debe evitarse si es posible. No
obstante, puede ser útil al detectar problemas (tales como datos erróneos), sobre todo
para evitar que éstos empeoren.
8.- Response.Expires: se utiliza para especificar por cuanto tiempo, desde el
momento actual debe almacenarse una página en cache.
<%Response.Expires= 4 %> le estamos indicando al explorador que la pagina
que se guarda en caché, debe caducar a los 4 min.
9.- Response.ExpiresAbsolute. le indica al navegador que la página almacenada en
caché Ver ejemplos: una fecha indicada y a una hora determinada.
debe caducar en
5-Objeto-Response
<%Response .Expires.Absolute=Now ()-1%>
• Response.write.asp Muestra cómo escribir código HTML
dentro del Response
• Response-buffer.asp nos muestra cómo se almacenan los datos
en el búfer
• Response-flush.asp
• Response-clear.asp
• Response-end.asp
• Response.expires.asp Comprobamos que la página permanecerá
almacenada en caché durante 3 minutos, si navegamos durante 4
minutos y volvemos a cargar la página comprobaremos que la
Página 20 de 48
hora se actualizó.
21. Active Server Pages
2.-OBJETO REQUEST
Este objeto se utiliza para recuperar los valores de un campo de formulario. Este
objeto tiene cuatro colecciones, de momento nos ocuparemos de dos : Form y
QueryString
1.-Request.Form(Nombrevariable): Recupera los valores de un campo de
formulario cuando éste tiene su propiedad METHOD establecida como POST.
1.1.-Reques.Form (“param”): nos da el valor del parámetro llamado
“param” siempre y cuando exista un único valor para dicho parámetro.
1.2.-Reques.Form (numero): nos da el valor de la posición del elemento en
el formulario.Por ejemplo; si primero es el nombre, segundo la contraseña y
tercer mi edad; mi Request.Form (3), me cogerá la edad.
1.3.- Reques.Form.Count: recoge el número de parámetros que hay en un
formulario..
1.4.- Request.Form(“param”).Count: nos devuelve el numero de
selecciones que ha hecho el usuario, solo serviría para el caso en el que
hubiera mas de una opción. Por ejemplo, si en nuestro formulario tenemos una
lista de selección múltiple, cuyo nombre sea Lista, la expresión Request.Form
("Lista")[2] nos daría el segundo elemento seleccionado de la lista, y
Request.Form("Lista").Count nos daría el número de elementos que ha
Página 21 de 48
22. Active Server Pages
seleccionado el usuario. Su valor será 1 si se trata de un parámetro
monovaluado y 0 si es un parámetro no definido en el formulario
También es posible iterar sobre las colecciones anteriores mediante bucles For each.
El siguiente ejemplo nos muestra todos los parámetros pasados al script y sus valores:
<%
For each param In Request.Form
Response.Write ("<p>")
Response.Write("El parámetro " & param & " toma el valor " &
Request.Form(param) )
Response.Write("</p>")
Next
%>
2.- Request.QueryString(Nombrevariable): Recupera los valores de un campo de
formulario cuando éste tiene su propiedad METHOD establecida como GET. En este
caso se pasan los valores de los campos de formulario a través de la cadena de
consulta.
Por ejemplo:
http://www.dominio.com/cgi-bin/miprog.asp?nombre=Pepe&apellido=Gotera
3.- Request.ServerVariables: Cada vez que visitamos una página Web, nuestro
explorador envía gran cantidad de información al servidor Web. La colección
ServerVariables puede acceder a esta información. Asimismo, el servidor Web tiene
muchas variables de ambiente a las que podemos acceder con esta colección.
Cuando el cliente solicita una página Web al servidor, éste no solamente envía el
URL de la página Web solicitada, sino también alguna información adicional que
Página 22 de 48
23. Active Server Pages
consiste en datos del cliente que pueden resultar muy útiles. Por ejemplo, el tipo de
explorador que se está utilizando, el sistema operativo que está ejecutando el cliente y
el URL de donde proviene el usuario. Cada segmento de información adicional se
conoce como : Encabezado de solicitud porque son enviados cuando el cliente
solicita una página Web.
Cuando el servidor devuelve al cliente la página Web solicitada, también envía un
conjunto de encabezados, conocidos como Encabezados de Respuesta. Los
encabezados de respuesta son porciones adicionales de información acerca de la
página Web que está siendo enviada al cliente. Tanto los encabezados de solicitud
como los de respuesta se conocen comúnmente como encabezados HTTP.
¿Qué encabezados envía el explorador al servidor web? El explorador podría enviar
cualquier encabezado que eligiera. Existe un conjunto estándar de encabezados que la
gran mayorñia de exploradores envía al servidor Web. De estos encabezados uno de
los más útiles es el User-Agent.
Este encabezado contiene la información sobre el explorador que se está utilizando y
el sistema operativo del cliente. Una página ASP puede utilizar esta información para
personalizar el contenido basándose en el tipo de explorador que el visitante utilice.
Por ejemplo : Netscape Nvigator e Internet Explorer manejan en forma diferente las
hojas de estilo, si quisiéramos utilizar hojas de estilo en nuestro sitio web podríamos
utilizar ASP para determinar el tipo de explorador que hace la solicitud de la página
ASP y después ajustar las definiciones de la hoja de estilo para que correspondan con
el explorador específico.
ENCABEZADOS HTTP ESTÁNDAR
NOMBRE DEL ENCABEZADO DESCRIPCIÓN
HTTP_ACCEPT Una lista de los tipos MIME (siglas en
inglés de Extensiones Multipropósito de
Correo en Internet) que el cliente
aceptará
HTTP_ACCEPT_LANGUAGE Qué tipo de lenguajes espera el
explorador. Éstos son leguajes humanos
conocidos como idiomas
HTTP_CONNECTION El tipo de conexión establecida entre el
cliente y el servidor Web.
HTTP_HOST El nombre de host de la computadora del
cliente
HTTP_USER_AGENT El tipo y versión de explorador y la
información del sistema operativo del
cliente.
HTTP_REFERER El URL completo de la página Web que
contiene el hipervínculo empleado para
llegar a la página ASP que está 23 de 48
Página siendo
ejecutada en ese momento
HTTP_COOKIE Las cookies enviadas desde el explorador
24. Active Server Pages
LECTURA DE ENCABEZADOS HTTP CON Request.ServerVariables
1.- Para desplegar una lista exacta de los encabezados enviados por el explorador al
servidor Web.
<% =Request.ServerVariables(“ALL_RAW”) %>
2.- Para desplegar una lista de encabezados con formato utilizaremos la siguiente
instrucción
<% =Request.ServerVariables(“ALL_HTTP”) %>
3.- Para desplegar un encabezado HTTP específico, utilizaremos el siguiente
formato:
<% =Request.ServerVariables(“HTTP_NombreEmcabezado”) %>
ACCESO A LAS VARIABLES DE AMBIENTE CON Request.ServerVariables
Las variables de ambiente son segmentos de información que proporciona el servidor
Web a cualquier programa que las solicita. Esta información la podemos obtener a
través de Request.ServerVariables. Las variables de ambiente contienen información
como el nombre del servidor Web, el Url de la página ASP procesada actualmente o
el nombre del software que el servidor Web está utilizando
Página 24 de 48
25. Active Server Pages
VARIABLES DE AMBIENTE ÚTILES
VARIABLE DE AMBIENTE DESCRIPCIÓN
URL El URL de la página ASP que esta después de
http://www.suServidorweb.com/ hasta la
cadena de consulta
PATH_TRANSLATED La ruta física completa de la página ASP en
ejecución.
QUERY_STRING La cadena de consulta (equivalente al
Request.QueryString)
SERVER_NAME El nombre de la computadora del servidor web
SERVER_SOFTWARE El nombre del software del servidor web, por
ejemplo Microsoft-IIS/5.0
Ejemplo:
<h3> Usted está viendo el dominio
<%= Request.ServerVariables("SERVER_NAME") %>
</h3>
4.- Request.Cookies: Con el uso de las Cookies las páginas Web pueden almacenar
pequeños segmentos de información en la computadora del cliente. Estos segmentos
de información pueden utilizarse para identificar a un visitante anterior o para
personalizar el contenido de sus páginas Web para cada visitante específico.
REALIZAR PRÁCTICAS
1. Realiza una página Web que nos pida por pantalla el nombre y el apellido de
forma que al pulsar el botón de enviar nos lleve a otra página mostrando el
nombre y el apellido. (en el action tenemos que poner comillas y el nombre de la
pagina .asp donde vamos a almacenar la información)
Página 25 de 48
26. Active Server Pages
2. Realiza una pagina que nos muestre un menú desplegable con varias
direcciones de Internet, de forma que al seleccionar una y pulsar el botón de
enviar nos lleve a ella.
3. Realiza una página que nos muestre un formulario con la opción de
seleccionar los idiomas que conocemos de forma que al pulsar el botón de enviar,
nos lleve a otra página donde nos de los BUENOS DÍAS en los idiomas
seleccionados.
4. Realiza una página que muestre un formulario donde se recoja el precio de un
producto cualquiera de forma que al pulsar el botón de envío nos devuelva el
precio del producto incrementando el IVA (18%). Para ello utilizad funciones.
5. Realiza una página que nos muestre por pantalla todos los enacabezados
HTTP.
6. Realiza una página que nos muestre por pantalla todas las variables de
ambiente.
3.-OBJETO SERVER
El objeto Server sólo tiene un método importante, pero es el más importante de
todo el esquema ASP, ya que es el que permite crear objetos componentes y
extender la funcionalidad del ASP de forma ilimitada. Con el Visual Basic Script del
ASP y sin utilizar objetos componentes, no se puede hacer prácticamente nada; ni
siquiera leer un archivo del disco. Toda la funcionalidad reside en objetos
componentes ActiveX.
El método Server.CreateObject: Crea una instancia del componente de servidor
que se le pase como parámetro.
Su sintaxis es :Server.CreateObject(ProgID)
El parámetro ProgID es un identificador único del componente que suele darse en la
forma Vendedor.Componente. Por ejemplo:
<%
Set herram = Server.CreateObject ("MSWC. Tools")
if herram.FileExists ("mipagina.html") Then
%>
Página 26 de 48
27. Active Server Pages
<p>Esta es <a href="mipagina.html">mi página</a> </p>
<% else %>
<p>Lo siento. Mi página ha desaparecido</p>
<% end if %>
MSWC.Tools es el ProgID del objeto Tools de Microsoft, que viene con la
instalación de ASP. No es un objeto predefinido como Response o Request, sino que
hay que crearlo como cualquier otro. En VisualBasic los objetos se asignan a
variables utilizando Set. Después de creado, podemos acceder a sus métodos y
propiedades. En este caso, utilizamos el método FileExists que nos dice si existe o no
un archivo dada su URL relativa.
4.-OBJETO SESSION
Sólo para poder beneficiarse de este objeto predefinido en sus aplicaciones de la Web,
hay proveedores que se pasan de Unix a Windows NT. ¿Cuáles son entonces sus
maravillosos métodos, propiedades o colecciones? Respuesta: lo interesante del
objeto Session son las variables que nosotros podemos guardar en él. Esas
variables permanecen entre distintas páginas web y son únicas para cada usuario. Así,
si guardamos el nombre del usuario en una variable del objeto Session, podremos
incorporarlo a todas las demás páginas, ya que ese dato no se pierde al terminar el
script. Además, aunque haya varios usuarios viendo simultáneamente las páginas no
hay problema, ya que cada uno tiene un objeto sesión distinto. La sintaxis es:
Session("variable") = valor
Esto guarda el valor en la variable. Para recuperarlo más adelante en éste u otro script
distinto, sólo tendríamos que escribir Session("variable").
$Session{variable} = valor
Ejemplo
Puede guardar este script con el nombre p2.asp. Se guarda el nombre del usuario en el
objeto Session.
<html>
<head>
Página 27 de 48
28. Active Server Pages
<title>Pequeña prueba del objeto Session</title>
</head>
<body>
<%
nombre = Request.Form("nombre")
if nombre = "" then
%>
<p>Por favor, escriba su nombre </p>
<form method = "Post" action="p2.asp">
<input type ="text" name = "nombre">
<input type = "submit" value = " Enviar ">
<%
else
Response.Write ("Su nombre es " & nombre & ". No se preocupe
que no se me va a olvidar.")
Session("Nombre") = nombre
end if
%>
</body>
</html>
Para escribir el nombre del usuario en páginas ASP posteriores a ésta, basta con que
intercale el código
<%= Session("Nombre") %>
en el HTML de la página.
Una vez definida, la variable Session, será almacenada en memoria y podrá ser
empleada en cualquier script del sitio web.
La duración de una sesión viene definida por defecto en 20 minutos. Esto quiere decir
que si en 20 minutos no realizamos ninguna acción, el servidor dará por finalizada la
sesión y todas las variables Session serán abandonadas. Esta duración puede ser
modificada con la propiedad Timeout:
Session.Timeout = n° de minutos que queramos que dure
Una forma de borrar las variables Session sin necesidad de esperar a que pase este
plazo es a partir del método Abandon:
Session.Abandon
De este modo todas las variables Session serán borradas y la sesión se dará por
finalizada. Este método puede resultar practico cuando estemos haciendo pruebas con
el script y necesitemos reinicializar las variables.
Página 28 de 48
29. Active Server Pages
4.-OBJETO APPLICATION
Es prácticamente igual que el objeto Session y sirve para lo mismo (guardar
variables), con la única diferencia de que las variables son únicas para la aplicación
en su conjunto, no para cada sesión de usuario. Por tanto, en el objeto Application
se deben guardar variables que vayan a ser comunes a todos los usuarios, no las
específicas como su nombre. Esto implica también que si deseamos modificar el valor
de una variable guardada en el objeto Application, es necesario bloquear el objeto
para evitar que desde otra sesión se acceda simultáneamente a la misma variable. Para
ello existen los métodos Lock y Unlock.
El método Application.Lock
Bloquea el objeto impidiendo que otros clientes modifiquen cualquier variable
guardada.
El método Application.Unlock
Desbloquea el objeto permitiendo que otros clientes modifiquen las variables del
objeto Application.
Ejemplo
Una variable típica para guardar en el objeto Application es el número de visitas a la
web. La variable no debe estar asociada a un cliente en concreto, sino que debe ser
general. En la página en cuestión pondríamos el siguiente código:
<%
Application.Lock
Application("NumVisitas") = Application("NumVisitas") + 1
Application.Unlock
%>
Cuando queramos mostrar el número de visitas recibidas, bastará con que insertemos
<%= Application("NumVisitas") %>
Los eventos de los objetos Session y Application y el archivo global.asa
Los objetos Application y Session tienen eventos al estilo de los formularios de
Visual Basic, sólo que mucho más limitados. De hecho cada objeto sólo tiene dos
eventos: uno que se lanza cuando es creado y otro cuando es destruido. Eso significa
que podemos escribir código de inicialización que se ejecutará cada vez que un
usuario acceda por primera vez a nuestras páginas (creación de un objeto Session) o
Página 29 de 48
30. Active Server Pages
cuando acceda el primer usuario (creación del objeto Application). Asimismo,
podemos escribir código de limpieza justo cuando se termine la sesión de un usuario
o al terminar la aplicación en su conjunto.
El código de estos eventos ha de estar en un archivo de nombre global.asa que debe
estar en el directorio raíz de la aplicación. El archivo global.asa es opcional y puede
contener tres tipos de información:
Eventos de creación y destrucción de aplicación y sesiones.
Marcas <OBJECT> para crear objetos de servidor con alcance de sesión o
aplicación (método alternativo al de Server.CreateObject).
Bibliotecas de tipos de objetos componentes.
Los eventos de Session y Application han de estar en marcas <SCRIPT> como se
indica en el ejemplo de global.asa siguiente:
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
sub Application_onStart
Application("NumSesionesActivas") = 0
Application("NumSesionesTotales") = 0
End sub
sub Session_onStart
Application.Lock
Application("NumSesionesActivas") =
Application("NumSesionesActivas") + 1
Application("NumSesionesTotales") =
Application("NumSesionesTotales") + 1
Application.UnLock
End sub
sub Session_onEnd
Application.Lock
Application("NumSesionesActivas") =
Application("NumSesionesActivas") -1
Application.UnLock
End sub
sub Application_onEnd
End sub
</SCRIPT>
Aquí se utilizan los eventos para guardar el número de sesiones activas y totales de
nuestra aplicación, es decir, el número de clientes que nos está viendo en un momento
dado, y el total que nos ha visitado. Como se trata de datos globales y no ligados a
una sesión, hay que guardarlos en el objeto Application, y cuando se quieren
modificar, es necesario bloquear primero dicho objeto.
Página 30 de 48
31. Active Server Pages
¿Cuánto dura una sesión y cómo funciona?
Lógicamente el servidor web no puede saber si el usuario está todavía leyendo la
última página que descargó de la web o se ha ido ya a dormir. De ahí que la duración
de una sesión se mida por el tiempo de inactividad del usuario. Para medir éste el
objeto Session dispone de una propiedad llamada Session.Timeout en la que el
tiempo se mide en minutos. Cuando un usuario de Internet ve por primera vez
cualquier página ASP de nuestra aplicación, el servidor web automáticamente le
envía un cookie y crea para él un objeto Session con llamada al evento de creación
que se encuentre en global.asa. Si pasan los minutos indicados en Session.Timeout
sin que el usuario haya visto una nueva página, la sesión se da por concluida y el
objeto Session del usuario es destruido.
El cookie es una pieza de información que el servidor web envía al cliente para que se
guarde en su disco duro. Cuando el cliente vuelve al sitio web reenvía el cookie al
servidor y de esa forma éste puede distinguir a los usuarios y hacerles un seguimiento
individual.
Más sobre objetos componentes: alcance y creación
Los objetos que se crean mediante Server.CreateObject (ProgID) tienen un alcance a
nivel de script, es decir, cuando termina el script los objetos son eliminados. Sin
embargo, en ciertas ocasiones será conveniente que los objetos tengan duración de
sesión o incluso de aplicación. Hay dos formas de dar alcance de sesión o de
aplicación a un objeto:
Guardarlo en una variable del objeto Session o Application.
Crearlo en global.asa mediante una marca <OBJECT>.
Primer método, ejemplo
<%
' Para crearlo con alcance de sesion lo guardamos en el objeto
Session
Set Session("miobjeto") = Server.CreateObject("MPX.Tool")
........
........
' Para verlo después en otra página ASP
Set miobjeto = Session("miobjeto")
miobjeto.show
%>
1. Realiza una página que recoja tu nombre y con un botón de envío te lleve a
otra página donde te saldrá un mensaje de bienvenida con tu nombre. Además a
parecerá un formulario donde deberás seleccionar distintas aficiones de forma
que al pulsar el botón de envío te llevará a una página donde mostrará tu
nombre con las aficiones seleccionadas.
Página 31 de 48
32. Active Server Pages
OBJETOS DEL SERVIDOR
1.-COMPONENTES ACTIVEX
Los comoponentes ActiveX se han diseñado para que se ejecuten en el servidor
Web como parte de las aplicaciones Web , proporcionan funcionalidad a las
aplicaciones, como el acceso a ficheros, Bases de datos, etc. Existen componentes
ActiveX para tareas muy diversas, por ejemplo:
• Adrotator: Inserción de publicidad rotatoria
• FileSystemObject: Acceso a ficheros en el servidor
• TextStream: Acceso a ficheros en el servidor
• ActiveX Data Object: acceso a bases de datos
Su fundamento es tratar de hacer que estos componentes sean reutilizables. Para ello,
utiliza un modelo orientado a objetos para definir una jerarquía de componentes,
entre los que pueden existir relaciones de dependencia. Cada componente (objeto) se
caracteriza por un comportamiento, que se puede alterar a través de sus métodos,
propiedades o la interacción con otros objetos.
¿Qué son los controles ActiveX?
Se trata de pequeñas aplicaciones capaces de interactuar con el usuario, realizar
cálculos o representar datos, y que se insertan en páginas web a través de las etiquetas
Página 32 de 48
33. Active Server Pages
<OBJECT> y <PARAM>, que se corresponden a las operaciones de inserción del
componente y paso de sus parámetros de ejecución.
¿Qué diferencia hay entre controles y componentes ActiveX?
Los elementos desarrollados con esta tecnología pueden aplicarse tanto en el lado
cliente como en el lado servidor. Esta es la diferencia fundamental entre un control
ActiveX, que se ejecuta localmente en nuestra aplicación, de un objeto ActiveX, que
utiliza un "automation interface" (o interfaz automatizada) para que otras aplicaciones
o herramientas de programación puedan utilizarlo.
Se denomina formalmente componente al objeto ActiveX y no al control. Un
componente tiene la ventaja de que se trata de un estándar prácticamente universal,
multiplataforma y, por tanto, independiente de las aplicaciones y sus lenguajes. En
esta guía de referencia obviaremos los controles (en clara desventaja) frente a las
posibilidades que nos ofrecen los objetos de servidor, al poder combinarse, a través
de ASP, con scripts y páginas HTML para poder crear webs profesionales. Su
funcionamiento precisa la instalación del objeto en la máquina sobre la que se ejecute,
y suele encontrarse bajo archivos de extensión OCX o DLL.
¿Cómo utilizo un componente en mi web?
Para poder utilizar un objeto, deberá enlazarlo con su página web a través de
programación en un lenguaje de script, directamente, o a través del uso de ASP
(Active Server Pages). En cualquiera de los casos, deberá introducir cierto código
para poder usar el objeto, una vez instalado en el servidor sobre el que vaya a
ejecutarse. Se trata, principalmente de una línea en la que crea una "instancia" del
objeto que va a usar, y el resto de código que utiliza los métodos y propiedades de la
instancia que acaba de crear. Por ejemplo, si escribimos en una página ASP, el código
debe quedar de la forma:
<%
Set OBJETO = Server.CreateObject(IDENTIFICADOR)
OBJETO.Metodo(Argumentos)
.......
%>
El parámetro "IDENTIFICADOR" es un identificador único del componente que
suele darse en la forma Vendedor.Componente.
Los valores "OBJETO.Metodo(Argumentos)" referencian a las funciones, y
parámetros que necesitan las mismas para su llamada, que incorpora el componente
que estamos usando.
Por ejemplo, el componente Acceso a bases de datos utiliza objetos de datos de
ActiveX (ADO) para proporcionar un fácil acceso a la información almacenada en
una base de datos (o en otra estructura de datos en forma de tabla), que cumpla con el
Página 33 de 48
34. Active Server Pages
estándar ODBC (Open DataBase Connectivity). A continuación se muestra el código
que tendría que colocar en su página ASP para poder usar este objeto:
<%
'Aquí creamos la instancia del objeto
Set miconexion = Server.CreateObject("ADODB.Connection")
'Ahora usamos la instancia y sus propiedades para nuestros fines
'Indicamos al objeto la cadena de conexión
miconexion.ConnectionString = "DSN=midsn"
'Se abre la base de datos
miconexion.Open
' .......
'........
'Se cierra la base de datos
miconexion.Close
%>
Así pues, una de las características más interesantes de ASP es su facilidad para el
manejo de bases de Datos que residen en el servidor. Esto lo conseguimos mediante
el uso de ADO (ActiveX Data Object), de forma fácil, rápida y con un mínimo
consumo de rescursos del sistema.
Por otra parte ADO (ActiveX Data Object) para el acceso a una base de datos usa
ODBC (Open Data Base Connectivity), es una utilidad de Windows que permite a
las aplicaciones acceder a los datos usando SQL como lenguaje estándar.
Página 34 de 48
35. Active Server Pages
2.-FUENTES DE DATOS ODBC
Como se ha escrito anteriormente Open Data Base Connectivity es una utilidad de
Windows, concretamente la encontramos en Inicio/Panel de Control/Herramientas
Administrativas
Se pueden configurar tres diferentes fuentes de datos ODBC, la forma más interesante
es la DSN de Sistema, que presenta la ventaja de poder ser accedida por cualquier
usuario, siendo el tipo usado en las aplicaciones ASP.
Página 35 de 48
36. Active Server Pages
Para declarar una base de datos ODBC haremos doble clic en el icono Fuentes de
Datos ODBC que encontraremos en Panel de Control/Herramientas Administrativas.
Una vez abierto el programa nos situamos en la pestaña DSN de Sistema.
DSN: Data Source Name. Es un identificador único de la base de datos en el
sistema. Al definir un DSN hay que especificar tanto la ruta completa del archivo de
base de datos como el controlador adecuado a la misma (MSAccess, FoxPro, etc…).
Una vez creado, es todo lo que necesitamos saber acerca de la base de datos para
poder abrirla, consultarla, modificarla, etc.
Pulsaremos el botón AGREGAR para añadir una fuente de datos, lo que nos llevará a
la pantalla de controladores.
Página 36 de 48
37. Active Server Pages
En esta ventana elegiremos el driver adecuado para la tecnología de la base de datos
que queremos tratar desde nuestras páginas ASP y pulsaremos finalizar. La siguiente
pantalla que se nos muestra nos pedirá la ubicación física de nuestra base de datos y
el nombre ODBC con el que queremos acceder a ella.
Página 37 de 48
38. Active Server Pages
Nombre del origen de datos: es un nombre simbólico de nuestra base de datos, será
el que utilicemos desde ASP para referirnos a ella, es decir será el DSN.
Descripción: Es una descripción de la base de datos
Base de datos: Es el camino físico de la base de datos, para establecerlo pulsaremos
el botón SELECCIONAR y mediante un explorador elegiremos nuestra base de
datos.
Una vez hecho esto pulsaremos el botón ACEPTAR y ya tendremos nuestra base de
datos disponible para su uso desde nuestras aplicaciones WEB.
Ya sabemos conectar ASPADOODBC, nos queda conocer los objetos ADO para
realizar todo esto
3.- OBJETOS ADO
Página 38 de 48
39. Active Server Pages
ADO está formado por varios objetos organizados de forma jerárquica (cada uno de
ellos con sus métodos y propiedades específicos) de los cuales vamos a estudiar los
más interesantes.
3.1 CONNECTION
Este objeto lo podemos considerar como el más importante, estaría en la cúspide de la
estructura jerárquica comentada anteriormente.
Representa una conexión a una base de datos desde una página ASP. Esta conexión
nos permitirá efectuar las operaciones que deseemos sobre la base de datos.
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.
Pues bien para crear la conexión, lo primero será crear el Objeto Connection por
medio de la propiedad CreateObject del objeto Server.
<% Set conexion=Server.CreateObject(“ADODB.Connection”) %>
Una vez establecida la instancia del objeto pasamos a configurarlo mediante sus
propiedades y métodos:
Página 39 de 48
40. Active Server Pages
PROPIEDADES
1.- ConnectionString: Especifica la referencia a la base de datos con la que
queremos conectar, conteniendo en una cadena de texto la información necesaria para
efectuar la conexión mediante parejas de valores separadas por “;”. Hay hasta 7
argumentos distintos que se pueden suministrar en esta cadena pero los básicos son:
• Data Source Name (DSN) = Nombre ODBC de la base de datos
• Usuario: User = nombre de usuario
• Password: Password = Password del usuario para la base de datos.
Ejemplo:
<% conexion.ConnectionString=”DSN=Alumnos;User=Inma;Password=1234” %>
2.- Mode: Especifica los permisos de la conexión. Algunos de los valores más
habituales que podemos asignar son:
1 Establece permiso sólo de Lectura
2 Establece permiso sólo de Escritura
3 Establece permiso de Lectura/Escritura
Ejemplo:
<% conexion.Mode=3 %>
MÉTODOS
1.- Open: Abre la conexión con la base de datos con los parámetros especificados en
las propiedades
2.- Close: Cierra la conexión con la base de datos
Ejemplo:
Página 40 de 48
41. Active Server Pages
<%
Set conexion = Server.CreateObject("ADODB.Connection")
conexion.ConnectionString = "DSN=Alumnos"
conexion.Open
' .......
'........
conexion.Close
%>
3.2 RECORDSET
Con este objeto 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.
Entendemos como cursor el puntero que nos permite desplazarnos por los registros
del Recordset. Dependiendo del tipo elegido determinaremos los desplazamientos y
cambios realizables en los datos
1.- PROPIEDADES QUE HACEN REFERENCIA AL ORIGEN DE 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.
1.- 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.
2.- 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 será el
resultado de aplicar dicha sentencia.
Una vez que hemos determinado la base de datos y la tabla con la que vamos a
trabajar debemos indicar, en este orden, cómo nos vamos a mover por la tabla (Tipo
Página 41 de 48
42. Active Server Pages
de Cursor) y el tipo de bloqueo que realizaremos sobre la base de datos con el fin de
evitar que dos o más usuarios accedan a modificar un mismo registro a la vez
Recordar¡¡¡¡¡ primero se especifica la propiedad del tipo de Cursor y luego el tipo de
Cerrojo
3.- CursorType
Con esta propiedad especificamos el tipo de cursor que se utiliza para recorrer los
registros de un recordset.
Los posibles valores son:
1.- adOpenForwardOnly (Valor 0): que como su nombre indica sólo permite
moverse hacia adelante. (no se puede volver hacia atrás) no permite modificaciones
en los registros. Por el contrario es el de menos consumo. No vemos los cambios
realizados en las tablas por otro Recordset. Por defecto toma este valor.
2.- adOpenKeyset (Valor 1): Nos permite movernos en los dos sentidos, permite
modificaciones en los registros y además podemos ver los cambios realizados en la
tabla por otro Recordset a excepción de las nuevas entradas
3.- adOpenDynamic (Valor 2): Nos permite movernos en los dos sentidos, permite
modificaciones en los registros y vemos todos los cambios realizados en la tabla por
otro Recordset.
4.- adOpenStatic (Valor 3): Nos permite movernos en los dos sentidos, no permite
modificaciones en los registros. No vemos los cambios realizados en la tabla por otro
Recordset.
4.- LockType
Página 42 de 48
43. Active Server Pages
Indica el tipo de bloqueo que se realiza sobre la base de datos cuando modificamos un
Recordset, a fin de evitar que dos o más usuarios accedan a modificar un mismo
registro a la vez.
Los posibles valores son:
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)
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
%>
Definiendo nuestras Constantes: ADOVBS.INC o METADATA
Página 43 de 48
44. Active Server Pages
Tanto los cursores, como los cerrojos utilizados por ADO deben encontrarse
definidos como constantes 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
Propiedades que hacen referencia al número de registros:
1.- 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>
2.- EOF
Página 44 de 48
45. Active Server Pages
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.
3.- 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.
1.- MoveFirst
Mueve el cursor al primer registro de la tabla
2.- MoveLast
Mueve el cursor al último registro de la tabla
3.- MoveNext
Página 45 de 48
46. Active Server Pages
Mueve el cursor al siguiente registro
4.- 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:
Página 46 de 48
47. Active Server Pages
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
1.- 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
%>
2.- 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
Página 47 de 48
48. Active Server Pages
ú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
Página 48 de 48