Preguntas Frecuentes sobre ASP y Bases de Datos


1.-Declaración del lenguaje
2.-Bloques de código y Comentarios
3.-Estructura de una página ASP
4.-Entrada y Salida

    4.1-Response

    4.2-Response.Write

    4.3-Response.Redirect

    4.4-Request

5.-Bases de datos

    5.1-Declaración del driver de la base de datos

    5.2-Operaciones con la base de datos

6.-Objeto CDONTS para uso de Formularios
    6.1-Instrucciones necesarias en la creación y envio de mensajes usando CDONTS
    6.2-Tabla de Referencia de atributos del Objeto CDONTS
    6.3-Envio de mensaje con archivo adjunto
    6.4-Ejemplo de uso del CDONTS en el envío de una forma

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&acute;s es posible mezclar bloques ASP con etiquetas de HTML</I><BR>
<%
Response.Write("Aunque este es todav&iacute;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&aacute;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.