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
filescommon filessystemadomsado15.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 | {00000205-0000-0010-8000-00AA006D2EA4} |
Biblioteca de Microsoft CDO 1.2 para Windows | {0E064ADD-9D99-11D0-ABE5-00AA0064D470} |
Biblioteca MSWC de objetos Advertisement | {090ACFA1-1580-11D1-8AC0-00C0F00910F9} |
Biblioteca MSWC de objetos de registro de | {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 |
Microsoft(r) Access | Provider=Microsoft.Jet.OLEDB.4.0;Data |
Microsoft SQL | Provider=SQLOLEDB.1;Data Source=ruta de acceso |
Oracle | Provider=MSDAORA.1;Data Source=ruta de acceso |
Microsoft Indexing Service | Provider=MSIDXS.1;Data Source=ruta de acceso |
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 | Cadena de conexión |
Microsoft Access | Driver={Microsoft |
SQL Server | DRIVER={SQL |
Oracle | DRIVER={Microsoft ODBC for Oracle};SERVER=ruta de acceso al |
Microsoft Excel | Driver={Microsoft |
Microsoft Excel | Driver={Microsoft |
Paradox | Driver={Microsoft Paradox Driver |
Texto | Driver={Microsoft Text Driver |
Microsoft Visual | Driver={Microsoft Visual FoxPro |
Microsoft Visual | Driver={Microsoft Visual FoxPro |
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:DatosMercadoVentasPrevistas.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:DatosEmpleados.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:DatosEmpleados.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:DatosEmpleados.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:DatosEmpleados.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:DatosEmpleados.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:PedidosClientesPedidos.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álogoSemillas.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 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 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 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 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 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 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 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 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 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:InetpubWwwrootScript, al igual
que el archivo test.asp, que
contiene las siguientes secuencias de comandos. El directorio
C:InetpubWwwroot 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:inetpubwwwrootscripttest.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:InetpubWwwrootScript. Las siguientes secuencias de
comandos
<%=
server.mappath("data.txt")%><BR>
<%=
server.mappath("script/data.txt")%><BR>
producen el siguiente resultado
c:inetpubwwwrootscriptdata.txt<BR>
c:inetpubwwwrootscriptscriptdata.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:inetpubwwwrootscriptdata.txt<BR>
c:inetpubwwwrootscript<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:inetpubwwwroot<BR>
c:inetpubwwwroot<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.
Autor:
ppadron[arroba]telcel.net.ve