MANUAL ASP
Crear una página ASP
Un archivo de páginas Active Server (ASP) es un archivo de texto con la
extensión .asp que contiene cualquier combinación de lo siguiente:
- Texto
- Etiquetas HTML
- Secuencias de comandos del servidor
Un método rápido para crear un archivo .asp consiste en cambiar la extensión
de los archivos HTML (.html o .htm) por la extensión .asp. Si el archivo no
contiene funciones ASP, el servidor prescinde del proceso de secuencias de
comandos ASP y envía el archivo al cliente. Como desarrollador Web, esta opción
proporciona una gran flexibilidad, ya que puede asignar a los archivos la
extensión .asp incluso si no piensa agregar funciones ASP hasta más
adelante.
Para publicar el archivo .asp en Web, guarde el nuevo archivo en un
directorio virtual de su sitio Web (asegúrese de que el directorio tenga los
permisos Secuencia de comandos o Ejecución). A continuación, escriba en el
explorador la dirección URL del archivo para pedirlo. (Recuerde, las páginas ASP
debe enviarlas el servidor, por lo que no puede pedirlas mediante su ruta
física.) Cuando el archivo se cargue en el explorador, observará que el servidor
envió una página HTML. Al principio puede parecer extraño, pero recuerde que el
servidor analiza y ejecuta todas las secuencias de comandos ASP del servidor
antes de enviar el archivo. El usuario siempre recibe código HTML estándar.
Para crear archivos .asp, se puede utilizar cualquier editor de textos. A
medida que avance, puede que encuentre más productivo utilizar un editor más
orientado a ASP, como Microsoft(r) Visual InterDev™. (Para obtener más
información, visite el sitio Web de Microsoft Visual InterDev en la dirección
http://msdn.microsoft.com/vinterdev/.)
Agregar secuencias de comandos del servidor
Una secuencia de comandos del servidor es una serie de instrucciones que se
utiliza para enviar al servidor Web comandos de forma secuencial. (Si ya
desarrolló antes sitios Web, probablemente conozca las secuencias de comandos
del cliente, que se ejecutan en el explorador Web.) En los archivos .asp, las
secuencias de comandos se separan del texto y de las etiquetas HTML mediante
delimitadores. Un delimitador es un carácter o una secuencia de
caracteres que marca el principio o el final de una unidad. En el caso de HTML,
dichos delimitadores son los símbolos menor que (<) y mayor que (>), que
enmarcan las etiquetas HTML.
ASP utiliza los delimitadores <% y %> para enmarcar los comandos.
Dentro de los delimitadores puede incluir cualquier comando válido dentro del
lenguaje de secuencia de comandos que esté utilizando. El ejemplo siguiente
muestra una página HTML sencilla que contiene un comando de secuencia de
comandos:
<HTML>
<BODY>
Esta página se actualizó por última vez el <%= Now ()%>.
</BODY>
</HTML>
La función Now() de VBScript devuelve la fecha y la hora
actuales. Cuando el servidor Web procesa esta página, reemplaza <%= Now
()%> con la fecha y la hora actuales, y devuelve la página al explorador con
el siguiente resultado:
Esta página se actualizó el 1/29/99 2:20:00 p.m.
A los comandos enmarcados por delimitadores se les llama comandos
principales de secuencias de comandos, que se procesan mediante el lenguaje
principal de secuencia de comandos. Todos los comandos utilizados dentro de los
delimitadores de secuencias de comandos deben ser válidos en el lenguaje
principal de secuencia de comandos. De forma predeterminada, el lenguaje
principal de secuencia de comandos es VBScript, pero también puede establecer un
lenguaje diferente. Consulte Trabajar con lenguajes de secuencias de
comandos.
Si ya conoce las secuencias de comandos del cliente, ya sabrá que la etiqueta
HTML <SCRIPT> se utiliza para delimitar las secuencias de comandos y las
expresiones. También puede utilizar la etiqueta <SCRIPT> para las
secuencias de comandos del cliente, siempre que necesite definir procedimientos
en múltiples lenguajes en un archivo .asp. Para obtener más información,
consulte Trabajar con lenguajes de secuencias de comandos.
Combinar HTML y comandos de secuencias de comandos
Dentro de los delimitadores de ASP puede incluir cualquier instrucción,
expresión, procedimiento u operador que sea válido en el lenguaje principal para
secuencia de comandos. Una instrucción, en VBScript y en otros
lenguajes, es una unidad sintácticamente completa que expresa un tipo de acción,
declaración o definición. La instrucción condicional
If...Then...Else que aparece a continuación es una instrucción
de VBScript muy común:
<%
Dim dtmHour
dtmHour = Hour(Now())
If dtmHour < 12 Then
Saludos = "Buenos días"
Else
strGreeting = "Hola"
End If
%>
<%= strGreeting %>
Según la hora, la secuencia de comandos asigna el valor "Buenos días" o el
valor "Hola" a la variable de cadena strGreeting. La instrucción <%=
strGreeting %> envía al explorador el valor actual de la variable.
De esta forma, los usuarios que vean esta secuencia de comandos antes de las
12:00 de la mañana (según la zona horaria del servidor Web) verían la siguiente
línea de texto:
Buenos días
Los usuarios que vean esta secuencia de comandos después de las 12:00 de la
mañana verían la siguiente línea de texto:
Hola
Puede incluir texto HTML entre las secciones de una instrucción. Por ejemplo,
la secuencia de comandos siguiente, que combina HTML dentro de una instrucción
If...Then...Else, produce el mismo resultado que la del ejemplo
anterior:
<%
Dim dtmHour
dtmHour = Hour(Now())
If dtmHour < 12 Then
%>
Buenos días
<% Else %>
Hola
<%End If %>
Si la condición es verdadera, es decir, si es antes del mediodía, el servidor
Web envía al explorador el código HTML que sigue a la condición ("Buenos días");
de lo contrario, envía el código HTML que sigue a Else
("Hola"). Esta forma de combinar HTML y comandos de secuencia de comandos es
cómoda para continuar la instrucción If...Then...Else en varias
líneas de texto HTML. El ejemplo anterior es más útil si desea presentar un
saludo en varias partes de una página Web. Puede asignar el valor de la variable
una única vez y después presentarla varias veces.
En lugar de mezclar texto HTML con comandos de secuencia de comandos, puede
devolver texto HTML al explorador desde dentro de los comandos de secuencia de
comandos. Para devolver texto al explorador, utilice el objeto integrado
Response de ASP. El ejemplo siguiente produce el mismo
resultado que las secuencias de comandos anteriores:
<%
Dim dtmHour
dtmHour = Hour(Now())
If dtmHour < 12 Then
Response.Write "Buenos días"
Else
Response.Write "Hola"
End If
%>
Response.Write
envía al explorador el texto que le sigue. Utilice
Response.Write desde una instrucción cuando desee generar de
forma dinámica el texto devuelto al explorador. Por ejemplo, puede generar una
cadena de texto que contenga los valores de varias variables. Aprenderá más
acerca del objeto Response, y de los objetos en general, en
Utilizar componentes y objetos y Enviar contenido al explorador. Por ahora,
observe simplemente que dispone de varias maneras de insertar comandos de
secuencias de comandos en las páginas HTML.
Puede incluir procedimientos escritos en su lenguaje predeterminado de
secuencias de comandos dentro de delimitadores ASP. Para obtener más
información, consulte Trabajar con lenguajes de secuencias de comandos.
Si va a trabajar con comandos JScript, puede insertar las llaves que indican
un bloque de instrucciones directamente en sus comandos ASP, incluso aunque
estén entremezclados con etiquetas y texto HTML. Por ejemplo:
<%
if (screenresolution == "low")
{
%>
Ésta es la versión de texto de la página.
<%
}
else
{
%>
Ésta es la versión multimedia de la página.
<%
}
%>
-O bien-
<%
if (screenresolution == "low")
{
Response.Write("Ésta es la versión de texto de la página.")
}
else
{
Response.Write("Ésta es la versión multimedia de la página.")
}
%>
Utilizar directivas ASP
ASP proporciona directivas que no forman parte de los lenguajes de secuencias
de comandos: Dichas directivas son la directiva de resultado y la directiva de
proceso.
La directiva de resultado de ASP <%= expresión %>
presenta el valor de una expresión. Dicha directiva es equivalente al uso de
Response.Write para presentar información. Por ejemplo, la
expresión <%= ciudad %> envía al explorador la palabra Barcelona (el valor
actual de la variable).
La directiva de proceso de ASP <%@ palabra clave %>
ofrece a ASP la información que necesita para procesar un archivo .asp. Por
ejemplo, la siguiente directiva establece VBScript como lenguaje principal de
secuencia de comandos de la página:
<%@ LANGUAGE=VBScript %>
Las directivas de proceso deben estar en la primera línea de los archivos
.asp. Para agregar más de una directiva a una página, deben incluirse en el
mismo delimitador. No ponga las directivas de proceso en los archivos incluidos
con la instrucción #include. Debe incluir un espacio en blanco
entre el signo @ y la palabra clave. La directiva de proceso tiene las
siguientes palabras clave:
- La palabra clave LANGUAGE establece el lenguaje principal de secuencia de
comandos de la página.
- La palabra clave ENABLESESSIONSTATE especifica si un archivo ASP utiliza
el estado de la sesión. Consulte Administrar sesiones.
- La palabra clave CODEPAGE establece la página de códigos (la codificación
de caracteres) del archivo .asp.
- La palabra clave LCID establece el identificador de configuración regional
del archivo.
- La palabra clave TRANSACTION especifica que el archivo .asp se ejecutará
dentro del contexto de una transacción. Consulte Descripción de las
transacciones
Importante
Puede incluir más de una palabra clave
en una única directiva. Los pares de palabra clave y valor deben estar separados
por un espacio. No ponga espacios ni antes ni después del signo igual (=).
El ejemplo siguiente establece el lenguaje de secuencia de comandos y la
página de códigos:
<%@ LANGUAGE="Jscript" CODEPAGE="932" %>
Espacio en blanco en las secuencias de comandos
Si su lenguaje principal de secuencias de comandos es VBScript o JScript, ASP
quita el espacio en blanco de los comandos. En otros lenguajes, ASP conserva el
espacio en blanco para que los lenguajes que interpreten la posición o la
sangría puedan interpretarlo correctamente. El espacio en blanco incluye
espacios, tabuladores, retornos y saltos de línea.
En VBScript y JScript puede utilizar el espacio en blanco que sigue al
delimitador de apertura y que precede al de cierre para facilitar la lectura de
los comandos. Todas las instrucciones siguientes son válidas:
<% Color = "Green" %>
<%Color="Green"%>
<%
Color = "Green"
%>
ASP quita el espacio en blanco que se encuentre entre los delimitadores de
cierre de las instrucciones y los delimitadores de apertura de las instrucciones
siguientes. Sin embargo, se recomienda utilizar espacios para mejorar la
legibilidad. Si tiene que conservar el espacio en blanco entre dos
instrucciones, como cuando vaya a presentar los valores de las variables en una
frase, utilice el carácter de espacio de no separación de HTML ( ). Por
ejemplo:
<%
'Define dos variables con valores de cadena.
strFirstName = "Juan"
strLastName = "García"
%>
<P>Esta página Web está personalizada para "<%= strFirstName
%> <%= strLastName %>." </P>
Utilizar variables y constantes
Una variable es una ubicación de almacenamiento con nombre dentro de
la memoria del equipo que contiene datos, como un número o una cadena de texto.
A los datos contenidos en una variable se les llama valor de la
variable. Las variables ofrecen una manera de almacenar, recuperar y manipular
valores mediante nombres que ayuden a entender lo que hace la secuencia de
comandos.
Declarar y asignar nombre a variables
Siga las reglas y recomendaciones de su lenguaje de secuencias de comandos a
la hora de declarar variables y asignarles nombres. Incluso aunque no necesita
declarar una variable para poder utilizarla, es conveniente hacerlo porque ayuda
a prevenir errores. Declarar una variable significa indicar al motor de
secuencias de comandos que existe una variable con un nombre concreto, de forma
que pueda hacer referencia a la variable a lo largo de una secuencia de
comandos.
VBScript
VBScript no necesita declaraciones de variables, pero es conveniente declarar
todas las variables antes de utilizarlas. Para declarar una variable en
VBScript, utilice la instrucción Dim, Public o
Private. Por ejemplo:
<% Dim NombreUsuario %>
Puede utilizar la instrucción Option Explicit de VBScript en
los archivos .asp para hacer obligatoria la declaración de variables con las
instrucciones Dim, Private,
Public y ReDim. La instrucción Option
Explicit debe aparecer después de las directivas ASP y antes del texto
HTML o de los comandos de la secuencia de comandos. Esta instrucción sólo afecta
a los comandos ASP escritos en VBScript; no afecta a los comandos escritos en
JScript.
<% Option Explicit %>
<HTML>
<%
Dim strNombreUsuario
Public lngNumeroCuenta
%>
Alcance de las variables
El alcance, o vida, de una variable determina qué comandos de
secuencia de comandos pueden tener acceso a dicha variable. Una variable
declarada dentro de un procedimiento tiene alcance local; la variable
se crea y se destruye cada vez que se ejecuta el procedimiento. No se puede
tener acceso a ella desde fuera del procedimiento. Una variable declarada fuera
de un procedimiento tiene alcance global; su valor es accesible y
modificable desde cualquier comando de secuencia de comandos de una página
ASP.
Nota
Al limitar el alcance de la variable a un
procedimiento mejorará el rendimiento.
Si declara variables, una variable local y una variable global pueden tener
el mismo nombre. La modificación del valor de una de ellas no afecta al valor de
la otra. Sin embargo, si no declara las variables, podría modificar
inadvertidamente el valor de una variable global. Por ejemplo, los siguientes
comandos de secuencia de comandos devuelven el valor 1 incluso aunque haya dos
variables llamadas Y:
<%
Option Explicit
Dim Y
Y = 1
SetLocalVariable
Response.Write Y
Sub SetLocalVariable
Dim Y
Y = 2
End Sub
%>
Por el contrario, los comandos siguientes devuelven el valor 2 porque las
variables no se han declarado de forma explícita. Cuando la llamada al
procedimiento asigna a Y el valor 2, el motor de secuencias de comandos da por
supuesto que el procedimiento pretende modificar la variable global:
<%
Option Explicit
Dim Y = 1
SetLocalVariable
Response.Write Y
Sub SetLocalVariable
Y = 2
End Sub
%>
Para evitar problemas, adquiera el hábito de declarar explícitamente todas
las variables. Lo cual es especialmente importante si utiliza la instrucción
#include para incluir archivos en su archivo ASP. La secuencia
de comandos incluida está contenida en un archivo aparte, pero se trata como si
formara parte del archivo contenedor. Es muy fácil olvidarse de que hay que
utilizar nombres de variables diferentes en la secuencia de comandos principal y
en la secuencia de comandos incluida, a menos que declare las variables.
Asignar a las variables alcance de sesión o de aplicación
Las variables globales sólo son accesibles en un mismo archivo ASP. Para
hacer que una variable sea accesible en varias páginas, asigne a la variable
alcance de sesión o de aplicación. Las variables con alcance de sesión están
disponibles en todas las páginas de una aplicación ASP que pida un mismo
usuario. Las variables con alcance de aplicación están disponibles en todas las
páginas de una aplicación ASP que pida cualquier usuario. Las variables de
sesión son una buena manera de almacenar información para un único usuario, como
sus preferencias o el nombre o la identificación del usuario. Las variables de
aplicación son una buena manera de almacenar información para todos los usuarios
de una determinada aplicación, como los saludos específicos o los valores
generales necesarios en la aplicación.
ASP proporciona dos objetos integrados en los que puede almacenar variables:
el objeto Session y el objeto Application.
También puede crear instancias de objetos con alcance de sesión o de
aplicación. Para obtener más información, consulte Establecer el alcance de los
objetos.
Alcance de sesión
Para asignar alcance de sesión a una variable, almacénela en el objeto
Session asignando un valor a una entrada con nombre del objeto.
Por ejemplo, los siguientes comandos almacenan dos nuevas variables en el objeto
Session:
<%
Session("Nombre") = "Juan"
Session("Apellido") = "Soto"
%>
Para recuperar la información del objeto Session, tenga
acceso a la entrada con nombre mediante la directiva de resultado (<%=) o
Response.Write. En el ejemplo siguiente se utiliza la directiva
de resultado para presentar el valor actual de Session("Nombre"):
Reciba nuestra bienvenida,<%= Session("Nombre") %>
Puede almacenar las preferencias del usuario en el objeto
Session y después tener acceso a dichas preferencias para
determinar qué página hay que devolver al usuario. Por ejemplo, puede permitir
que los usuarios especifiquen la versión en texto del contenido de la primera
página de la aplicación y aplicar esta opción a las siguientes páginas de la
aplicación que el usuario visite.
<%
strScreenResolution = Session("ScreenResolution")
If strScreenResolution = "Low" Then
%>
Ésta es la versión de texto de la página.
<% Else %>
Ésta es la versión multimedia de la página.
<%End If %>
Nota
Si hace referencia a una variable con alcance
de sesión más de una vez en una secuencia de comandos, piense en asignarle una
variable local, como en el ejemplo anterior, para mejorar el rendimiento.
Alcance de aplicación
Para asignar alcance de aplicación a una variable, almacénela en el objeto
Application asignando un valor a una entrada con nombre del
objeto. Por ejemplo, el comando siguiente almacena en el objeto
Application un saludo específico de una aplicación:
<% Application("Saludo") = "¡Reciba nuestra bienvenida al Departamento de
ventas!" %>
Para recuperar la información del objeto Application,
utilice la directiva de resultado de ASP (<%=) o
Response.Write para tener acceso a la entrada con nombre desde
cualquier página posterior de la aplicación. En el ejemplo siguiente se utiliza
la directiva de resultado para presentar el valor de Application("Saludo"):
<%= Application("Saludo") %>
De nuevo, si hace referencia a una variable con alcance de aplicación en su
secuencia de comandos repetidamente, debe de asignarle una variable local para
mejorar el rendimiento.
Utilizar constantes
Una constante es un nombre que representa un número o una cadena.
Algunos de los componentes de base que se proporcionan con ASP, como ActiveX
Data Objects (ADO), definen constantes que se pueden utilizar en las secuencias
de comandos. Un componente puede declarar constantes en la biblioteca de
tipos del componente, un archivo que contiene información acerca de los
objetos y los tipos aceptados por un componente COM. Después de haber declarado
una biblioteca de tipos en su archivo .asp puede usar las constantes definidas
en cualquier secuencia de comandos en el mismo archivo .asp. Igualmente, puede
declarar una biblioteca de tipos en el archivo Global.asa para usar las
constantes definidas en cualquier archivo .asp de la aplicación.
Para declarar una biblioteca de tipos, utilice la etiqueta <METADATA>
en su archivo .asp o Global.asa. Por ejemplo, para declarar la biblioteca de
tipos de ADO, utilice las siguientes instrucciones:
<!--METADATA NAME="Microsoft ActiveX Data Objects 2.5 Library"
TYPE="TypeLib" UUID="{00000205-0000-0010-8000-00AA006D2EA4}"-->
O bien, en lugar de hacer referencia al identificador único universal (UUID)
de la biblioteca de tipos, puede hacer referencia a la biblioteca de tipos
mediante la ruta del archivo:
<!-- METADATA TYPE="typelib" FILE="c:\program files\common
files\system\ado\msado15.dll"-->
Entonces puede usar las constantes ADO en el archivo .asp donde declaró la
biblioteca de tipos o en un archivo que reside en una aplicación que contiene un
archivo Global.asa con la declaración de biblioteca de tipos ADO. En el ejemplo
siguiente, adOpenKeyset y adLockOptimistic son constantes ADO:
<%
'Crea y abre el objeto Recordset.
Set rsCustomersList = Server.CreateObject("ADODB.Recordset")
rstCustomerList.ActiveConnection = cnnPubs
rstCustomerList.CursorType = adOpenKeyset
rstCustomerList.LockType = adLockOptimistic
%>
En la siguiente tabla se enumeran las bibliotecas de tipos y los
identificadores UUID que se utilizan con más frecuencia:
|
Biblioteca de tipos |
UUID |
|
Biblioteca de Microsoft ActiveX Data Objects 2.5 |
{00000205-0000-0010-8000-00AA006D2EA4} |
|
Biblioteca de Microsoft CDO 1.2 para Windows 2000 Server |
{0E064ADD-9D99-11D0-ABE5-00AA0064D470} |
|
Biblioteca MSWC de objetos Advertisement Rotator |
{090ACFA1-1580-11D1-8AC0-00C0F00910F9} |
|
Biblioteca MSWC de objetos de registro de IIS |
{B758F2F9-A3D6-11D1-8B9C-080009DCC2FA} |
Interactuar con secuencias de comandos del cliente
Es posible aumentar la eficacia de ASP si se utiliza para generar o manipular
secuencias de comandos del cliente. Por ejemplo, puede escribir secuencias de
comandos del servidor que construyan secuencias de comandos del cliente basadas
en variables específicas del servidor, el tipo del explorador o los parámetros
de la petición HTTP.
Si intercala instrucciones de secuencias de comandos del servidor en las
secuencias de comandos del cliente (delimitadas mediante etiquetas HTML
<SCRIPT>), como se muestra en la plantilla del ejemplo siguiente, puede
inicializar de forma dinámica y alterar las secuencias de comandos del cliente
en el momento de realizar la petición:
<SCRIPT LANGUAGE="VBScript">
<!--
variable
= <%=valor definido por el servidor %>
.
.
.
secuencia de comandos del cliente
<% secuencia de comandos del servidor que se utiliza para generar una
instrucción del cliente %>
secuencia de comandos del cliente
.
.
.
-->
</SCRIPT>
Al incorporar estas funciones es posible crear algunas aplicaciones útiles e
interesantes. Por ejemplo, ésta es una sencilla secuencia de comandos del
servidor (escrita en VBScript) que manipula una secuencia de comandos del
cliente (escrita en JScript):
<%
Dim dtmTime, strServerName, strServerSoftware, intGreeting
dtmTime = Time()
strServerName = Request.ServerVariables("SERVER_NAME")
strServerSoftware = Request.ServerVariables("SERVER_SOFTWARE")
'Genera un número aleatorio.
Randomize
GreetCondition = int(rnd * 3)
%>
<SCRIPT LANGUAGE="JScript">
<!--
//Llama a la función para mostrar el saludo
showIntroMsg()
function showIntroMsg()
{
switch(<%= intGreeting %>)
{
case 0:
msg = "Este es el servidor Web <%= strServerName%> con <%=
strServerSoftware %>."
break
case 1:
msg = "Reciba nuestra bienvenida al servidor Web <%= strServerName%>.
La hora local es <%= dtmTime %>."
break
case 2:
msg = "Este servidor utiliza <%= strServerSoftware %>."
break
}
document.write(msg)
}
-->
</SCRIPT>
Escribir procedimientos
Un procedimiento es un grupo de comandos de secuencia de comandos
que realizan una tarea específica y puede devolver un valor. Puede definir sus
propios procedimientos e invocarlos repetidamente desde sus secuencias de
comandos.
Puede poner las definiciones de los procedimientos en el mismo archivo .asp
que llama a los procedimientos o bien puede poner los procedimientos utilizados
con más frecuencia en un archivo .asp compartido y utilizar la directiva
#include para incluirlo en otros archivos .asp que llamen a los procedimientos.
Como alternativa, puede encapsular dicha funcionalidad en un componente
COM.
Definir procedimientos
Las definiciones de los procedimientos pueden encontrarse dentro de etiquetas
<SCRIPT> y </SCRIPT> y deben seguir las reglas del lenguaje de
secuencias de comandos. Utilice el elemento <SCRIPT> para los
procedimientos escritos en lenguajes distintos del lenguaje principal para
secuencias de comandos. Sin embargo, utilice los delimitadores de las secuencias
de comandos (<% y %>) en los procedimientos escritos en el lenguaje
principal de secuencias de comandos.
Cuando utilice la etiqueta HTML <SCRIPT>, debe emplear dos atributos
para asegurar el proceso de la secuencia de comandos por parte del servidor. La
sintaxis de la etiqueta <SCRIPT> es la siguiente:
<SCRIPT LANGUAGE=JScript RUNAT=SERVER>
definición del procedimiento
</SCRIPT>
El atributo RUNAT=SERVER indica al servidor Web que procese la secuencia de
comandos en el servidor. Si no establece este atributo, la secuencia de comandos
la procesará el explorador del cliente. El atributo LANGUAGE determina el
lenguaje de secuencia de comandos utilizado en este bloque. Puede especificar
cualquier lenguaje para el que haya instalado un motor de secuencias de comandos
en el servidor. Para especificar VBScript, use el valor VBScript. Para
especificar JScript, use el valor JScript. Si no asigna el atributo LANGUAGE, el
bloque de la secuencia de comandos se interpretará en el lenguaje principal de
secuencia de comandos.
Los comandos del bloque de la secuencia de comandos deben componer uno o
varios procedimientos completos en el lenguaje de secuencia de comandos elegido.
Por ejemplo, los comandos siguientes definen el procedimiento JScript
MiFuncion.
<HTML>
<SCRIPT LANGUAGE=JScript RUNAT=SERVER >
function MiFuncion()
{
Response.Write("Llamó a MiFuncion().")
}
</SCRIPT>
Importante
No incluya en las etiquetas <SCRIPT> del
servidor comandos de secuencias de comandos que no formen parte de
procedimientos completos. Los comandos que no formen parte de un procedimiento
pueden provocar resultados impredecibles puesto que deben ejecutarse en un orden
determinado. Además, no puede utilizar la directiva de resultado de ASP
<%=%> dentro de los procedimientos. En su lugar, utilice
Response.Write para enviar contenido al explorador.
Llamar a procedimientos
Para llamar a procedimientos, incluya el nombre de los procedimientos en un
comando. Si va a llamar a procedimientos JScript desde VBScript, debe utilizar
paréntesis después del nombre del procedimiento; si el procedimiento no tiene
argumentos, utilice paréntesis vacíos. Si va a llamar a procedimientos VBScript
o JScript desde JScript, utilice siempre paréntesis después del nombre del
procedimiento.
En VBScript también puede utilizar la palabra clave Call
para llamar a un procedimiento. Sin embargo, si el procedimiento al que llama
requiere argumentos, la lista de argumentos debe aparecer entre paréntesis. Si
omite la palabra clave Call, también debe omitir los paréntesis
en los que se incluye la lista de argumentos. Si utiliza la sintaxis
Call para llamar a una función integrada o definida por el
usuario, se descartará el valor devuelto por la función.
El ejemplo siguiente ilustra la creación y la llamada a procedimientos en dos
lenguajes para secuencias de comandos diferentes (VBScript y JScript).
<%@ LANGUAGE=VBScript %>
<HTML>
<BODY>
<% Echo %>
<BR>
<% printDate() %>
</BODY>
</HTML>
<%
Sub Echo
Response.Write "<TABLE>" & _
"Response.Write
"<TR><TH>Nombre</TH><TH>Valor</TH></TR>"
Set objQueryString = Request.QueryString
For Each strSelection In objQueryString
Response.Write "<TR><TD>" & p & "</TD><TD>"
& _
FormValues(strSelection) & "</TD></TR>"
Next
Response.Write "</TABLE>"
End Sub
%>
<SCRIPT LANGUAGE=JScript RUNAT=SERVER>
function PrintDate()
{
var x
x = new Date()
Response.Write(x.toString())
}
</SCRIPT>
Nota
Las llamadas de VBScript a las funciones
JScript no distinguen entre mayúsculas y minúsculas.
Pasar matrices a procedimientos
Para pasar una matriz entera a un procedimiento en VBScript, utilice el
nombre de la matriz seguido de paréntesis vacíos; en JScript, utilice corchetes
vacíos.
Procesar los datos proporcionados por el usuario
Mediante el objeto
Request de ASP puede
crear sencillas y eficaces secuencias de comandos para recopilar y procesar
datos obtenidos de formularios HTML. En este tema no sólo aprenderá a crear
secuencias de comandos básicas para procesar formularios, sino que también
conocerá técnicas útiles para validar los datos de los formularios, tanto en su
servidor Web como en el explorador de Web del usuario.
Acerca de los formularios HTML
Los formularios HTML, el método más común para recopilar información desde el
Web, consiste en un conjunto de etiquetas HTML especiales que presentan
elementos de interfaz de usuario en una página Web. Los cuadros de texto, los
botones y las casillas de verificación son ejemplos de elementos que permiten
que los usuarios intercalen con una página Web y envíen información a un
servidor Web.
Por ejemplo, las siguientes etiquetas HTML generan un formulario en el que un
usuario puede escribir su nombre, apellido y edad, e incluye un botón para
enviar la información a un servidor Web. El formulario también contiene una
etiqueta de entrada oculta (no presentada por el explorador Web) que puede
utilizar para pasar información adicional al servidor Web.
<FORM METHOD="Post" ACTION="Profile.asp">
<INPUT TYPE="text" NAME="Nombre">
<INPUT TYPE="text" NAME="Apellido">
<INPUT TYPE="text" NAME="Edad">
<INPUT TYPE="Hidden" NAME="EstadoUsuario" VALUE="Nuevo">
<INPUT TYPE="Submit" VALUE="Entrar">
</FORM>
Presentar con detalle el conjunto completo de etiquetas HTML para formularios
se sale del ámbito de este tema, sin embargo, hay numerosas fuentes de
información que puede utilizar para aprender a crear y utilizar formularios
HTML. Por ejemplo, puede utilizar la posibilidad que ofrece su explorador para
ver el código fuente con el fin de examinar cómo se crean los formularios HTML
en otros sitios Web. También puede visitar el sitio Web de MSDN de Microsoft en
la dirección http://msdn.microsoft.com/ para conocer las técnicas más recientes
para utilizar los formularios HTML con otras tecnologías de Internet.
Procesar datos de formularios con ASP
Después de crear el formulario HTML tendrá que procesar los datos
proporcionados por el usuario, lo que implica enviar la información a un archivo
.asp para que la analice y manipule. De nuevo, examine el código HTML del
ejemplo anterior. Observe que el atributo ACTION de la etiqueta <FORM>
hace referencia a un archivo llamado Profile.asp. Cuando el usuario envía
información HMTL, el explorador utiliza el método POST para enviarla a un
archivo .asp del servidor, en este caso Profile.asp. Este archivo .asp puede
contener archivos de comandos que procesen la información e interactúen con
otras secuencias de comandos, componentes COM o recursos, como una base de
datos.
Existen tres formas básicas de recopilar información de un formulario HTML
mediante ASP:
- Un archivo .htm estático puede contener un formulario que envíe sus
valores a un archivo .asp.
- Un archivo .asp puede crear un formulario que envíe información a otro
archivo .asp.
- Un archivo .asp puede crear un formulario que se envíe información a sí
mismo; es decir, al archivo .asp que contiene el formulario.
Los dos primeros métodos funcionan igual que los formularios que interactúan
con otros programas de servidor Web, con la única diferencia de que con ASP se
simplifica mucho la tarea de recuperar y procesar la información. El tercer
método es especialmente útil y se muestra en la sección Validar los datos de los
formularios.
Obtener datos de los formularios
El objeto Request de ASP proporciona dos colecciones que
facilitan la tarea de recuperar información de los formularios enviados con las
peticiones URL.
La colección QueryString
La colección
QueryString recupera
los valores del formulario pasados al servidor Web como texto a continuación del
signo de interrogación de la dirección URL de la petición. Los valores del
formulario se pueden anexar a la dirección URL de la petición mediante el método
GET de HTTP o, manualmente, si se agregan los valores del formulario a la
dirección URL.
Si el ejemplo del formulario anterior utilizara el método GET (METHOD =
"GET") y el usuario escribiera Juan, Soto y 30, se
enviaría la siguiente petición URL al servidor:
http://Workshop1/Painting/Profile.asp?Nombre=Juan&Apellido=Soto&Edad=30&EstadoUsuario=Nuevo
El archivo Profile.asp podría contener la siguiente secuencia de comandos
para procesar formularios:
Hola, <%= Request.QueryString("nombre") %> <%=
Request.QueryString("apellido") %>.
Tiene <%= Request.QueryString("edad") %> años.
<%
If Request.QueryString("EstadoUsuario") = "Nuevo" Then
Response.Write"Ésta es su primera visita a este sitio Web"
End if
%>
En este caso, el servidor Web devolvería el texto siguiente al explorador Web
del usuario:
Hola Juan Soto. Tiene 30 años. Ésta es su primera visita a este sitio Web
La colección QueryString también tiene un parámetro opcional
que puede utilizar para tener acceso a uno de los múltiples valores que se
encuentran en el cuerpo de la petición URL (con el método GET). También puede
utilizar la propiedad Count para contar el número de veces que
aparece un determinado tipo de valor.
Por ejemplo, un formulario que contenga un cuadro de lista con varios
elementos puede generar la siguiente petición:
http://OrganicFoods/list.asp?Comida=Manzanas&Comida=Aceitunas&Comida=Pan
Podría utilizar el siguiente comando para contar los diferentes valores:
Request.QueryString("Comida").Count
Para presentar los tipos de valores, Lista.asp podría contener la secuencia
de comandos siguiente:
<%
lngTotal = Request.QueryString("Comida").Count
For i = 1 To lngTotal
Response.Write Request.QueryString("Comida")(i) & "<BR>"
Next
%>
La secuencia de comandos anterior mostraría:
Manzanas
Aceitunas
Pan
También puede mostrar la lista completa de valores como una cadena delimitada
por comas, del modo siguiente:
<% Response.Write Request.QueryString("Item") %>
Aparecería la cadena siguiente:
Manzanas, Aceitunas, Pan
Colección Form
Cuando utiliza el método GET de HTTP para pasar a un servidor Web valores de
un formulario grande y complejo, corre el riesgo de perder información. Algunos
servidores Web tienden a restringir el tamaño de la cadena de petición de URL,
por lo que los valores de los formularios grandes pasados con el método GET
podrían quedar truncados. Si necesita enviar una gran cantidad de información
desde un formulario a un servidor Web, debe utilizar el método POST de HTTP. El
método POST, que envía los datos de los formularios en el cuerpo de la petición
HTTP, puede enviar un número casi ilimitado de caracteres a un servidor. Puede
utilizar la colección Form del objeto
Request de ASP para recuperar los valores enviados mediante el método
POST.
La colección Form almacena valores de manera similar a la
colección QueryString. Por ejemplo, si un usuario completa un
formulario escribiendo una larga lista de nombres, se podrían leer los nombres
con la secuencia de comandos siguiente:
<%
lngTotal = Request.Form("Comida").Count
For i = 1 To lngTotal
Response.Write Request.Form("Comida")(i) & "<BR>"
Next
%>
Validar los datos de los formularios
Un formulario Web bien diseñado suele incluir una secuencia de comandos del
cliente que valida los datos proporcionados por el usuario antes de enviar la
información al servidor. Las secuencias de comandos de validación
pueden comprobar si el usuario escribió un número válido o si un cuadro de texto
está en blanco. Imagine que su sitio Web incluye un formulario que permite
calcular la tasa de retorno de una inversión. Probablemente querrá comprobar si
un usuario realmente escribió texto o números en los campos apropiados del
formulario, antes de enviar al servidor información que podría no ser
válida.
En general, lo mejor es realizar en el cliente tantas comprobaciones como sea
posible. Además, de poder preguntar antes al usuario por los errores, la
validación en el cliente mejora el tiempo de respuesta, reduce la carga del
servidor y libera ancho de banda para otras aplicaciones.
La siguiente secuencia de comandos del cliente valida los datos escritos por
el usuario (en este caso, la secuencia de comandos determina si el número de
cuenta que escribió el usuario es realmente un número) antes de enviarlos al
servidor:
<SCRIPT LANGUAGE="JScript">
function ComprobarNumero()
{
if (isNumeric(document.UserForm.AcctNo.value))
return true
else
{
alert("Escriba un número de cuenta válido.")
return false
}
}
//Función para determinar si el valor del formulario es un número.
//Nota: El método isNaN JScript es un método más elegante para determinar
si
//un valor no es un número. Sin embargo, algunos exploradores no admiten este
método.
function isNumeric(str)
{
for (var i=0; i < str.length; i++)
{
var ch = str.substring(i, i+1)
if( ch < "0" || ch>"9" || str.length == null)
{
return false
}
}
return true
}
</SCRIPT>
<FORM METHOD="Get" ACTION="balance.asp" NAME="FormularioUsuario"
ONSUBMIT="return CheckNumber()">
<INPUT TYPE="Text" NAME="NumCuen">
<INPUT TYPE="Submit" VALUE="Enviar">
</FORM>
Sin embargo, si la validación de un formulario requiere el acceso a una base
de datos debe considerar la utilización de la validación del formulario en el
servidor. Una forma muy útil de realizar la validación en el servidor es crear
formularios que se envíen la información a sí mismos. Es decir, el archivo .asp
contiene en realidad el formulario HTML que recibe los datos del usuario.
(Recuerde, puede utilizar ASP para interactuar con secuencias de comandos del
cliente y código HTML. Para obtener más información, consulte Interactuar con
secuencias de comandos del cliente.) Los datos escritos vuelven al mismo
archivo, que se encarga de validar la información y avisa al usuario si éstos no
son correctos.
Mediante este método se pueden mejorar las características de uso y la
respuesta de los formularios basados en Web. Por ejemplo, si se incluye
información del error junto al campo del formulario en el que se escribió la
información incorrecta, será más fácil para el usuario descubrir el origen del
error. (Normalmente, los formularios basados en Web reenvían las peticiones a
una página Web independiente que contiene información del error. Los usuarios
que no comprendan esta información podrían sentirse frustrados.)
Por ejemplo, la secuencia de comandos siguiente determina si un usuario
escribió un número de cuenta válido, para lo que se envía la información a sí
misma (Verify.asp) y llama a una función definida por el usuario que realiza una
consulta a una base de datos:
<%
strAcct = Request.Form("Cuenta")
If Not AccountValid(strAcct) Then
ErrMsg = "<FONT COLOR=Red>El número de cuenta que ha escrito no es
válido.</FONT>"
Else
Procesa los datos del usuario
.
.
.
Server.Transfer("Complete.asp")
End If
Function AccountValid(strAcct)
Aquí se incluirá una secuencia de comandos o una llamada a un método de un
componente de conexión con una base de datos.
End Function
%>
<FORM METHOD="Post" ACTION="Verify.asp">
Número de cuenta: <INPUT TYPE="Text" NAME="Cuenta"> <%= ErrMsg
%> <BR>
<INPUT TYPE="Submit">
</FORM>
En este ejemplo, la secuencia de comandos se encuentra en un archivo llamado
Verify.asp, el mismo archivo que contiene el formulario HTML y, para enviarse la
información a sí mismo, especifica Verify.asp en el atributo
ACTION.
Importante
Si
utiliza JScript para la validación en el servidor, asegúrese de colocar un par
de paréntesis vacíos detrás del elemento de la colección
Request (QueryString o Form)
al asignar la colección a una variable local. Sin el paréntesis la colección
devolverá un objeto en lugar de una cadena. La secuencia de comandos siguiente
muestra el método correcto para asignar variables con JScript:
<%
var Nombre = Request.Form("Nombre")();
var Contraseña = Request.Form("Contraseña")();
if(Nombre > "")
{
if(Nombre == Contraseña)
Response.Write("El nombre y la contraseña son iguales".)
else
Response.Write("El nombre y la contraseña son diferentes".);
}
%>
VBScript presenta el mismo comportamiento si la colección contiene varios
valores separados por comas o con los que se pueda crear un índice. Esto
significa que tanto para VBScript como para JScript, además de colocar un par de
paréntesis detrás del elemento de la colección Request,
necesitará especificar el índice del valor deseado. Por ejemplo, la siguiente
línea en JScript devuelve sólo el primero de los varios valores de un elemento
de un formulario:
var Nombre = Request.Form("Nombre")(1);
Acceso al origen de datos
ActiveX Data Objects (ADO) es una tecnología ampliable y de fácil uso para
agregar a sus páginas Web acceso a bases de datos. Puede utilizar ADO para
escribir secuencias de comandos compactas y escalables que le permitan
conectarse a orígenes de datos compatibles con OLE DB, como bases de datos,
hojas de cálculo, archivos de datos secuenciales o directorios de correo
electrónico. OLE DB es una interfaz de programación de nivel de sistema que
proporciona un conjunto estándar de interfaces COM para que permitan exponer las
funciones del sistema de administración de bases de datos. Con el modelo de
objetos ADO es fácil tener acceso a estas interfaces (mediante lenguajes de
secuencias de comandos, como VBScript o JScript) para agregar funciones de bases
de datos a las aplicaciones Web. Además, también puede utilizar ADO para tener
acceso a bases de datos compatibles con la Conectividad abierta de bases de
datos (ODBC, Open Database Connectivity).
Si no tiene mucha experiencia en conectividad con bases de datos, encontrará
que la sintaxis de ADO es sencilla y fácil de utilizar. Si es un programador
experimentado, agradecerá el acceso escalable de alto rendimiento que
proporciona ADO para una gran variedad de orígenes de datos.
Crear una cadena de conexión
El primer paso en la creación de una aplicación de datos en Web consiste en
proporcionar un método para que ADO encuentre e identifique el origen de datos.
Para ello se utiliza una cadena de conexión, una serie de argumentos
separados mediante un punto y coma que definen parámetros como el proveedor del
origen de datos y la ubicación del mismo. ADO utiliza la cadena de conexión para
identificar el proveedor OLE DB y para dirigir al proveedor al origen
de datos. El proveedor es un componente que representa el origen de datos y que
expone la información en la aplicación en forma de conjuntos de filas.
En la tabla siguiente se enumeran las cadenas de conexión de OLE DB para
varios orígenes de datos habituales:
|
Origen de datos |
Cadena de conexión OLE DB |
|
Microsoft(r) Access |
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=ruta física de acceso
al archivo .mdb |
|
Microsoft SQL Server |
Provider=SQLOLEDB.1;Data Source=ruta de acceso a la base de datos
del servidor |
|
Oracle |
Provider=MSDAORA.1;Data Source=ruta de acceso a la base de datos
del servidor |
|
Microsoft Indexing Service |
Provider=MSIDXS.1;Data Source=ruta de acceso al
archivo |
Para proporcionar compatibilidad con versiones anteriores, el proveedor OLE
DB para ODBC admite la sintaxis de las cadenas de conexión ODBC. En la tabla
siguiente se enumeran las cadenas de conexión ODBC que se utilizan
habitualmente:
|
Controlador del origen de
datos |
Cadena de conexión ODBC |
|
Microsoft Access |
Driver={Microsoft Access Driver (*.mdb)};DBQ=ruta física de acceso
al archivo .mdb |
|
SQL Server |
DRIVER={SQL Server};SERVER=ruta de acceso al
servidor |
|
Oracle |
DRIVER={Microsoft ODBC for Oracle};SERVER=ruta de acceso al
servidor |
|
Microsoft Excel |
Driver={Microsoft Excel Driver (*.xls)};DBQ=ruta física de acceso
al archivo .xls; DriverID=278 |
|
Microsoft Excel 97 |
Driver={Microsoft Excel Driver (*.xls)};DBQ=ruta física de acceso
al archivo .xls;DriverID=790 |
|
Paradox |
Driver={Microsoft Paradox Driver (*.db)};DBQ=ruta física de acceso
al archivo .db;DriverID=26 |
|
Texto |
Driver={Microsoft Text Driver (*.txt;*.csv)};DefaultDir=ruta física
de acceso al archivo .txt |
|
Microsoft Visual FoxPro(r) (con un contenedor de bases de datos)
|
Driver={Microsoft Visual FoxPro
Driver};SourceType=DBC;SourceDb=ruta física de acceso al archivo
.dbc |
|
Microsoft Visual FoxPro (sin un contenedor de bases de datos)
|
Driver={Microsoft Visual FoxPro
Driver};SourceType=DBF;SourceDb=ruta física de acceso al archivo
.dbf |
Conectarse al origen de datos
ADO proporciona el objeto Connection para establecer y
administrar las conexiones entre las aplicaciones y los orígenes de datos
compatibles con OLE DB o las bases de datos compatibles con ODBC. El objeto
Connection incorpora propiedades y métodos que se pueden
utilizar para abrir y cerrar conexiones con bases de datos, y para enviar
consultas de actualización de la información.
Para establecer una conexión con una base de datos, cree primero una
instancia del objeto Connection. Por ejemplo, la secuencia de
comandos siguiente crea una instancia del objeto Connection y
procede a abrir una conexión:
<%
'Crea un objeto Connection.
Set cn = Server.CreateObject("ADODB.Connection")
'Abre una conexión mediante la cadena de conexión OLE DB.
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\DatosMercado\VentasPrevistas.mdb"
%>
Nota
La cadena de conexión no contiene espacios en
blanco ni antes ni después del signo igual (=).
En este caso, el método Open del objeto
Connection se refiere a la cadena de conexión.
Ejecutar consultas SQL con el objeto Connection
Con el método Execute del objeto Connection
puede emitir comandos al origen de datos, como consultas de SQL (Lenguaje de
consulta estructurado). (SQL, lenguaje estándar para comunicarse con bases de
datos, define comandos para recuperar y actualizar información.) El método
Execute acepta parámetros que especifiquen el comando (o la
consulta), el número de registros de datos a los que afecta y el tipo de comando
que se utiliza.
La siguiente secuencia de comandos utiliza el método Execute para
enviar una consulta con un comando INSERT de SQL, que inserta datos en una tabla
concreta de la base de datos. En este caso, el bloque de la secuencia de
comandos inserta el nombre José Lugo en una
tabla de la base de datos llamada
Customers.
<%
'Define la cadena de conexión OLE DB.
strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\Datos\Empleados.mdb"
'Crea la instancia del objeto Connection y abre una conexión con la base de
datos.
Set cn = Server.CreateObject("ADODB.Connection")
cnn.Open strConnectionString
'Define la instrucción SELECT de SQL.
strSQL = "INSERT INTO Customers (FirstName, LastName) VALUES
('José','Lugo')"
'Utiliza el método Execute para enviar una consulta SQL a la base de
datos.
cnn.Execute strSQL,,adCmdText + adExecuteNoRecords
%>
Observe que se especifican dos parámetros en la instrucción que se utiliza
para ejecutar la consulta: adCmdText y
adExecuteNoRecords. El parámetro opcional
adCmdText especifica el tipo de comando e indica que el
proveedor debe evaluar la instrucción de consulta (en este caso, una consulta
SQL) como una definición textual de un comando. El parámetro
adExecuteNoRecords indica a ADO que no debe crear un conjunto
de registros de datos si no se devuelven resultados a la aplicación. Este
parámetro sólo funciona con los tipos de comandos definidos como texto, como las
consultas SQL, o con procedimientos almacenados de bases de datos. Aunque los
parámetros adCmdText y adExecuteNoRecords son
opcionales, debe especificarlos al utilizar el método Execute
para mejorar así el rendimiento de la aplicación de datos.
Importante
Los
parámetros ADO, como adCmdText, deben estar definidos para
poder utilizarlos en una secuencia de comandos. Un método cómodo para definir
los parámetros consiste en utilizar una biblioteca de tipos de
componentes, que es un archivo que contiene definiciones para todos los
parámetros ADO. Para implementar una biblioteca de tipos de componentes debe
declararla antes. Agregue la etiqueta siguiente <METADATA> al archivo .asp
o a Global.asa para declarar la biblioteca de tipos ADO:
<!--METADATA NAME="Microsoft ActiveX Data Objects 2.5 Library"
TYPE="TypeLib" UUID="{00000205-0000-0010-8000-00AA006D2EA4}"-->
Si desea obtener más detalles acerca de cómo implementar las bibliotecas de
tipos de componentes, consulte la sección Utilizar constantes del tema Utilizar
variables y constantes.
Además del comando INSERT de SQL, puede utilizar los
comandos UPDATE y DELETE de SQL para modificar
y quitar información de la base de datos.
Con el comando UPDATE de SQL puede modificar los valores de
los elementos de una tabla de la base de datos. La siguiente secuencia de
comandos usa el comando UPDATE para cambiar todos los campos
FirstName de la tabla Customers a Juan en todas las filas cuyo campo LastName
contenga el apellido Soto.
<%
Set cn = Server.CreateObject("ADODB.Connection")
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\Datos\Empleados.mdb"
cn.Execute "UPDATE Customers SET FirstName = 'Juan' WHERE LastName = 'Soto'
",,adCmdText + adExecuteNoRecords
%>
Para quitar determinados registros de una tabla de la base de datos, utilice
el comando DELETE de SQL. La siguiente secuencia de comandos
quita todas las filas de la tabla Customers cuyo apellido sea Soto:
<%
Set cn = Server.CreateObject("ADODB.Connection")
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\Datos\Empleados.mdb"
cn.Execute "DELETE FROM Customers WHERE LastName = 'Soto'",,adCmdText +
adExecuteNoRecords
%>
Nota
Debe tener mucho cuidado al utilizar el
comando DELETE de SQL. Un comando DELETE que
no vaya acompañado de una cláusula WHERE eliminará todas las
filas de la tabla. Asegúrese de incluir la cláusula WHERE de
SQL, que especifica las filas exactas que se van a eliminar.
Utilizar el objeto Recordset para manipular los resultados
Para recuperar datos, examinar resultados y modificar su base de datos, ADO
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 permite
recorrer los resultados de uno en uno.
Recuperar un conjunto de registros
Las buenas aplicaciones de datos Web emplean el objeto
Connection para establecer un vínculo, y el objeto
Recordset para manipular los datos devueltos. Al combinar las
funciones especializadas de ambos objetos puede desarrollar aplicaciones de
bases de datos que realicen casi cualquier tarea de tratamiento de datos. Por
ejemplo, la siguiente secuencia de comandos del servidor utiliza el objeto
Recordset para ejecutar un comando SELECT de
SQL. El comando SELECT recupera un conjunto específico de
información basándose en las restricciones de la consulta. La consulta también
contiene una cláusula WHERE de SQL, que se utiliza para
establecer el criterio de selección de la consulta. En este ejemplo, la cláusula
WHERE limita la consulta a todos los registros que contengan el
apellido Soto en la tabla Customers de la base de datos.
<%
'Establece una conexión con un origen de datos.
strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\Datos\Empleados.mdb"
Set cn = Server.CreateObject("ADODB.Connection")
cnn.Open strConnectionString
'Crea una instancia de un objeto Recordset.
Set rsCustomers = Server.CreateObject("ADODB.Recordset")
'Abre un objeto Recordset con el método Open
'y utiliza la conexión establecida por el objeto Connection.
strSQL = "SELECT FirstName, LastName FROM Customers WHERE LastName = 'Soto'
"
rstCustomers.Open strSQL, cnn
'Recorre el conjunto de los registros y presenta los resultados
'e incrementa la posición del registro con el método MoveNext.
Set objFirstName = rstCustomers("Nombre")
Set objLastName = rstCustomers("Apellido")
Do Until rstCustomers.EOF
Response.Write objFirstName & " " & objLastName &
"<BR>"
rstCustomers.MoveNext
Loop
%>
Observe que en el ejemplo anterior, el objeto Connection
estableció la conexión con la base de datos y que el objeto
Recordset utilizó la misma conexión para recuperar resultados
de la base de datos. Este método es útil cuando tenga que configurar con
precisión la forma en que se establece el vínculo con la base de datos. Por
ejemplo, si necesitara especificar el tiempo de espera antes de anular un
intento de conexión, tendría que utilizar el objeto Connection
para establecer dicha propiedad. Sin embargo, si sólo desea establecer una
conexión con las propiedades de conexión predeterminadas de ADO, podría utilizar
el método Open del objeto Recordset para
establecer el vínculo:
<%
strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\Datos\Empleados.mdb"
strSQL = "SELECT FirstName, LastName FROM Customers WHERE LastName = 'Soto'
"
Set rsCustomers = Server.CreateObject("ADODB.Recordset")
'Abre una conexión con el método Open
'y utiliza la conexión establecida por el objeto Connection.
rstCustomers.Open strSQL, strConnectionString
'Recorre el conjunto de registros, presenta los resultados
'e incrementa la posición del registro con el método MoveNext.
Set objFirstName = rstCustomers("Nombre")
Set objLastName = rstCustomers("Apellido")
Do Until rstCustomers.EOF
Response.Write objFirstName & " " & objLastName &
"<BR>"
rstCustomers.MoveNext
Loop
%>
Cuando establece una conexión con el método Open del objeto
Recordset, está utilizando implícitamente el objeto
Connection para proteger el vínculo. Para obtener más
información, consulte la documentación acerca de Microsoft ActiveX Data Objects
(ADO), disponible en el sitio Web de Microsoft Universal Data Access en la
dirección http://www.microsoft.com/data/.
Nota
Para mejorar de forma significativa el
rendimiento de las aplicaciones ASP de base de datos, piense en la posibilidad
de cambiar el estado del conjunto de registros a Application.
Para obtener más información, consulte Guardar datos en la memoria caché.
A menudo resulta útil contar el número de registros que se devuelven en un
conjunto de registros. El método Open del objeto
Recordset permite especificar un parámetro opcional,
cursor, que determina cómo recupera y recorre el conjunto de registros
el proveedor subyacente. Al agregar el parámetro de cursor
adOpenKeyset a la instrucción que se utiliza para ejecutar la
consulta, permite que la aplicación cliente recorra todo el conjunto de
registros. Como resultado, la aplicación puede utilizar la propiedad
RecordCount para calcular con precisión el número de registros
del conjunto. Vea el siguiente ejemplo:
<%
Set rsCustomers = Server.CreateObject("ADODB.Recordset")
rs.Open "SELECT * FROM NewOrders", "Provider=Microsoft.Jet.OLEDB.3.51;Data
Source='C:\PedidosClientes\Pedidos.mdb'", adOpenKeyset, adLockOptimistic,
adCmdText
'Utiliza la propiedad RecordCount del objeto Recordset para realizar la
cuenta.
If rs.RecordCount >= 5 then
Response.Write "Recibimos estos " & rs.RecordCount & " nuevos
pedidos<BR>"
Do Until rs.EOF
Response.Write rs("NombreCliente") & " " & rs("ApellidoCliente")
& "<BR>"
Response.Write rs("NumeroCuenta") & "<BR>"
Response.Write rs("Cantidad") & "<BR>"
Response.Write rs("FechaEntrega") & "<BR><BR>"
rs.MoveNext
Loop
Else
Response.Write "Hay menos de " & rs.RecordCount & " nuevos
pedidos."
End If
rs.Close
%>
Combinar formularios HTML y el acceso a bases de datos
Las páginas Web que contienen formularios HTML pueden permitir que los
usuarios consulten de forma remota una base de datos y recuperen información
concreta. Con ADO puede crear secuencias de comandos sorprendentemente sencillas
que recopilen información del formulario del usuario, creen una consulta
personalizada para la base de datos y devuelvan información al usuario. Mediante
el objeto Request de ASP puede recuperar la información escrita
en los formularios HTML e incorporar dicha información a sus instrucciones SQL.
Por ejemplo, el siguiente bloque de secuencia de comandos inserta en una tabla
la información suministrada por un formulario HTML. La secuencia de comandos
recopila información del usuario con la colección Form del
objeto Request.
<%
'Abre una conexión mediante el objeto Connection. El objeto Command
'no tiene un método Open para establecer la conexión.
strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=D:\Catálogo\Semillas.mdb"
Set cn = Server.CreateObject("ADODB.Connection")
cnn.Open strConnectionString
'Crea una instancia del objeto Command
'y utiliza la propiedad ActiveConnection para adjuntar
'la conexión al objeto Command.
Set cm= Server.CreateObject("ADODB.Command")
Set cmn.ActiveConnection = cnn
'Define la consulta SQL.
cmn.CommandText = "INSERT INTO MySeedsTable (Type) VALUES (?)"
'Define la información de configuración de los parámetros de la
consulta.
cmn.Parameters.Append cmn.CreateParameter("type",adVarChar, ,255)
'Asigna el valor de la entrada y ejecuta la actualización.
cmn("type") = Request.Form("SeedType")
cmn.Execute ,,adCmdText + adExecuteNoRecords
%>
Para obtener más información acerca de los formularios y el uso del objeto
Request de ASP, consulte Procesar los datos introducidos por el
usuario.
Transferencia entre archivos .ASP
Para utilizar Response.Redirect para redirigir un explorador
se necesita un viaje de ida y vuelta, lo que significa que el servidor
envía al explorador una respuesta HTTP en la que indica la ubicación de la nueva
dirección URL. El explorador abandona automáticamente la cola de la petición del
servidor y envía una nueva petición HTTP para la dirección URL. Después, el
servidor agrega esta petición a la cola de peticiones, junto con las peticiones
que mientras tanto llegan desde otros clientes. En un sitio Web con mucha carga,
este sistema puede desperdiciar ancho de banda y reducir el rendimiento del
servidor, especialmente si se redirige el explorador a un archivo que se
encuentre en el mismo servidor.
Puede utilizar el método Server.Transfer para realizar la
transferencia de un archivo .asp a otro que se encuentre en el mismo servidor,
en lugar del método Response.Redirect. Con
Server.Transfer puede transferir directamente las peticiones de
archivos .asp sin necesidad de abandonar la cola de peticiones, lo que elimina
viajes de ida y vuelta.
Por ejemplo, la secuencia de comandos siguiente muestra cómo podría utilizar
Server.Transfer para saltar entre las páginas de una aplicación
según la información de estado:
<%
If Session("blnSaleCompleted") Then
Server.Transfer("/Pedido/Gracias.asp")
Else
Server.Transfer("/Pedido/MasInfo.asp")
End if
%>
Server.Transfer
envía peticiones desde un archivo .asp en ejecución
a otro archivo. Durante la transferencia, el archivo .asp que se pidió
inicialmente finaliza inmediatamente la ejecución sin vaciar el búfer de salir
(para obtener más información, consulte la sección Almacenamiento en búfer del
contenido). La petición de información se pone a disposición del archivo de
destino cuando éste comienza la ejecución. Durante la ejecución, el archivo
tiene acceso al mismo conjunto de objetos intrínsecos (Request,
Response, Server, Session y
Application) que el archivo que se pidió inicialmente.
También se puede utilizar Server.Transfer para realizar una
transferencia entre archivos .asp que se encuentren en diferentes aplicaciones.
Sin embargo, al hacerlo el archivo se comportará como si formara parte de la
aplicación que inició la transferencia (es decir, el archivo sólo tendrá acceso
a las variables con alcance en la aplicación inicial, no en la aplicación en la
que realmente reside el archivo). Por ejemplo, si realiza una transferencia
desde un archivo que se encuentra en la aplicación Ventas a otro que se
encuentra en Personal, la aplicación Ventas tomará prestado el archivo de la
aplicación Personal y lo ejecutará como si fuera parte de ella.
ASP proporciona también el comando Server.Execute que
permite transferir un archivo, ejecutar el contenido y volver al archivo que
inició la transferencia. Si tiene conocimientos de VBScript, le ayudará pensar
en Server.Execute como análogo a una llamada a un
procedimiento, con la diferencia de que en lugar de ejecutar un procedimiento se
ejecuta un archivo .asp completo.
Por ejemplo, la secuencia de comandos siguiente muestra cómo podría utilizar
Server.Execute para incluir archivos .asp de forma
dinámica:
<%
.
.
If blnUseDHTML Then
Server.Execute("DHTML.asp")
Else
Server.Execute("HTML.asp")
End If
.
.
%>
Mientras el archivo de destino pertenezca a una aplicación del mismo
servidor, la aplicación inicial se transferirá a este archivo, ejecutará su
contenido y continuará con la ejecución del archivo que inició la transferencia.
Igual que sucede con Server.Transfer, al ejecutar un archivo
.asp éste se comporta como si formara parte de la aplicación inicial. Sin
embargo, Server.Execute, no funciona cuando los servidores son
distintos. Para obtener más información, consulte
Server.Execute.
Enviar contenido al explorador
A medida que se procesa una secuencia de comandos ASP, el texto y los
gráficos que no se encuentren entre delimitadores ASP o etiquetas <SCRIPT>
se devuelve directamente al explorador. También puede enviar explícitamente
contenido al explorador mediante el objeto Response.
Enviar contenido
Para enviar contenido al explorador desde delimitadores ASP o desde un
procedimiento, utilice el método Write del objeto
Response. Por ejemplo, la instrucción siguiente envía un saludo
diferente al usuario dependiendo de si el usuario ha visitado la página con
anterioridad o no:
<%
If blnFirstTime Then
Response.Write "<H3 ALIGN=CENTER>Reciba nuestra bienvenida a la página
de introducción</H3>"
Else
Response.Write "<H3 ALIGN=CENTER>Gracias por volver a la página de
introducción</H3>"
End If
%>
Fuera de un procedimiento, no tiene que utilizar
Response.Write para devolver contenido al usuario. El contenido
que no se encuentra dentro de delimitadores de secuencia de comandos se envía
directamente al explorador, que da formato y presenta este contenido. Por
ejemplo, la secuencia de comandos siguiente produce el mismo resultado que la
secuencia de comandos anterior:
<H3 ALIGN=CENTER>
<% If blnFirstTime Then %>
Reciba nuestra bienvenida a la página de introducción.
<% Else %>
Gracias por volver a la página de introducción.
<%End If %>
</H3>
Intercale secuencias de comandos y código HTML cuando tenga que devolver el
resultado una vez o cuando sea más cómodo agregar instrucciones a texto HTML
existente. Utilice Response.Write cuando no desee dividir una
instrucción con delimitadores o cuando desee generar la cadena de texto que vaya
a devolver al explorador. Por ejemplo, podría generar una cadena de texto que
creara una fila de una tabla con los valores enviados por un formulario
HTML:
Response.Write "<TR><TD>" & Request.Form("Nombre") _
& "</TD><TD>" & Request.Form("Apellido") &
"</TD></TR>"
Request.Form
devuelve los valores enviados por un formulario HTML
(consulte Procesar los datos introducidos por el usuario).
Nota
El carácter & es el carácter de
continuación de cadenas de VBScript. El carácter de subrayado (_) es el carácter
de continuación de línea de VBScript.
Secuencias de comandos sencillas
La siguiente secuencia de comandos ilustra las técnicas básicas que se
utilizan en las secuencias de comandos ASP. Si no tiene experiencia en el
desarrollo de aplicaciones o nunca ha escrito secuencias de comandos, éste es un
buen lugar para empezar.
Elija un ejemplo en la siguiente lista:
- Variables: Muestra cómo crear y manipular variables en una secuencia de
comandos ASP.
- Bucles: Proporciona un ejemplo de las tres construcciones más comunes para
crear bucles, For ... Next, Do ... Loop y While ... Wend.
- Operadores condicionales: Ilustra el uso de los operadores condicionales,
como If ... Then, en las secuencias de comandos ASP.
- Matrices: Muestra cómo crear, administrar y tener acceso a matrices.
- Archivos de inclusión del servidor: Muestra el uso de los archivos de
inclusión del servidor.
- Funciones y procedimientos: Muestra cómo crear y utilizar funciones y
procedimientos en una secuencia de comandos ASP.
Variables
Introducción
Todas las aplicaciones escritas a lo largo de la historia, independientemente
del lenguaje de programación empleado, han utilizado variables de algún tipo y
las secuencias de comandos ASP no son una excepción. Tanto VBScript como JScript
permiten crear y administrar variables de forma fácil y sencilla.
Cada lenguaje realiza de forma diferente la declaración de variables. JScript
y VBScript son bastante flexibles en lo que respecta a las variables y su
declaración. En VBScript, cualquier variable se considera automáticamente de
tipo Variant si se declara inicialmente con la instrucción Dim. A
cada variable se le asigna un subtipo, como Numeric y Array.
JScript es parecido; la variable se declara inicialmente con la instrucción
var. En general, ambos lenguajes tienden a realizar automáticamente gran
parte de la administración de tipos de datos, incluida la conversión de tipos.
De hecho, ni siquiera es necesario emplear las instrucciones Dim o
var para utilizar una nueva variable; en sus respectivos lenguajes son
opcionales.
Paseo por el código
Este ejemplo declara varios tipos diferentes de variables, realiza algunas
operaciones sencillas en ellas y las muestra al explorador cliente con los
delimitadores especiales de secuencias de comandos <% = ...%>. Se asigna
un entero a la variable intVariable, se suma a sí mismo y se envía el
resultado al explorador cliente. A la variable StrVariable se le asigna
el nombre, se agrega a Soto y se envía al explorador cliente. Del mismo modo se
declaran o crean, inicializan, manipulan y muestran los valores booleanos y las
fechas.
Observaciones
El último paso de la demostración de la variable de fecha es especialmente
interesante. En VBScript, primero se asigna la variable a una cadena de fecha
literal y después se muestra. Después se restablece y se asigna el valor
devuelto por la función Now de VBScript, que devuelve la hora actual del
sistema. El ejemplo de JScript utiliza la función Date de JScript para
establecer el literal inicial, para lo que pasa parámetros a la función, y
establecer después la fecha actual del sistema en la variable, sin pasar
parámetros a la función.
<%@ LANGUAGE = VBScript %>
<% Option Explicit %>
<HTML>
<HEAD>
<TITLE>Variable Sample</TITLE>
</HEAD>
<BODY BGCOLOR="White" TOPMARGIN="10" LEFTMARGIN="10">
<!-- Display header. -->
<FONT SIZE="4" FACE="ARIAL, HELVETICA">
<B>Variable Sample</B></FONT><BR>
<HR>
<H3>Integer Manipulation</H3>
<%
'Declare variable.
Dim intVar
'Assign the variable an integer value.
intVar = 5
%>
<P><%= intVar %> + <%= intVar %> = <%= intVar + intVar
%></P>
<HR>
<H3>String Manipulation</H3>
<%
'Declare variable.
Dim strVar
'Assign the variable a string value.
strVar = "Jemearl"
%>
<P>This example was done by <%= strVar + " Smith" %></P>
<HR>
<H3>Boolean Manipulation</H3>
<%
'Declare variable.
Dim blnVar
'Assign the variable a Boolean value.
blnVar = true
'Output message based on value.
If (blnVar) Then
Response.Write "<P>The Boolean value is True.</P>"
Else
Response.Write "<P>The Boolean value is False.</P>"
End If
%>
<HR>
<H3>Date and Time</H3>
<%
'Declare variable.
Dim dtmVar
'Assign the variable a value.
dtmVar = #08 / 27 / 97 5:11:42pm#
%>
<P>The date and time is <%= dtmVar %>
<%
'Set the variable to the web server date and time.
dtmVar = Now()
%>
<P>The <STRONG>system</strong> date and time is <%=
dtmVar %></P>
</BODY>
</HTML>
Bucles
Introducción
Los bucles representan uno de los mecanismos más importantes de control de
flujo en un lenguaje de programación. Las construcciones en bucle proporcionan
la base de cualquier aplicación que deba realizar una tarea de forma repetitiva,
como sumar 1 a una variable, leer un archivo de texto o procesar y enviar un
mensaje de correo electrónico.
Paseo por el código
VBScript y JScript proporcionan varios mecanismos para realizar bucles. Este
ejemplo demuestra las tres instrucciones más comunes para realizar bucles,
For ... Next, Do ... Loop y While ... Wend. Estas tres
instrucciones son ligeramente diferentes y la situación indicará cuál de las
tres es la más indicada. Sin embargo, para este ejemplo, cada tipo de
instrucción de bucle se utiliza para realizar la misma tarea: imprimir un saludo
cinco veces, cada una de ellas con una fuente mayor. En cada instrucción de
bucle se inicializa la variable i y se define la condición de prueba, de
forma que i nunca sea mayor que 5. La variable se incrementa en 1 unidad
en cada iteración del bucle.
<%@ LANGUAGE = VBScript %>
<% Option Explicit %>
<HTML>
<HEAD>
<TITLE>Looping</TITLE>
</HEAD>
<BODY BGCOLOR="White" TOPMARGIN="10" LEFTMARGIN="10">
<!-- Display header. -->
<FONT SIZE="4" FACE="ARIAL, HELVETICA">
<B>Looping with ASP</B></FONT><BR>
<HR SIZE="1" COLOR="#000000">
<!-- Looping with a For loop. -->
<%
Dim intCounter
For intCounter = 1 to 5 %>
<FONT SIZE=<% = intCounter %>>
Hello World with a For Loop!<BR>
</FONT>
<% next %>
<HR>
<!-- Looping with a While...Wend loop. -->
<%
intCounter = 1
While(intCounter < 6) %>
<FONT SIZE=<% = intCounter %>>
Hello World with a While Loop!<BR>
</FONT>
<% intCounter = intCounter + 1 %>
<% wend %>
<HR>
<!-- Looping with a Do...While loop. -->
<%
intCounter = 1
Do While(intCounter < 6) %>
<FONT SIZE=<% =intCounter %>>
Hello World with a Do...While Loop!<BR>
</FONT>
<% intCounter = intCounter+1 %>
<% loop %>
</BODY>
</HTML>
Operadores condicionales
Introducción
Los operadores condicionales, junto con las variables y las construcciones de
bucle, forman los pilares básicos de los lenguajes de programación y, por tanto,
de las aplicaciones. Las aplicaciones basadas en Web que se implementan mediante
secuencias de comandos ASP pueden aprovechar el control de flujo que
proporcionan los operadores condicionales, así como la interactividad y la
sofisticación de HTML.
Paseo por el código
Este ejemplo demuestra las instrucciones If ... Then o if ...
else en VBScript y JScript, así como las instrucciones Select ...
Case y switch ... case, más complejas. La demostración de cada una de
estas instrucciones realiza la misma tarea: enviar una página al explorador
cliente con la fecha y la hora actuales y un saludo. El texto del saludo será
"Buenos días" o "Buenas tardes", dependiendo de si en el reloj del sistema
aparece a.m. o p.m.
<%@ LANGUAGE = VBScript %>
<% Option Explicit %>
<HTML>
<HEAD>
<TITLE>Conditional Operator Sample</TITLE>
</HEAD>
<BODY BGCOLOR="White" TOPMARGIN="10" LEFTMARGIN="10">
<!-- Display header. -->
<FONT SIZE="4" FACE="ARIAL, HELVETICA">
<B>Conditional Operator Sample</B></FONT><BR>
<HR SIZE="1" COLOR="#000000">
<!-- If...Then example -->
<%
Dim varDate
varDate = Date()
%>
<P>The date is: <%= varDate %></P>
<%
'Select Case statement to display a message based on the day of the
month.
Select Case Day(varDate)
Case 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Response.Write("<P>It's the beginning of the month.</P>")
Case 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
Response.Write("<P>It's the middle of the month.</P>")
Case Else
Response.Write("<P>It's the end of the month.</P>")
End Select
%>
<P>The time is: <%= Time %></P>
<%
'Check for AM/PM, and output appropriate message.
If (Right(Time,2)="AM") Then
Response.Write("<P>Good Morning</P>")
Else
Response.Write("<P>Good Evening</P>") End If
%>
</BODY>
</HTML>
Funciones y procedimientos
Introducción
Las funciones y los procedimientos proporcionan un método para evitar tener
que escribir varias veces un mismo bloque de código cada vez que desee realizar
una tarea determinada. Tanto VBScript como JScript permiten llamar a una función
o a un procedimiento desde cualquier lugar de una secuencia de comandos. Este
ejemplo demuestra cómo puede crear y utilizar estas herramientas en secuencias
de comandos ASP.
Si no tiene ninguna función en la página ASP, el motor ASP se limita a
procesar el archivo completo, de principio a fin, cada vez que lo pide un
explorador cliente. Sin embargo, las funciones y los procedimientos se ejecutan
sólo cuando se les llama, no con el resto del código.
En VBScript o JScript las funciones y los procedimientos se indican mediante
la instrucción Function. Además, VBScript establece una diferencia entre
una función que devuelve un valor y otra que no lo hace; la primera de ellas se
indica con la instrucción Sub, que la identifica como una subrutina.
Paseo por el código
Este ejemplo define una función, PrintOutMsg, que toma como parámetros
un mensaje y un número que especifica cuántas veces se escribirá el mensaje en
el explorador cliente mediante el método Response.Write. Para este
ejemplo, la función se limita a devolver al explorador cliente el número de
veces que se imprimió el mensaje.
Observaciones
Es importante tener en cuenta el atributo RUNAT de la etiqueta
<SCRIPT>. SI no se incluye, ASP asumirá que se trata de una secuencia de
comandos del cliente y devolverá el código al explorador para que lo procese.
Esto haría que ASP no reconociera la llamada a la función PrintOutMsg,
devolviera un error y anulara la ejecución.
<%@ LANGUAGE = VBScript %>
<% Option Explicit %>
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
'Define Server Side Script Function.
Function PrintOutMsg(strMsg, intCount)
Dim i
'Output Message count times.
For i = 1 to intCount
Response.Write(strMsg & "<BR>")
Next
'Return number of iterations.
PrintOutMsg = intCount
End Function
</SCRIPT>
<HTML>
<HEAD>
<TITLE>Functions</TITLE>
</HEAD>
<BODY BGCOLOR="White" TOPMARGIN="10" LEFTMARGIN="10">
<!-- Display header. -->
<FONT SIZE="4" FACE="ARIAL, HELVETICA">
<B>Server Side Functions</B></FONT><BR>
<P>
The function "PrintOutMsg" prints out a specific message a set number of
times.<P>
<%
'Store number of times function printed message.
Dim intTimes
'Call function.
intTimes = PrintOutMsg("This is a function test!", 4)
'Output the function return value.
Response.Write("<p>The function printed out the message " &
intTimes & " times.")
%>
</BODY>
</HTML>
Datos introducidos por el usuario en un formulario con POST
Introducción
Probablemente, la forma más básica de interactividad Web es el formulario
HTML. Es importante tener en cuenta que ASP no sustituye a los formularios, sino
que los mejora y hace que sea más fácil implementarlos y administrarlos.
La etiqueta HTML <FORM> especifica qué método utilizará el formulario
para comunicar la información a la secuencia de comandos que la procesará. El
atributo del método POST indica que la información del formulario pasará
a través de una conexión HTTP independiente a la secuencia de comandos o al
programa que la procesará. La secuencia de comandos o el programa pueden
analizar la información y realizar cualquier tarea que sea necesaria, y devolver
el resultado al explorador cliente.
Paseo por el código
Este ejemplo muestra cómo implementar un formulario sencillo mediante el
atributo del método POST de HTTP, así como una de las principales
ventajas de la creación de formularios mediante ASP: la posibilidad de combinar
el formulario y el código de proceso real en un mismo archivo. Este ejemplo crea
un pequeño formulario con dos cuadros de entrada de texto, uno para el nombre
del usuario (fname) y otro para el apellido (lname). Para obtener
el valor de las variables fname y lname en la petición se tiene
acceso a la colección Request.Forms y después se muestran los resultados
en la parte inferior de la página.
La primera vez que se ejecuta la secuencia de comandos no aparece ningún
texto debajo de la línea horizontal. Esto se debe a que no había información
disponible para pasarla a la secuencia de comandos cuando se inició y ASP pasa
por alto las búsquedas de Request.Forms si no existe información. Sin
embargo, si hace clic en el botón Enviar, se cargará de nuevo la página y la
secuencia de comandos ya dispondrá de la información que escribió en los cuadros
de texto.
<%@ Language = VBScript %>
<% Option Explicit %>
<HTML>
<HEAD>
<TITLE>Form Posting</TITLE>
</HEAD>
<BODY BGCOLOR="White" TOPMARGIN="10" LEFTMARGIN="10">
<!-- Display header. -->
<FONT SIZE="4" FACE="ARIAL, HELVETICA">
<B>Form Posting</B></FONT><BR>
<HR>
<P>This page will take the information entered in the form fields, and
use the POST method to send the data to an ASP page.
<FORM NAME=Form1 METHOD=Post ACTION="Form_VBScript.asp">
First Name: <INPUT TYPE=Text NAME=fname><P>
Last Name: <INPUT TYPE=Text NAME=lname><P>
<INPUT TYPE=Submit VALUE="Submit">
</FORM>
<HR>
<% Response.Write Request.form("fname")%> <BR>
<% Response.Write Request.form("lname")%> <BR>
</BODY>
</HTML>
Llenar los campos
Introducción
Puede utilizar formularios para recopilar datos de los usuarios, pero también
puede utilizarlos para mostrar información. Por ejemplo, si un explorador
cliente tiene acceso al motor de búsqueda de su directorio de teléfonos, querrá
mostrar los resultados de la búsqueda. La secuencia de comandos de búsqueda (que
también puede implementar mediante ASP) acepta los datos introducidos por el
usuario, tiene acceso a la base de datos y envía el resultado al formulario de
presentación en una cadena de consulta. Este ejemplo es una demostración
sencilla de cuál sería la apariencia del formulario.
Paseo por el código
Para este ejemplo, los datos se incluyen en el código de la secuencia de
comandos pero, obviamente, la información podría provenir de un formulario
interactivo, de una base de datos o de un archivo de texto. Al iniciarse el
ejemplo se inicializan las variables. Después, crea un formulario con las
etiquetas HTML <FORM> y define cuatro cuadros de texto. Por último, con
los delimitadores de secuencias de comandos del servidor <%= ...
%>, la secuencia de comandos llena los cuadros de texto con los valores
establecidos en la inicialización.
<%@ LANGUAGE = VBScript %>
<% Option Explicit %>
<%
'Create and set variables that will be used in populating 'the form. In a
typical application, these values would come from a database or text
file.
Dim strFirstName
Dim strLastName
Dim strAddress1
Dim strAddress2
Dim blnInfo
strFirstName = "John"
strLastName = "Doe"
strAddress1 = "1 Main Street"
strAddress2 = "Nowhere ZA, 12345"
%>
<HTML>
<HEAD>
<TITLE>PopulateForm Sample</TITLE>
</HEAD>
<BODY BGCOLOR="White" TOPMARGIN="10" LEFTMARGIN="10">
<!-- Display header. -->
<FONT SIZE="4" FACE="ARIAL, HELVETICA">
<B>PopulateForm Sample</B></FONT><BR>
<HR SIZE="1" COLOR="#000000">
<FORM ACTION="">
<!-- Use ASP variables to fill out the form. -->
<P>First Name: <INPUT TYPE="TEXT" NAME="FNAME" VALUE="<%=
strFirstName %>"></P>
<P>Last Name: <INPUT TYPE="TEXT" NAME="LNAME" VALUE="<%=
strLastName %>"></P>
<P>Street: <INPUT TYPE="TEXT" NAME="STREET" VALUE="<%=
strAddress1%>"></P>
<P>City State, Zip: <INPUT TYPE="TEXT" NAME="FNAME" VALUE="<%=
strAddress2 %>"></P>
</BODY>
</HTML>
Conectividad con bases de datos
Si va a crear una aplicación basada en Web, lo más probable es que tenga
formularios. Posiblemente, también tendrá que conectarla de alguna forma con una
base de datos. ActiveX® Data Objects (ADO) proporciona un conjunto de
eficaces herramientas que le permitirán tener acceso a orígenes de datos y
manipularlos.
Los ejemplos de esta sección ilustran las técnicas necesarias para utilizar
ADO de forma efectiva y cómo puede utilizar mejor estas funciones en una
aplicación basada en Web.
- Consulta sencilla: Muestra cómo utilizar ADO y ASP para realizar consultas
sencillas en una base de datos.
- Limitar los resultados de una consulta: Muestra cómo es posible utilizar
ASP y ADO en las secuencias de comandos para limitar el número de filas
devueltas en un conjunto de registros.
- Consulta desplazable: Muestra cómo realizar con ADO una consulta
desplazable multidireccional.
- Agregar o eliminar registros: Presenta las técnicas necesarias para
agregar y eliminar registros de un origen de datos mediante ASP y ADO.
- Actualizar registros: Muestra cómo utilizar ADO en una aplicación para
actualizar los registros existentes.
- Ejecutar procedimientos almacenados: Muestra cómo utilizar ADO con las
secuencias de comandos ASP para ejecutar procedimientos almacenados de la base
de datos.
Para obtener más información acerca de ADO y de las herramientas de acceso a
datos de Microsoft en general, consulte la documentación de Microsoft Data
Access.
Consulta sencilla
Introducción
Aunque una base de datos puede ser un sistema muy complicado y las
herramientas de acceso a datos deben ser eficaces y sensibles, es igualmente
importante que las tareas sencillas de acceso a bases de datos sean fáciles de
realizar. Este ejemplo demuestra cómo ADO proporciona un método sencillo para
realizar este tipo de tareas.
Paseo por el código
El objetivo de esta aplicación de ejemplo es obtener un pequeño conjunto de
registros de una base de datos de Microsoft® Access e imprimir el
resultado. El primer paso consiste en crear una instancia del objeto
Connection mediante el método Server.CreateObject. El ejemplo
utiliza la instancia del objeto Connection para abrir el proveedor de
datos OLE DB y, después, para ejecutar un comando SELECT de SQL y así
obtener todos los registros de la tabla Autores. Para terminar, la secuencia de
comandos recorre la colección del conjunto de registros obtenido y muestra los
resultados. Después se cierran el conjunto de registros y la conexión con el
origen de datos OLE DB.
Importante OLE DB debe estar correctamente configurado
en el servidor para que este ejemplo funcione correctamente.
<%@ LANGUAGE = VBScript %>
<% Option Explicit %>
<HTML>
<HEAD>
<TITLE>Simple ADO Query</TITLE>
</HEAD>
<BODY BGCOLOR="White" topmargin="10" leftmargin="10">
<!-- Display Header -->
<font size="4" face="Arial, Helvetica">
<b>Simple ADO Query with ASP</b></font><br>
<hr size="1" color="#000000">
Contacts within the Authors Database:<br><br>
<%
Dim oConn
Dim oRs
Dim filePath
Dim Index
' Map authors database to physical path
filePath = Server.MapPath("authors.mdb")
' Create ADO Connection Component to connect
' with sample database
Set oConn = Server.CreateObject("ADODB.Connection")
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &
filePath
' Execute a SQL query and store the results
' within recordset
Set oRs = oConn.Execute("SELECT * From Authors")
%>
<TABLE border = 1>
<%
Do while (Not oRs.eof) %>
<tr>
<% For Index=0 to (oRs.fields.count-1) %>
<TD VAlign=top><% = oRs(Index)%></TD>
<% Next %>
</tr>
<% oRs.MoveNext
Loop
%>
</TABLE>
<%
oRs.close
oConn.close
%>
</BODY>
</HTML>
Agregar o eliminar registros
Introducción
Este ejemplo muestra las técnicas que necesita conocer para utilizar ASP y
ADO con el fin de agregar y eliminar registros de una base de datos.
Paseo por el código
Primero se utiliza CreateObject para crear una instancia del objeto
Connection, que a su vez se utiliza para abrir una conexión con el
proveedor de datos OLE DB. Se utiliza de nuevo CreateObject para crear un
objeto Recordset vacío. Se configura la propiedad ActiveConnection
para hacer referencia al nuevo objeto Connection.
Aunque el objeto Recordset de ADO proporciona el método AddNew
para agregar nuevos registros a una base de datos, puede que la escalabilidad
mejore si envía comandos INSERT de SQL directamente al motor de base de datos.
Este ejemplo utiliza el comando Recordset.Execute, junto con la cadena de
comandos apropiada de SQL, para insertar información acerca de un nuevo
autor.
En este momento se crea otra instancia del objeto Recordset y se abre
con otro comando SQL. Se selecciona el registro recién agregado y se elimina,
para lo cual se pasa el comando DELETE de SQL directamente al motor de base de
datos. Por último, finaliza la secuencia de comandos.
Importante OLE DB debe estar correctamente configurado
en el servidor para que este ejemplo funcione correctamente.
<%@ LANGUAGE = VBScript %>
<% Option Explicit %>
<% Response.Expires= -1 %>
<!--METADATA TYPE="typelib"
uuid="00000205-0000-0010-8000-00AA006D2EA4" -->
<HTML>
<HEAD>
<TITLE>Add/Delete Database Sample</TITLE>
</HEAD>
<BODY BGCOLOR="White" topmargin="10" leftmargin="10">
<!-- Display Header -->
<font size="4" face="Arial, Helvetica">
<b>Add/Delete Database Sample</b></font><br>
<hr size="1" color="#000000">
<%
Dim oConn
Dim oRs
Dim filePath
' Map authors database to physical path
filePath = Server.MapPath("authors.mdb")
' Create ADO Connection Component to connect with sample database
Set oConn = Server.CreateObject("ADODB.Connection")
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &
filePath
' To add, delete and update recordset, it is recommended to use
' direct SQL statement instead of ADO methods.
oConn.Execute "insert into authors (author, YearBorn) values ('Paul Enfield',
1967)"
' Output Result
Set oRs = oConn.Execute (" select * from authors where Author= 'Paul Enfield'
and YearBorn =1967 " )
Response.Write("<p>Inserted Author: " & oRs("Author") & ","
& oRs("YearBorn"))
' Close Recordset
oRs.Close
Set oRs= Nothing
' Delete the inserted record
oConn.Execute "Delete From authors where author='Paul Enfield' and YearBorn =
1967 "
' Output Status Result
Response.Write("<p>Deleted Author: Paul Enfield, 1967")
%>
</BODY>
</HTML>
Actualizar registros
Introducción
Este ejemplo muestra cómo utilizar ADO en una aplicación para actualizar los
registros existentes.
Paseo por el código
Primero se utiliza CreateObject para crear una instancia del objeto
Connection, que a su vez se utiliza para abrir una conexión con el
proveedor de datos OLE DB. Se utiliza de nuevo CreateObject para crear un
objeto Recordset vacío. Se configura la propiedad ActiveConnection
para hacer referencia al nuevo objeto Connection.
Después se configura el nuevo conjunto de registros. El método
Recordset.Execute utiliza como parámetro una cadena de comandos SQL. Este
ejemplo utiliza una cadena de comandos UPDATE de SQL para realizar la
actualización en los registros adecuados de la base de datos.
<%@ LANGUAGE = VBScript %>
<% Option Explicit %>
<!--METADATA TYPE="typelib"
uuid="00000205-0000-0010-8000-00AA006D2EA4" -->
<HTML>
<HEAD>
<TITLE>Update Database</TITLE>
</HEAD>
<BODY BGCOLOR="White" topmargin="10" leftmargin="10">
<!-- Display Header -->
<font size="4" face="Arial, Helvetica">
<b>Update Database</b></font><br>
<hr size="1" color="#000000">
<%
Dim oConn ' object for ADODB.Connection obj
Dim oRs ' object for output recordset object
Dim filePath ' Directory of authors.mdb file
' Map authors database to physical path
filePath = Server.MapPath("authors.mdb")
' Create ADO Connection Component to connect with sample database
Set oConn = Server.CreateObject("ADODB.Connection")
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &
filePath
' To add, delete and update recordset, it is recommended to use
' direct SQL statement instead of ADO methods.
oConn.Execute "Update Authors Set Author ='Scott Clinton'" _
& "where Author='Scott Guthrie' "
Set oRs = oConn.Execute ( "select * from Authors where author" _
& "= 'Scott Clinton'" )
%>
Changed Author: <%= oRs("Author") %>, <%= oRs("Yearborn") %>
<P>
<%
oConn.Execute "Update Authors Set Author ='Scott Guthrie'" _
& "where Author='Scott Clinton' "
Set oRs = oConn.Execute ( "select * from Authors where author" _
& "= 'Scott Guthrie'" )
%>
Changed Author: <%= oRs("Author") %>, <%= oRs("Yearborn") %>
</BODY>
</HTML>
MapPath
El método MapPath asigna al directorio físico correspondiente del
servidor la ruta virtual o relativa especificada.
Sintaxis
Server.MapPath( Ruta )
Parámetros
Ruta
Especifica la ruta virtual o relativa que se asignará a un directorio físico.
Si Ruta comienza con una barra diagonal (/) o con una barra diagonal
inversa (\), el método MapPath devuelve la ruta como si Ruta fuera
una ruta virtual completa. Si Ruta no comienza con una barra diagonal, el
método MapPath devuelve una ruta relativa al directorio del archivo .asp
que se procesa.
Observaciones
El método MapPath no comprueba si la ruta que devuelve existe en el
servidor o si es válida.
Como el método MapPath asigna la ruta independientemente de si los
directorios especificados existen o no, puede utilizarlo para asignar una ruta a
una estructura física de directorios y, después, pasarla a un componente que
cree en el servidor el directorio o el archivo especificado.
Puede utilizar la sintaxis de ruta relativa para el parámetro Ruta si
el valor de la propiedad AspEnableParentPaths es TRUE (que es el valor
predeterminado). Si le preocupa permitir que las secuencias de comandos tengan
acceso a la estructura física de directorios, puede deshabilitar esta
característica si asigna el valor FALSE a la propiedad
AspEnableParentPaths. Para ello puede utilizar el complemento Servicios
de Internet Information Server o una secuencia de comandos.
Ejemplo
Para los siguientes ejemplos, el archivo data.txt se encuentra en el
directorio C:\Inetpub\Wwwroot\Script, al igual que el archivo test.asp, que
contiene las siguientes secuencias de comandos. El directorio C:\Inetpub\Wwwroot
se establece como directorio particular del servidor.
El siguiente ejemplo utiliza la variable de servidor PATH_INFO para asignar
la ruta física al archivo actual. La siguiente secuencia de comandos
<%=
server.mappath(Request.ServerVariables("PATH_INFO"))%><BR>
produce el resultado
c:\inetpub\wwwroot\script\test.asp<BR>
Como los parámetros de la ruta de los siguientes ejemplos no empiezan con un
carácter de barra diagonal, se asignan de forma relativa al directorio actual,
en este caso C:\Inetpub\Wwwroot\Script. Las siguientes secuencias de
comandos
<%= server.mappath("data.txt")%><BR>
<%= server.mappath("script/data.txt")%><BR>
producen el siguiente resultado
c:\inetpub\wwwroot\script\data.txt<BR>
c:\inetpub\wwwroot\script\script\data.txt<BR>
Los dos ejemplos siguientes utilizan el carácter de barra diagonal para
especificar que la ruta que se obtiene debe buscarse como ruta virtual completa
del servidor. Las siguientes secuencias de comandos
<%= server.mappath("/script/data.txt")%><BR>
<%= server.mappath("\script")%><BR>
producen el siguiente resultado
c:\inetpub\wwwroot\script\data.txt<BR>
c:\inetpub\wwwroot\script<BR>
Los siguientes ejemplos muestran cómo puede utilizar una barra diagonal (/) o
una barra diagonal inversa (\) para obtener la ruta física al directorio
particular. Las siguientes secuencias de comandos
<%= server.mappath("/")%><BR>
<%= server.mappath("\")%><BR>
producen el siguiente resultado
c:\inetpub\wwwroot<BR>
c:\inetpub\wwwroot<BR>
El siguiente documento es un manual de ASP, trata los principales comandos de
ASP, desde lo mas sencillo o lo intermedio, comandos y utilidades basicas para
el desarrollo de paginas Web interactivas, haciendo uso del Microsoft Internet
Information Service.
Dicho manual fue tomado de los principales puntos de la
ayuda de Windows 2000 Professional. P.P/p.p.
Trabajo enviado por:
ppadron@telcel.net.ve
Volver
Arriba