Preguntas
Frecuentes sobre ASP y Bases de Datos

1.-Declaración
del lenguaje
Como ocurre en otros lenguajes de programación, en ASP existe
una sentencia de declaración opcional del lenguaje a utilizar.
<%@
LANGUAGE="VBScript" %>
Esta
declaración se coloca al principio del archivo, antes de cualquier
otra expresión.
2.-Bloques
de código y Comentarios
En páginas ASP, para introducir bloques de sentencias se deben
escribir los símbolos reservados:
<%
{sentencias} %>
Donde sentencias
pueden ser una o varias expresiones del lenguaje, como se muestra en
el siguiente ejemplo:
<%
Request("param")
Response.Write(Now)
while not cond do
rem do nothing
loop
%>
En este
punto queremos llamar la atención del usuario sobre el hecho
de que las sentencias en VBScript no se separanpor punto y coma (;).
Los comentarios
de código VBScript se especifican mediante la palabra reservada
rem o con el carácter comilla simple (') y tienen un ámbito
de una línea. Por ejemplo:
<%
rem Esto es un comentario
' que ocupa varias
rem líneas
%>
En cambio,
un ejemplo mal declarado sería:
<%
rem Esto es un comentario
pero esto ya no lo es, así que el procesador de ASP
lo interpretará como código, y dará error
%>

3.-Estructura
de una página ASP
Vamos a ver a continuación, que aspecto tiene un archivo de texto
que contiene código ASP y que genera como salida, un documento
HTML, es decir, una página Web.
<%@
LANGUAGE="VBScript" %>
<%
rem Declaración de variables y funciones
rem como por ejemplo, inicializar drivers de bases de datos,
rem o redireccionar a otros documentos
%>
<HTML>
<HEAD>
<TITLE>Principal</TITLE>
</HEAD>
<BODY>
<%
rem Este texto se ve en el documento cuando lo abrimos
Response.Write("Hola Mundo<BR>")
Response.Write("<B>Tambien podemos ingresar tags HTML</B><BR>")
%>
<I>Adem´s es posible mezclar bloques ASP con etiquetas
de HTML</I><BR>
<%
Response.Write("Aunque este es todavía un ejemplo muy
sencillo<BR>")
Response.Write("y con ninguna interactividad...")
%>
</BODY>
</HTML>

4.-Entrada
y Salida
4.1-Response
Como su nombre indica, la sentencia Response sirve para enviar respuestas
(información de salida) al documento HTML que se visualizará
en el navegador, para redireccionar a otros recursos, etc.

4.2-Response.Write
Como sabemos para escribir texto en el documento que se pretende visualizar
se debe escribir:
<%
Response.Write({cadena})
%>
Una cadena
es cualquier combinación de caracteres ASCII, quitando la comilla
doble. Si queremos que aparezca este símbolo debemos introducirla
dos veces (""). Veamos algunos ejemplos:
<%@
LANGUAGE="VBScript" %>
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<%
Response.Write("Esta página genera todas las etiquetas
de un documento<BR>")
Response.Write("HTML normal y corriente...")
%>
</BODY>
<HTML>
Si además
queremos escribir el valor de alguna variable:
<%@
LANGUAGE="VBScript" %>
<%
hoy = Date
%>
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<%
Response.Write("Hoy es:" & hoy)
%>
</BODY>
<HTML>

4.3-Response.Redirect
En ocasiones puede ser útil tener una página que tras
un determinado tratamiento de algún dato obtenido del cliente,
llame a otra página, o simplemente como método de actualización
de enlaces antiguos. En cualquiera de estos casos se utiliza la sentencia
Response.Redirect:
<%@
LANGUAGE="VBScript" %>
<%
rem Este enlace ha quedado obsoleto, redireccionar a...
Response.Redirect("http://www.helpcenter.com.mx/")
rem Lo que hay por debajo de este punto: tags HTML, código
ASP
rem no llega a ser interpretado por el procesador de ASP jamás
%>
La utilidad
del código queda patente si tenemos en cuenta que con la dinamicidad
de la red, frecuentemente se dan modificaciones en las localizaciones
de los recursos. Veamos ahora ejemplo de redireccionamiento para tratamiento
de datos, y de paso anticipamos algo de lo que veremos en el siguiente
punto:
<%@
LANGUAGE="VBScript" %>
<%
opcion = Request("param_opcion")
Select Case opcion
Case 1: Response.Redirect("pag1.html")
Case 2: Response.Redirect("pag2.html")
Case 3: Response.Redirect("pag3.html")
End Select
%>

4.4-Request
La sentencia Request tiene como misión obtener los valores
de los parámetros que pueden pasárseles a las páginas
ASP. La forma de pasar pares atributo-valor (parámetro-valor)
es la siguiente:
<%@
LANGUAGE="VBScript" %>
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<!-- A continuación hay un enlace a una página ASP
con parámetros -->
<A HREF="guardar.asp?nombre=Jose&apellidos=Garcia%20Perez&dni=12345678">Guardar
Datos</A>
</BODY>
</HTML>
Donde
podemos apreciar que con los datos introducidos por el cliente (en
un formulario, o por otros medios), llamamos a una página de
tratamiento de esos datos. Los parámetros que se pasan son:
Nombre:
Parámetro Valor
nombre: Jose
apellidos: Garcia Perez
dni: 12345678
Los carácteres
%20 que muestra el ejemplo entre los apellidos hacen referencia al
caracter espacio en codificación UTP.
También
es posible pasar parámetros a otra página a partir de
campos de un formulario. En este caso, los nombres de los parámetros
vienen dados por los nombres que hay que asignar a dichos campos,
y la página que los trata o recoge se especifica con el atributo
ACTION de la etiqueta FORM.
<%@
LANGUAGE="VBScript" %>
<HTML>
<HEAD>
<TITLE><TITLE>
</HEAD>
<BODY>
<FORM
METHOD="POST" ACTION="guardar.asp">
<INPUT TYPE="TEXT" NAME="nombre">
<INPUT TYPE="TEXT" NAME="apellidos">
<INPUT TYPE="TEXT" NAME="dni">
<INPUT TYPE="SUBMIT">
</FORM>
</BODY>
</HTML>
Con este
código el procesador de ASP se encarga de construir internamente
una llamada igual a la vista en el ejemplo anterior. La manera general
de especificar la llamada a una página con parámetros,
por lo tanto, es:
{nombre_pagina}.asp?{nom_var1}={valor1}[&{nom_var2}={valor2}...]
Lo que
está encerrado entre llaves puede ser prácticamente,
cualquier cadena válida de caracteres y lo que está
escrito en negrita debe aparecer tal como está.

5.-Bases
de datos
5.1-Declarar
el driver de base de datos
Sin duda alguna, lo más importante que hay que saber respecto
al manejo de bases de datos en ASP (presupuestos unos ligeros conocimientos
en SQL y Access), es la inicialización del
driver de base de datos. Existen dos maneras de hacerlo, a saber:
La primera
consiste en declarar un DSN de Sistema a través de ODBC, para
lo cual se requiere que envie por correo electrónico a helpcenter@att.net.mx
los datos del DSN que necesita dar de alta (nombre del DSN, ubicación
de la base de datos, username y password si lo requiere.
Esta
primera opción es muy rápida de configurar, sin embargo,
es muy frecuente desarrollar las páginas en una máquina
y ponerlas en otra (un servidor propiamente dicho), por lo que resulta
lioso tener un DSN para cada base de datos del sistema.
La segunda
opción consiste en crear una conexión a base de datos
mediante ADO (sin DSN) y es mucho más flexible, puesto que
si cambia de sistema, no deberá crear un nuevo DSN. La declaración
del driver debe hacerse antes de que se escriba algo en el documento
HTML de salida, y es tan simple como esto:
<%@
LANGUAGE="VBScript" %>
<%
' Declaramos el objeto de conexión a la base de datos
Set ConexionBD = Server.CreateObject("ADOdb.Connection")
' Abrimos el objeto con el driver específico
ConexionBD.Open "DRIVER={Microsoft Access Driver (*.mdb)}; "
& "DBQ=" & Server.Mappath("/data/bd.mdb")
%>
<HTML>
Vemos
que en la sentencia ConexionBD.Open, en la parte DBQ=" tenemos
lo siguiente Server.Mappath(), que es una variable que devuelve la
ruta local del directorio raíz del servidor Web, y el parámetro
que le pasamos hace referencia a la situación de la base de
datos dentro de la jerarquía del servidor.
Con esto
hemos cumplido con el primer paso, definir el driver para utilizar
la base de datos, pero todavía no podemos realizar ninguna
consulta ni modificación. Para ello tenemos que definir lo
que en Basic se conoce como RecordSet, que no es más que una
agrupación lógica de registros (algo parecido a una
variable de tabla lógica).

5.2-Realizar
operaciones con la base de datos
Para ver qué es un RecordSet y para que sirve volvamos otra
vez al ejemplo:
<%@
LANGUAGE="VBScript" %>
<%
' Declaramos el objeto de conexión a la base de datos
Set ConexionBD = Server.CreateObject("ADOdb.Connection")
' Abrimos el objeto con el driver específico
ConexionBD.Open "DRIVER={Microsoft Access Driver (*.mdb)}; "
& "DBQ=" & Server.Mappath("/data/bd.mdb")
Set RS = ConexionBD.Execute("select * from clientes")
%>
<HTML>
Con esto
conseguimos que el objeto RS (RecordSet) esté enlazado con
el resultado de una consulta de la tabla clientes de la base de datos
data.mdb, es decir, que contenga los valores, de alguna manera.
Pero
todavía no tenemos resultados visibles de que la operación
se haya completado con éxito. Si hemos fallado en algo, en
cambio, es muy probable que tengamos una poco prometedora página
en nuestro visualizador con algún tipo de error. Si ponemos
el código de arriba con algunos aditamentos podremos observar
los datos de esa base de datos, en el navegador y en tiempo real.
<%@
LANGUAGE="VBScript" %>
<%
' Declaramos el objeto de conexión a la base de datos
Set ConexionBD = Server.CreateObject("ADOdb.Connection")
' Abrimos el objeto con el driver específico
ConexionBD.Open "DRIVER={Microsoft Access Driver (*.mdb)}; "
& "DBQ=" & Server.Mappath("/data/bd.mdb")
Set RS = ConexionBD.Execute("select * from clientes")
%>
<HTML>
<HEAD>
<TITLE>Consulta de Clientes</TITLE>
</HEAD>
<BODY>
<%
' Como la bd no está vacía hacemos un tratamiento hasta
que no queden registros...
Do while not RS.EOF
' Escribimos en la salida los datos que nos interesa
Response.Write("<P>Cliente: " & RS("empresa")
& "<BR>")
Response.Write("Nombre: " & RS("nombre") &
"</P>")
' nos movemos al siguiente registro
RS.MoveNext
Loop
%>
</BODY>
</HTML>
Es importante
mencionar que las bases de datos creadas en versiones previas a Microsoft
Access 2000 pueden presentar inconsistencias, por lo que se recomienda
utilizar solamente la versión 2000 o superior.

6.-Objeto
CDONTS para uso de Formularios
CDONTS (Collaboration Data Objects for NT) es un componente que permite
enviar mensajes de correo electrónico desde las páginas
ASP. Este componente se incluye en todos los sitios hospedados en la
plataforma AT&T Web Hosting Servidor Virtual Windows 2000. Entre
algunas de sus características está la posibilidad de
enviar mensajes en formato de texto o bien HTML.
6.1-Instrucciones
necesarias en la creación y envio de mensajes usando CDONTS
<%@
LANGUAGE="VBScript" %>
<%
rem Primero creamos el objeto
Set
Mailer = Server.CreateObject("CDONTS.NewMail")
rem Definimos los atributos necesarios del mensaje
Mailer.From = "abgarza@att.net.mx"
Mailer.To = "helpcenter@att.net.mx"
Mailer.Subject = "Mensaje de Prueba"
Mailer.Body = "Este es un mensaje enviado desde una pagina ASP
con CDONTS"
rem Envio del mensaje
Mailer.Send
%>

6.2-Tabla
de Referencia de atributos del Objeto CDONTS
Existen algunos atributos opcionales que permiten cambiar el formato
entre texto plano y HTML, cambiar la prioridad del mensaje, asignar
la codificación MIME o incluso adjuntar algún archivo.
Aquí se muestra una tabla de todos los atributos para uso del
CDONTS.
Atributo |
Ejemplo |
Descripcion |
Mailer.To |
Mailer.To = "helpcenter@att.net.mx" |
El campo "To"o Destinatario de un email. |
Mailer.From |
Mailer.From = "abgarza@att.net.mx" |
El campo "From" o Remitente de un email. |
Mailer.CC |
Mailer.CC = "equipo@att.net.mx" |
El campo "CC" o Carbon Copy de un email. |
Mailer.BCC |
Mailer.BCC = "mijefe@att.net.mx" |
El campo "BCC" o Blind Carbon Copy de un email. El destinatario
no puede ver este campo. |
Mailer.Subject |
Mailer.Subject = "Mensaje de Prueba" |
El campo "Subject" o asunto del mensaje. |
Mailer.Body |
Mailer.Body = "Hola esto es una prueba" |
El campo "Body" o Cuerpo del Mensaje. |
Mailer.BodyFormat |
Mailer.BodyFormat = {1|0} |
Para enviar Texto Plano:
BodyFormat = 1
Para enviar HTML:
BodyFormat = 0 |
Mailer.MailFormat |
Mailer.MailFormat = {1|0} |
MailFormat = 1
Enviará el mensaje en texto plano.
MailFormat = 0
Enviará el mensaje en formato MIME, actúa como
complemento del atributo BodyFormat.
|
Mailer.AttachFile |
Mailer.AttachFile ("/imagenes/foto.jpg") |
Adjunta el archivo especificado en el email. Ver sección
6.3 para más información. |
Mailer.Send |
Mailer.Send |
Esta instrucción ejecuta el envío del mensaje desde
el server. |

6.3-Envio
de mensaje con archivo adjunto
Una de las propiedades más importantes que tienen los mensajes
enviados mediante CDONTS es la capacidad para enviar archivos adjuntos.
Es importante mencionar que el archivo a adjuntar debe estar en el
server (o sea que si alguno de sus visitantes desea adjuntar algún
archivo primero debe subirlo al server). Se usa de la siguiente manera:
Mailer.AttachFile("ruta_del_archivo_en_el_server")
A continuación
se muestra un script de ejemplo que envía un archivo adjunto
por e-mail. Para este ejemplo vamos a suponer que el archivo a adjuntar
"foto.jpg" ya esta en el server bajo la carpeta "/imagenes",
veamos:
<%
Set Mailer = Server.CreateObject("CDONTS.NewMail")
Mailer.From = "abgarza@att.net.mx"
Mailer.To = "helpcenter@att.net.mx"
Mailer.Subject = "Mensaje de Prueba"
Mailer.Body = "Ver archivo adjunto"
Mailer.AttachFile Server.MapPath("/imagenes/foto.jpg")
Mailer.Send
set Mailer = nothing
%>
Debido
a que es necesario subir el archivo que se desea adjuntar en el server
antes de enviarlo a la direccion de correo electrónico recomendamos
utilizar una utilería para subir archivos al server. Existe
una manera de implementar un File Upload, mediante código 100%
ASP y VBScript. Puede accesar el siguiente URL para encontrar más
información al respecto:
http://www.aspfacil.com/articulos/07092001.asp

6.4-Ejemplo
de uso del CDONTS en el envío de una forma
Pero si no desea complicarse la existencia con tantos atributos
para el envío de formularios, no se preocupe. En esta sección
se explica la manera en que se puede incorporar un formulario web
en su sitio para recibir los resultados en alguna dirección
de correo electrónico usando CDONTS utilizando un script existente.
Paso
1.
Primero deberá descargar el archivo "forma.zip"
haciendo click aquí. Al descargar
y descomprimir este archivo, se percatará de que éste
consta de una página HTML con un formulario y una página
ASP (Active Server Page) la cual se encargará de procesar y
enviar los datos. Estos dos archivos se denominan "forma.html"
y "forma.asp" respectivamente.
Paso
2.
Para recibir en su dirección de correo electrónico la
información del formulario, es necesario que mediante un programa
editor de texto abra el archivo "forma.asp"
y modifique la tercer línea del código con su propia
dirección de correo electrónico, esto en la siguiente
variable:
var_destinatario
= "cuenta@dominio.com"
Paso
3.
Una vez habiendo modificado esta línea de código, suba
ambas páginas ("forma.html" y "forma.asp")
a su servidor mediante FTP en formato ASCII y compruebe su funcionamiento
accesando esa página desde su navegador en la ruta correspondiente.
