""
Tutorial de ASP "
El objeto Application se utiliza para compartir
información entre todos los usuarios de una aplicación (entendemos por una
aplicación ASP todos los archivos .asp de un directorio virtual y sus
subdirectorios. Como varios usuarios pueden compartir un objeto Application,
existen los métodos Lock y Unlock para asegurar la integridad del
mismo (varios usuarios no puedan modificar una misma propiedad al mismo tiempo).
Lock
El método Lock asegura que sólo un cliente puede
modificar o tener acceso a las variables de Application al mismo tiempo.
Sintaxis
ApplicationLock
Unlock
El método Unlock desbloquea el objeto Application para que pueda ser
modificado por otro cliente después de haberse bloqueado mediante el método
Lock. Si no se llama a este método de forma explícita, el servidor Web desbloquea el objeto
Application cuando el archivo .asp termina o transcurre su tiempo de espera.
Sintaxis
Application.Unlock
Ejemplo
|
<%
Application.Lock |
|
Application("visitas")
= Application("visitas")+1 |
|
Application.Unlock %> |
|
Eres el visitante numero <%=
Application("visitas") %> |
En el ejemplo anterior el método Lock impide que
más de un cliente tenga acceso a la variable Visitas al mismo tiempo. Si la
aplicación no se hubiera bloqueado, dos clientes podrían intentar incrementar
simultáneamente el valor de la variable Visitas. El método Unlock libera el
objeto bloqueado de forma que el próximo cliente puede incrementar la variable.
Nota Importante:
En el objeto Application pueden almacenarse matrices, pero
estas son almacenadas como un objeto, es decir, no
podemos almacenar o recuperar un solo elemento de la matriz, si no que
cargaremos o recuperaremos la variable con la matriz completa
Ejemplo
|
<%Dim parametros(2) |
con estas instrucciones almacenaríamos TODA la
matriz en la variable de aplicación "Param"
Para recuperar los valores de la matriz primero
recuperamos esta en una variable normal
|
<%Apliparam=Application("Param")%> |
Ahora podremos operar con los valores de la
tabla en las variables Apliparam(0), Apliparam(1) y Apliparam(2)
El Objeto Request recupera los valores que el
cliente pasa al servidor durante una petición HTTP.
Dependiendo de la forma en que enviemos los
datos al servidor tendremos que utilizar una u otra de las diversas colecciones
del objeto Request. Las mas típicas son:
· FORM recupera
datos enviados desde un formulario mediante el método POST.
· QUERYSTRING recupera datos
enviados como cadena de consulta HTTP.
· COOKIES recupera los
valores de las Cookies.
Sintaxis General:
Request.coleccion(elemento)
Ejemplos:
|
FORM |
Supongamos que enviamos la información desde el
siguiente formulario:
|
<form method="POST" action="recibir.asp"> |
|
<p>Nombre: <input type="text" name="Nombre" size="20"></p> |
|
<p>Nacionalidad: <input type="text" name="Nacionalidad" size="20"></p> |
|
<p><input type="submit" value="Enviar" name="Enviar"></p> |
|
</form> |
En nuestra página
"recibir.asp" podriamos usar la siguiente secuencia:
|
Hola Sr/a <%=request.form("nombre")%>
<br> |
|
Asi que usted es de
nacionalidad <%=request.form("nacionalidad")%> |
Con lo que el resultado seria:
|
Hola Sr/a
Julian |
|
Asi que usted es de
nacionalidad francesa |
|
QUERYSTRING |
Supongamos que enviamos la información en forma
de cadena de consulta (Notar que una cadena de consulta HTTP esta especificada
por las parejas de valores que siguen al signo "?"):
|
<a href="recibir.asp?nombre=Julian&nacionalidad=francesa"> |
En nuestra página "recibir.asp"
podriamos usar la siguiente secuencia:
|
Hola Sr/a <%=request.querystring("nombre")%>
<br> |
|
Asi que usted es de
nacionalidad <%=request.querystring("nacionalidad")%> |
Con lo que el resultado seria:
|
Hola Sr/a
Julian |
|
Asi que usted es de
nacionalidad francesa |
|
COOKIES |
Las cookies son el mecanismo que nos permite
guardar información relativa a un usuario a lo largo de sus distintos accesos a
nuestras páginas.
Nos permite integrar funcionalidades como:
o
Personalización
de opciones de cliente
o
Personalización
en función de las características del cliente
o
Cestas de
compra
o
Etc.
Las cookies se almacenan en los equipos de los
clientes, esto hay que tenerlo en cuenta por las posibles faltas de integridad
de datos que pudieran ocurrir.
ASP implementa la posibilidad de usar cookies
para crear o destruir información que se almacena en los equipos de los
clientes.
Las cookies se transmiten en las cabeceras
cuando se realiza la comunicación http y es el navegador el encargado de
almacenarlas.
Las cookies se implementan como una colección y
se usan mediante los objetos integrados Request y Response.
Tiempo de vida de una cookie
Por defecto una cookie tiene un ámbito de
sesión, es decir, tiene de vida el tiempo en que esta activo el navegador.
Podemos variar el tiempo de vida de una cookie
mediante el atributo expires
Sintaxis:
Response.Cookies(cookie)[(clave)|.atributo] =
valor
Request.Cookies(cookie)(clave)
Ejemplos:
Enviar una cookie simple
|
<%
Response.cookies("color")="morado" %> |
Recuperar el valor de esa cookie
|
<% ColorFavorito=Request.cookies("color")%> |
Enviar una cookie con claves
|
<% Response.cookies("color")("fondo")="morado"%> |
|
<% Response.cookies("color")("texto")="blanco"%> |
Recuperar una cookie con claves
|
<% Request.cookies("color")("fondo")%> Nos recuperaría el valor morado |
|
<%
Request.cookies("color")("texto") %> Nos recuperaría el valor blanco |
Nota: Cuando usamos Response para escribir
una cookie, si esta ya existía se sobreescribe.
Atributos:
|
Expires |
Establece el día de caducidad de una cookie
Ejemplos:
Hacer que una cookie caduque inmediatamente
|
<%
Response.cookies(cookie).expires="1/1/1990"%> |
Hacer que una cookie caduque cierto día
|
<%
Response.cookies(cookie).expires="12/12/2000"%> |
Los componentes ActiveX se han diseñado para que
se ejecuten en el servidor Web como parte de las aplicaciones Web, proporcionan
funcionalidad a las aplicaciones, como el acceso a ficheros, Bases de datos,
etc.
Existen componentes ActiveX para tareas muy
diversas, en esta páginas mostraremos como operar con algunos de los que se
incluyen por defecto en la instalación de ASP.
|
Inserción de
publicidad rotatoria |
|
|
Acceso a ficheros en
el servidor |
|
|
Acceso a ficheros en
el servidor |
|
|
Acceso a bases de
datos |
El componente ADRotator automatiza la rotación
de imágenes de anuncio en una página Web. Cada vez que un cliente abre o
recarga la página este componente presenta una nueva imagen según las
definiciones especificadas en un archivo.
Archivos necesarios:
|
Creación del objeto AdRotator |
|
<% Set
Rotacion=Server.CreateObject("MSWC.AdRotator") %> |
Propiedades:
|
Border |
Permite especificar si los anuncios se presentan
enmarcados.
|
<% objeto.border=tamaño %> |
|
Clickable |
Permite especificar si los anuncios se presentan
como hipervinculos.
|
<% objeto.clickable= True o False %> |
|
TargetFrame |
Permite especificar el marco de destino del
hipervinculo.
|
<% objeto.TargetFrame= nombre del marco
destino %> |
Metodos:
|
GetAdvertisement |
Recupera el siguiente anuncio del fichero
Schedule.
Sintaxis
Objeto.GetAdvertisement (url del fichero Shedule)
El fichero Schedule esta dividido en 2 secciones
separadas por un asterisco "*". La primera sección es la
especifica los parámetros comunes para todas las imágenes que se muestren; la
segunda los ficheros , localizaciones y parametros propios de cada una de las
imagenes.
Sintaxis de la primera sección:
|
REDIRECT |
Especifica la url que se encargara
de hacer la redirección, generalmente una página .asp. |
|
WIDTH |
Ancho en píxel del anuncio |
|
HEIGHT |
Alto en píxel del anuncio |
|
BORDER |
Ancho en píxel del borde del anuncio |
Sintaxis de la segunda sección:
|
Url de la imagen a mostrar |
|
Url de la pagina a redireccionar |
|
Texto alternativo de la imagen |
|
Ponderación de apariciones del anuncio con respecto
del total |
Ejemplo:
|
REDIRECT |
/util/redirect.asp |
|
WIDTH |
300 |
|
HEIGHT |
50 |
|
BORDER |
2 |
|
* |
|
|
/imagenes/logo1.gif |
|
|
http://www.transcontinental.com |
|
|
El viaje de tus sueños |
|
|
20 |
|
|
/imagenes/logo5.jpg |
|
|
http://www.pastelito.fr |
|
|
Dulces de calidad |
|
|
30 |
|
|
<% response.redirect
(request.querystring("url")) %> |
|
<html> |
|
<head><title>Uso de AdRotator</title></head> |
|
<body><h2>Uso de AdRotator</h2> |
|
<% Set Rotacion=Server.CreateObject("MSWC.AdRotator") %> |
|
<%= Rotacion.GetAdvertisement("adrot.txt")
%> |
|
</body> |
|
</html> |
El componente FSO nos permite abrir y crear
ficheros de texto en el servidor.
Este componente consta de 22 métodos, de los
cuales podemos seleccionar 2 que son los que nos van a permitir leer o escribir
en archivos de texto existentes en el servidor o crear dichos archivos.
Para crear un objeto FSO la sintaxis es la misma
que para cualquier otro componente ActiveX
|
<% Set
MiFSO=Server.CreateObject("Scripting.FileSystemObject") %> |
Cuando abrimos o creamos un fichero de texto
mediante FSO este nos devuelve una instancia del objeto TextStream que es la que
representa el archivo físico y con la cual trabajaremos.
Metodos:
|
CreateTextFile |
Crea un archivo físico y devuelve la instancia de TextStream con la cual trabajaremos.
Sintaxis
|
<% Set
MiFichero=MiFSO.CreateTextFile("Nombre
Fichero",Sobreescribir") %> |
|
Nombre Fichero |
Nombre del fichero a
crear. |
|
Sobreescribir |
Admite los valores TRUE
o FALSE, si el fichero ya existe y el valor dado es TRUE se crea de nuevo, si
no , devuelve un error. |
|
OpenTextFile |
Abre un archivo físico y devuelve la instancia de TextStream con la cual
trabajaremos.
Sintaxis
|
<% Set MiFichero=MiFSO.OpenTextFile("Nombre
Fichero",modo,crear") %> |
|
Nombre Fichero |
Nombre del fichero a
abrir. |
|
Modo |
Indica si queremos
abrir el fichero para lectura (1) , para escritura (2) o para
escribir nuevos registros al final del fichero(8) |
|
Crear |
Admite los valores TRUE
o FALSE, si el fichero no existe y el valor dado es TRUE se crea. |
Ejemplo:
Apertura de fichero para lectura:
|
<% Set
MiFichero=MiFSO.OpenTextFile("c:\Fichero_nuevo.txt",1,true") %> |
El objeto TextStream nos sirve para manejar
ficheros de texto en el servidor. La creación de este objeto se realiza a
partir de un objeto FileSystemObject
y gracias a alguno de sus métodos.
Una vez creado, disponemos de un objeto
TextStream que representa un archivo físico abierto, ya sea para lectura o
escritura.
Este objeto dispone de 9 métodos:
Metodos:
|
Close |
Cierra el archivo.
Sintaxis
|
<%
MiFichero.close%> |
|
Read |
Lee y devuelve un numero especifico de caracteres.
Sintaxis
|
<% MiFichero.read(numero de caracteres)
%> |
|
ReadAll |
Lee y devuelve un archivo completo.
Sintaxis
|
<%
MiFichero.ReadAll %> |
|
ReadLine |
Lee y devuelve una línea completa de un archivo de texto.
Sintaxis
|
<%
MiFichero.ReadLine%> |
|
Skip |
Salta un numero determinado de caracteres al leer un archivo.
Sintaxis
|
<% MiFichero.Skip(numero de caracteres)
%> |
|
SkipLine |
Salta una línea al leer un archivo.
Sintaxis
|
<% MiFichero.SkipLine %> |
|
Write |
Escribe una cadena de caracteres en un archivo.
Sintaxis
|
<%
MiFichero.Write("texto_entre_comillas") %> |
|
WriteLine |
Escribe una cadena de caracteres en un archivo añadiendo al final un carácter
de fin de linea.
Sintaxis
|
<%
MiFichero.WriteLine("texto_entre_comillas") %> |
|
WriteBlankLines |
Escribe un numero especifico de caracteres de nueva línea.
Sintaxis
|
<% MiFichero.WriteBlankLines(numero_de_lineas)
%> |
|
<HTML> |
|
<HEAD><TITLE>Ejemplo de FSO y
TextStream</TITLE></HEAD> |
|
<BODY> |
|
<% |
|
Set Mfso=Server.CreateObject("Scripting.FileSystemObject") |
|
Set MArchivo=Mfso.OpenTextFile("c:\fecha.txt",2,true) |
|
MArchivo.writeline
"Hola Mundo, hoy es:" |
|
MArchivo.write date() |
|
MArchivo.close |
|
%> |
|
Creado archivo
en C:\fecha.txt con la fecha de hoy |
|
</BODY> |
|
</HTML> |
Para crear un objeto Browser Capabilities la
sintaxis es la misma que para cualquier otro componente ActiveX
|
<%Set
cliente=Server.CreateObject("MSWC.BrowserType")%> |
Propiedades
|
Descripción |
Propiedad |
|
Soporte de ActiveX |
ActiveXcontrols |
|
Musiquilla de fondo |
Backgroundsounds |
|
Nombre del Navegador |
Browser |
|
Soporte de Cookies |
Cookies |
|
Soporte de Frames |
Frames |
|
Soporte de JScript |
JScript |
|
Plataforma de ejecución |
Platform |
|
Soporte de tablas |
Tables |
|
Soprte de VBScript |
VBScript |
|
Version del Navegador |
Version |
Ejemplo de código mostrando todas las propiedades
|
browsercapabilities.asp |
|
<html> |
Con lo que obtendriamos el siguiente resultado:
|
Soporte de ActiveX |
True |
|
Musiquilla de fondo |
True |
|
Nombre del Navegador |
IE |
|
Soporte de Cookies |
True |
|
Soporte de Frames |
True |
|
Soporte de JavaScript |
True |
|
Plataforma de ejecución |
WinNT |
|
Soporte de tablas |
True |
|
Soporte de VBScript |
True |
|
Version del navegador |
5.0 |
Este pequeño ejemplo nos permite saber si un
numero introducido por pantalla es o no primo.
Consta de 2 páginas:
|
Primos.html |
|
<html> |
|
Primos.asp |
|
<%option
explicit%> |
Este código nos va a servir para comprobar el
buen funcionamiento de cualquier formulario que diseñemos.
Dirigiremos la salida de nuestro formulario a la
página vfor.asp y esta nos dará un listado de todos las parejas nombre-valor
recibidas
|
Vfor.asp |
|
<html> |
Ejemplo de código de formulario
|
<form method="POST" action="vfor.asp"> |
|
<p>Nombre: <input type="text" name="Nombre" size="20"></p> |
|
<p>Nacionalidad: <input type="text" name="Nacionalidad" size="20"></p> |
|
<p><input type="submit" value="Enviar" name="Enviar"></p> |
|
</form> |
ascii.asp
|
<html> |
Nota importante: si deseamos redirigir el
navegador a otra página no debemos de escribiri antes nada en pantalla, ni
siquiera los tag de html <html><head><body>... etc.
redirect.asp
|
<% %> |
utilizaremos para llevar el control de visitas
una variable del objeto application.
Esta variable la inicializaremos a cero en global.asa cuando iniciemos la aplicación
(application_onstart) y la iremos incrementando en uno cada vez que un nuevo
visitante entre en la aplicación , capturaremos esta entrada en el evento
session_onstart tambien en globla asa.
Luego simplemente en nuestras páginas
mostraremos el numero almacenado en la variable de aplicación.
global.asa
|
<SCRIPT LANGUAGE="VBScript"
RUNAT="Server"> |
|
<html> ........ Eres el
visitante nº :<%=application("visitas")%> desde el dia
<%=application("fecha")%> ..... </html> |
Utilizaremos para llevar el control de
visitantes activos una variable del objeto application.
Esta variable la inicializaremos a cero en global.asa cuando
iniciemos la aplicación (application_onstart) y la iremos incrementando en uno
cada vez que un nuevo visitante entre en la aplicación , capturaremos esta
entrada en el evento session_onstart tambien en globla asa.
Reduciremos en uno el numero de vistante cada
vez que uno de ellos abandone nuestra aplicación, esto lo sabremos gracias al
evento session_onend
Luego simplemente en nuestras páginas
mostraremos el numero almacenado en la variable de aplicación.
global.asa
|
<SCRIPT LANGUAGE="VBScript"
RUNAT="Server"> |
mipagina.asp
|
<html> ........ Sois
actualmente <%=application("vactivos")%> visitantes
concurrentes ..... </html> |
No se si alguno tendréis alguna vez la necesidad
de imprimir desde un enlace en la página, si es así, aquí tenéis unos ejemplos
de como hacerlo.
Antes de nada, tenemos que averiguar que tipo de
explorador tiene el cliente ( como es "normal", cada uno funciona de
forma distinta).
Si el cliente es Netscape o Explorer 5.x, es
facil solo hay que hacer una llamada a la función print() de Javascript
Ejemplo IE5.x Netscape:
|
<a
href="javascript:print()"><font color="#0000FF">Imprimir |
Si el cliente es Explorer 4.x la
cosa es un poco mas complicada, esta versión hace la impresión por medio de un
componente ActiveX que reside en la maquina del cliente, por lo cual nos toca
hacer una instancia de dicho componente y luego llamarlo
Ejemplo IE4.x:
Declaración del objeto en IE4.x
|
<OBJECT ID="WB" WIDTH="0"
HEIGHT="0"
CLASSID="clsid:8856F961-340A-11D0-A96B-00C04FD705A2"></OBJECT> |
LLamada al objeto declarado:
|
<a
href="#" onclick="vbPrintPage()"><font
color="#0000FF">Imprimir |
Existen varias formas de averiguarlo usando
Javascript, la forma que os muestro a continuación es usando ASP (ya que
estas páginas van sobre ASP, ¿no?).
Esta información la podemos encontrar en
examinando:
|
Request.ServerVariables("HTTP_USER_AGENT") |
Nota: como en IE5.x y Netscape se imprime de la
misma forma, lo que nos interesa averiguar es la excepción, o sea, IE4.x
|
<html> |
No suelo poner ejemplos de javascript, pero esta
utilidad puede venir bien si queremos desactivar el boton derecho del raton
sobre alguna de nuestras páginas.
|
<SCRIPT type="text/javascript"> |
Existen varios objetos ActiveX para enviar
e-mail desde asp, en nuestro caso vamos a usar CDO, que es el objeto que nos
proporciona Microsoft con NT e IIS4.
Lo primero que necesitamos es un formulario que
llame a nuestra página asp con los datos necesarios para mandar el e-mail (a
estas alturas ya no voy a daros los fuentes HTML de un formulario, quiero
suponer que si has llegado hasta aquí eso ya te lo sabes).
En nuestra página asp recibiremos esos datos
mediante el objeto request
y se los pasaremos a una instancia del objeto CDO.
Las principales propiedades del objeto CDO son:
|
From |
Origen del e-mail |
|
To |
Destino del e-mail |
|
Subject |
Asunto del e-mail |
|
Body |
Texto del e-mail |
|
Cc |
Con copia a ... |
|
Bcc |
Con copia oculta a ... |
|
Importance |
Urgencia 0=Baja, 1=Normal, 2=Alta |
|
AttachFile |
Fichero anexado |
Los principales métodos del objeto CDO son:
|
Send |
Envía el mensaje |
Ejemplo:
|
<% 'Hasta aqui los datos
fundamentales, si ademas necesitamos enviar ficheros Copiaa =
"[email protected];[email protected]" Anexo =
"c:\documentos\archivo.txt"
|
La coleccion ServerVariables nos da acceso a
variables de entorno del servidor y del cliente.
Esta colección contiene una gran cantidad de
datos, algunos de ellos tan interesantes como la dirección IP del visitante,
del servidor, el nombre del servidor, etc
ServerVariables forma parte del objeto Request,
por lo cual para consultar estas variables recurriremos a el.
Ejecutando el siguiente codigo tendremos un
listado de todos los valores de la colección.
|
servervar.asp |
|
<html><body> |
Con lo que obtendriamos el siguiente resultado:
|
ALL_HTTP |
HTTP_ACCEPT:image/gif, image/x-xbitmap,
image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword,
application/vnd.ms-powerpoint, */* HTTP_ACCEPT_LANGUAGE:es
HTTP_HOST:www.websamba.com HTTP_USER_AGENT:Mozilla/4.0 (compatible; MSIE
5.01; Windows NT 5.0) HTTP_VIA:HTTP/1.0 numancia.renfe.sir (IBM HTTP Server)
HTTP_ACCEPT_ENCODING:gzip, deflate |
|
ALL_RAW |
Accept:
image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint,
*/* Accept-Language: es Host: www.websamba.com User-Agent: Mozilla/4.0
(compatible; MSIE 5.01; Windows NT 5.0) Via: HTTP/1.0 numancia.renfe.sir (IBM
HTTP Server) Accept-Encoding: gzip, deflate |
|
APPL_MD_PATH |
/LM/W3SVC/6/Root
|
|
APPL_PHYSICAL_PATH |
F:\members\
|
|
AUTH_PASSWORD |
|
|
AUTH_TYPE |
|
|
AUTH_USER |
|
|
CERT_COOKIE |
|
|
CERT_FLAGS |
|
|
CERT_ISSUER |
|
|
CERT_KEYSIZE |
|
|
CERT_SECRETKEYSIZE |
|
|
CERT_SERIALNUMBER |
|
|
CERT_SERVER_ISSUER |
|
|
CERT_SERVER_SUBJECT |
|
|
CERT_SUBJECT |
|
|
CONTENT_LENGTH |
0 |
|
CONTENT_TYPE |
|
|
GATEWAY_INTERFACE |
CGI/1.1 |
|
HTTPS |
off |
|
HTTPS_KEYSIZE |
|
|
HTTPS_SECRETKEYSIZE |
|
|
HTTPS_SERVER_ISSUER |
|
|
HTTPS_SERVER_SUBJECT |
|
|
INSTANCE_ID |
6 |
|
INSTANCE_META_PATH |
/LM/W3SVC/6
|
|
LOCAL_ADDR |
212.49.11.11
|
|
LOGON_USER |
|
|
PATH_INFO |
/aspes/servervar.asp
|
|
PATH_TRANSLATED |
F:\members\aspes\servervar.asp
|
|
QUERY_STRING |
|
|
REMOTE_ADDR |
195.72.88.113
|
|
REMOTE_HOST |
195.72.88.113
|
|
REMOTE_USER |
|
|
REQUEST_METHOD |
GET |
|
SCRIPT_NAME |
/aspes/servervar.asp
|
|
SERVER_NAME |
www.websamba.com
|
|
SERVER_PORT |
80 |
|
SERVER_PORT_SECURE |
0 |
|
SERVER_PROTOCOL |
HTTP/1.0
|
|
SERVER_SOFTWARE |
Microsoft-IIS/4.0
|
|
URL |
/aspes/servervar.asp
|
|
HTTP_ACCEPT |
image/gif,
image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel,
application/msword, application/vnd.ms-powerpoint, */* |
|
HTTP_ACCEPT_LANGUAGE |
es |
|
HTTP_HOST |
www.websamba.com
|
|
HTTP_USER_AGENT |
Mozilla/4.0
(compatible; MSIE 5.01; Windows NT 5.0) |
|
HTTP_VIA |
HTTP/1.0
numancia.ibm.sir (IBM HTTP Server) |
|
HTTP_ACCEPT_ENCODING |
gzip, deflate |
Este
ejemplo nos permite listar el resultado de una select contra una tabla de
nuestra base de datos.
|
Listado.asp |
|
<html>
|
Este ejemplo nos permite paginar en bloques de
registros el resultado de una select contra una tabla de nuestra base de datos.
|
Paginando.asp |
|
<!-- #include
file="adovbs.inc" --> |
Este ejemplo nos permite listar el resultado de
una select elaborada desde un formulario.
Suponemos que tenemos declarada en odbc una base de datos bajo
la DSN de Sistema Biblioteca.
Esta base de datos contiene una tabla llamada libros con los campos Titulo y Autor.
El formulario nos presenta un formato para
escribir el titulo que buscamos, este titulo se lo pasamos como parámetro a
nuestra pagina .asp que nos mostrara todos los titulo coincidentes.
|
Fconsu.htm |
|
<html> |
|
Consultasencilla.asp |
|
<html> |
Este ejemplo nos permite insertar un registro en
una tabla usando el objeto recordset.
Podéis ver el ejemplo funcionando en la
aplicación
La primera página es un formulario que nos
permite escribir el valor a actualizar.
Debemos prestar especial atención a las
sentencias remarcadas en azul.
En el "action" especificaremos la
pagina ASP que procesara los datos enviados desde el formulario, recibiremos el
dato introducido en la caja de texto (input type="text") en la
variable "foro"(name="foro")
|
Insertarforo.htm |
|
|
<html>
|
Si el parámetro es correcto procederemos a
introducir el nuevo valor en una tabla de nuestra base de datos. Lo primero es
establecer nuestra conexión con la base de datos mediante el objeto Server.
|
NOTA: Podréis observar que en este caso la conexión
ODBC la he efectuado por un método directo que me evita tener que declarar la
base de datos como DSN del
Sistema en ODBC . Los efectos son los mismos que si la hubiera declarado
y la invocara por su nombre ODBC. |
Luego creamos nuestro Objeto Recordset , le
asignamos las propiedades necesarias para que nos permita actualizar
(CursorType y LockType) y abrimos la tabla "foros" a través de la
conexión establecida anteriormente con la base de datos.
Invocamos al método Addnew de Recordset para
abrir sitio para un nuevo registro
Asignamos al campo "foro" el valor
recibido del formulario
Invocamos al método Update de Recordset para
confirmar el alta y cerramos el recordset.
Usamos un response.redirect para
dirigir al usuario a otra pagina una vez que hemos terminado el trabajo de
actualización.
|
nuevoforo.asp |
|
<% |
Este ejemplo nos permite modificar un registro
en una tabla usando el objeto recordset.
Quiero suponer que si estas aquí, ya has leído y
entendido el ejemplo anterior.
Para modificar un registro, lo primero que tenemos
que hacer es recuperarlo de la tabla y posicionar en él el cursor (hablando en
plata, hacer una select
para recuperarlo y movernos por el recordset obtenido hasta
situarnos en el).
Una vez situados en el registro a modificar
asignaremos los valores que queramos poner en los campos a modificar con
sentencias de asignación normales:
rs("campo_a_modificar")="Nuevo_Valor"
Una vez asignados los valores, emplearemos el
metodo Update de recordset para grabar las modificaciones en la tabla de la
Base de Datos.
La tabla que usamos en el ejemplo consta de 2
campos:
|
TABLA
IMPACTOS |
|
|
codigo |
Clave principal de la tabla de
tipo autonumerico (Nota: los valores a los campos autonumericos los asigna
directamente el mismo Gestor de Bases de Datos) |
|
contador |
Campo numérico |
El ejemplo que os muestro realiza una select
contra la tabla seleccionando por el campo clave cuyo valor se supone que
recibimos desde un formulario (no creo que haga falta decir que los campos
clave no se repiten, así que nos seleccionara un solo registro o bien, si ese
registro no existe nos devolverá un recordset vació).
En el caso de que encuentre el registro le
sumara 1 al valor que ya existía en el campo "contador" , si no es
asi y el registro no existia, creara un nuevo registro asignando el valor 1 al
campo "contador" (como ya hemos comentado antes al campo
"codigo" no hace falta asignarle ningún valor, se lo asigna
directamente el Gestor de B.D.)
|
Actualizar.asp |
|
<%
|
IMPORTANTE: antes de liarte con este ejemplo es necesario
que hallas practicado y entendido el ejemplo de paginación sencilla y que
estés familiarizado con los distintos métodos request .
En este ejemplo se muestra como conseguir una paginación
de resultados de una consulta con un aspecto y funcionalidad igual a
la usada en los buscadores tipo Yahoo , Terra, etc.
Para ello utlizaremos un formulario que nos
ofrecera las opciones de páginación.
Los datos los enviaremos mediante el metodo GET
, que nos los enviara como una cadena de consulta.
La página asp recibira las opciones mediante request.querystring
y se llamara a si misma con esas mismas opciones mediante un link con
cadena de consulta que nosotros elaboraremos en el pie de página.
Formulario de captura de opciones:
PPROF.HTM
|
<html> <head> <title>Consultas</title> </head> <body bgcolor="#800000"> <p align="center"><font
color="#FFFFFF"> <big><big><big>Paginación
Profesional de resultados</big></big></big></font></p> <p align="center"><font
color="#FFFFFF"><big>Listado de libros</big></font></p> <form method="GET"
action="pprof.asp"> <table border="1"
width="100%" height="203"> <tr> <td width="100%"
align="center" height="23"><font color="#FFFFFF"> <b><i>Selecciona
el campo de ordenacion</i></b></font></td> </tr> <tr> <td width="100%"
bgcolor="#FFFFCC" height="30"><table border="0" width="100%" bgcolor="#FFCC99"> <tr> <td width="50%"
align="center"> <input type="radio"
value="autor" name="orden" checked>Autor</td> <td width="50%"
align="center"> <input type="radio"
value="titulo" name="orden">Titulo</td> </tr> </table> </td> </tr> <tr> <td width="100%"
height="23"><div align="center"><center><p><i><font
color="#FFFFFF"> <b>Selecciona
la cantidad de registros por página</b></font></i></td> </tr> <tr> <td width="100%"
height="103"><table border="0"
width="100%" bgcolor="#FFFFCC"> <tr> <td width="20%"
align="center" bgcolor="#FFCC99"><input type="radio"
value="25" name="tamanopagina"> 25</td> <td width="20%"
align="center" bgcolor="#FFCC99"><input type="radio"
name="tamanopagina" value="35" checked> 35</td> <td width="20%"
align="center" bgcolor="#FFCC99"><input type="radio"
name="tamanopagina" value="50"> 50</td> <td width="20%" align="center"
bgcolor="#FFCC99"><input type="radio"
name="tamanopagina" value="75"> 75</td> <td width="20%"
align="center" bgcolor="#FFCC99"><input type="radio"
name="tamanopagina" value="all"> todos</td> </tr> </table> <div align="center"><center><p><input
type="submit" value="Enviar"
name="B1"></td> </tr> </table> <font color="#FFFFFF"><div
align="center"><center><p> </p> </center></div> </form> </font> </body> </html> |
Conseguimos un formulario como este:
Pagina de Listado
PPROF.ASP
|
<!-- #include
file="adovbs.inc" --> <html> <head> <title>Consultas</title> </head> <body bgcolor="#800000"> <p align="center"><font
color="#FFFFFF"><big><big><big>Paginacion Profesional</big></big></big></font></p> <p align="center"><font
color="#FFFFFF"><big>Listado de libros</big></font></p> <font color="#FFFFFF"><% Server.ScriptTimeOut=180 tamanopagina=request.querystring("tamanopagina") if tamanopagina = "" then tamanopagina=25 end if paginaabsoluta=request.querystring("paginaabsoluta") if
paginaabsoluta="" then paginaabsoluta=1 end if orden=request.querystring("orden") if
orden = "" then orden="codigo" end if set rs =
CreateObject("ADODB.Recordset") rs.CursorType = adOpenKeyset rs.LockType = adLockOptimistic sqltxt="SELECT * FROM biblioteca
order by "&orden rs.Open sqltxt, "DSN=biblioteca" if tamanopagina <> "all"
then rs.pagesize=
cint(tamanopagina) rs.absolutepage=cint(paginaabsoluta) contador=1%> <table align="center"> <% do while
not rs.eof and contador <= cint(tamanopagina) %> <tr> <td width="21%"
bgcolor="#C59530"><%=rs("autor")%> </td> <td width="21%"
bgcolor="#C59530"><%=rs("titulo")%> </td> </tr> <%rs.movenext contador=contador+1 loop%> </table> <p align="center">Pulsa
en la página a la que deseas ir </p> <table align="center"
bgcolor="#ffffff"> <tr> <%j=0 if cint(paginaabsoluta) <> 1 then atras=cint(paginaabsoluta)-1 response.write
"<td align=center><a
href=pprof.asp?orden="&orden&"&tamanopagina="&tamanopagina&"&paginaabsoluta="
& atras &
">"&"<<"&"</a></td>" j=j+1 end if for i = 1 to rs.pagecount j=j+1 if j>20 then response.write
"</tr><tr>" j=1 end if if cint(i) = cint(paginaabsoluta) then response.write "<td
bgcolor=#00ff00 align=center>"&i&"</td>" else response.write
"<td align=center><a
href=pprof.asp?orden="&orden&"&tamanopagina="&tamanopagina&"&paginaabsoluta="
& i & ">"&i&"</a></td>" end if next end if%> <%if
cint(paginaabsoluta) <> rs.pagecount then atras=cint(paginaabsoluta)+1 response.write
"<td align=center><a
href=pprof.asp?orden="&orden&"&tamanopagina="&tamanopagina&"&paginaabsoluta="
& atras & ">"&">>"&"</a></td>" end if%> </tr> </table> <p align="center"> </font></p> </body> </html> |
Con lo que obtendras
este resultado:

Antes de liarte con el ejemplo, puedes darte una
vuelta por Los foros
de la cueva para que te hagas una idea del funcionamiento de la aplicación.
Este ejercicio, sin ser complicado, si requiere
de una base minima de formación en HTML y ASP-ADO, asi que no te lies con él
antes de haber echado un vistazo a TODOS los ejemplos
anteriores.
La base de datos sobre la que esta elaborado es
ACCESS y utiliza la alocación directa del Driver sin usar DSN (esta es la forma
de declaración a la que te obligan la mayoria de los servidores gratuitos al no
dejarte definir DSN's de sistema)
Definición de la base de datos
Nombre de la Base de Datos: PyR.mdb
Consta de 3 tablas:
Tabla FOROS

Tabla PREGUNTAS

Tabla RESPUESTAS

Relaciones entre las tablas:

Modulos y paginas estaticas de la aplicación
La aplicación consta de 8 paginas asp y 1 html
estatico. Se podria reducir el numero de modulos reutilizando parte del codigo
de estos, pero por claridad he preferido plantearlo de esta forma.
|
addforo.asp |
Modulo de inclusión de un nuevo foro en la tabla Foros |
|
addpregunta.asp |
Modulo de inclusión de una nueva pregunta en la tabla Preguntas |
|
addrespuesta.asp |
Modulo de inclusión de una nueva respuesta en la tabla Respuestas |
|
foros.asp |
Modulo de presentación, listado de todos los foros |
|
insertarforo.htm |
Formulario de inserción de un nuevo foro |
|
insertarpregunta.asp |
Formulario para insertar una nueva pregunta |
|
pyr.asp |
Modulo de visualización de todas las preguntas de un
determinado foro |
|
responder.asp |
Formulario para insertar una respuesta a una pregunta |
|
vr.asp |
Modulo de visualización de todas las respuestas a una
determinada pregunta. |
addforo.asp
|
<% |
addpregunta.asp
|
<% |
addrespuesta.asp
|
<% |
foros.asp
|
<html> |
Insertarforo.asp
|
<html> |
Insertarpregunta.asp
|
<%nforo=request.querystring("nforo")%> |
pyr.asp
|
<%nforo=request.querystring("nforo") |
responder.asp
|
<%numero=request.querystring("numero") |
vr.asp
|
<%numero=request.querystring("numero") <html>
</body></html> |