"" 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
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"> |
mipagina.asp
|
<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 =
"smaug@metropoli2000.com;pepe@uscom.com" 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> |