Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1
Creando Sitios de Comercio Electrónico
Antecedentes
Peru Adventure Trips, es una empresa dedicada a la venta de paquetes turisticos
con cede en la capital. En la actualidad elabora y vende paquetes turisticos en
sociedad con empresas amigas (socios de negocio) en las principales ciudades del
Pais. Sus principales clientes son extranjeros y una minoria nacionales.
El dueño de la empresa, don Guino Castillo, conocer de las ventajas del uso de las
tecnologias, decide cambiar a su Gerente General: Edgard Campos y decide
contratar a Cesar Suarez, un joven profesional desarrollador de Sites de Comercio
Electronico, quien a su vez sugiere contratar a una Profesional en Marketing y
Diseño Grafico: Tamara Fernandez.
2
Creando Sitios de Comercio Electrónico
El presupuesto
Cesar, indica que puede iniciarse comprando el dominio PeruAdventure.com y
creando el Sitio en Internet y publicando en ella una Pagina Estatica presencial,
mientras se elabore la solucion final.
Acceso a Internet, 128 Kb de ancho de banda, las 24 horas del dia US$ 65 mes
Compra de Dominio en GrapPeru.com, incluye mantenimiento US$ 20 año
Servicio en Hosting en GrapPeru.com, 60 Mb US$ 180 año
soporte para ASP y Access o SQL Server
25 cuentas de correo POP3
La inversion por todo el año asciente a 980 dolares, lo que equivale a la mitad de
uno de los recibos de telefono que suele llegar a la empresa (llamadas
internacionales).
Cesar, propone que se debe crear una pagina que no solamente muestre una lista
de paquetes turisticos, sino un lugar inteligente que permita discretamente
almacenar el perfil de cada visitante y asi preparar paquetes turisticos
personalizados. Por ejemplo a muchos les agrada realizar canotaje, parapente, es
decir les agrada la aventura, otros prefieren algo mas conservador como visitar los
diversos centros arqueologicos y actividades culturales como el arte, la musica y las
danzas autoctonas. EN cambio otros buscan la parte mistica. Cesar dice que tratar
a todos los visitantes de la misma forma no seria conveniente, debemos buscar
tratar a cada visitante de una forma muy personalizada y tener para ellos paquetes
que vayan de acuerdo a sus gustos y preferencias (el pilar del CRM)
3
Creando Sitios de Comercio Electrónico
Descripción general
Para la empresa será necesario contar con un modulo de administracion del Sitio web, por
ejemplo para dar de alta a nuevos paquetes turisticos, para remover reservas, etc.
4
Creando Sitios de Comercio Electrónico
La Base de Datos
IDDESTINO Entero 4
CIUDAD Carácter 20
Tabla: PAQUETE
La tabla paquete contiene la descripcion de un paquete turistico, su costo, el inicio
y termino, la cantidad de cupos.
IDPAQUETE Carácter 5
IDDESTINO Entero 4
TIPO Carácter 1
NOMBRE Carácter 100
PRECIOCOSTO Monetario 8 4
PRECIOVENTA Monetario 8 4
FECHAINICIO DateTime 8
FECHATERMINO DateTime 8
CATEGORIA Carácter 1
FECHACONFIRMACION DateTime 8
CUPOS Entero 4
VIGENTE Entero 4
Tabla: ACTIVIDAD
Contiene las actividades que compone un paquete turistico: recojo del aeropuerto,
hospedaje, visitas guiadas, etc., para cada actividad habrá un proveedor.
IDACTIVIDAD Entero 4
IDPROVEEDOR Entero 4
IDPAQUETE Carácter 5
NOMBRE Carácter 100
PRECIOCOSTO Monetario 8 4
FECHA DateTime 8
5
Creando Sitios de Comercio Electrónico
Tabla: PROVEEDOR
Contiene la relacion de proveedores
IDPROVEEDOR Entero 4
NOMBRE Carácter 50
CIUDAD Carácter 20
TIPO Carácter 2
EMAIL Carácter 40
URL Carácter 80
Tabla: CLIENTE
Contiene la lista de clientes suscritos
IDCLIENTE Carácter 5
APELLIDO Carácter 40
NOMBRE Carácter 40
EMAIL Carácter 40
CLAVE Carácter 20
FECHANAC DateTime 8
SEXO Carácter 1
PAIS Carácter 20
CIUDAD Carácter 20
TIPOS Carácter 10
Tabla: RESERVA
Contiene la reserva de paquete efectuado por un determinado cliente
IDRESERVA Carácter 5
IDCLIENTE Carácter 5
IDPAQUETE Carácter 5
FECHA DateTime 8
CANTIDAD Entero 4
TIPOPAGO Carácter 1
TOTALVENTA Monetario 8 4
DESCUENTO Monetario 8 4
TOTALNETO Monetario 8 4
CONFIRMADO Lógico 1
ANULADO Lógico 1
6
Creando Sitios de Comercio Electrónico
Tabla: PARAMETRO
Contiene el ultimo numero correlativo usado en los Ids de las tablas.
El Campo CAMPO, contiene el nombre del campo y VALOR el ultimo numero usado
CAMPO Carácter 20
VALOR Carácter 20
www.LibrosDigitales.NET/PeruAdventure
7
Creando Sitios de Comercio Electrónico
? Por comodidad, podemos crear carpetas para separar los distintos archivos de la aplicación
8
Creando Sitios de Comercio Electrónico
Sectorización
Antes de iniciar el proyecto, conviene definir los sectores que presentará nuestros
Sitio. La pantalla la podemos dividir en:
Encabezado:
En ella podemos situar el logotipo de la empresa, el nombre del site, una banda de
menu
Pie:
En ella podemos situar los datos de la empresa, los derechos, y quizas algunos
banners
Izquierda:
Derecha:
9
Creando Sitios de Comercio Electrónico
Colores.css
<HEAD>
<TITLE>Aquí no hay Hojas de Estilo</TITLE>
</HEAD>
<BODY>
<H1>Este es un ejemplo</H1>
<H2>del uso de hojas de estilo</H2>
<P>Personaliza cada uno de los elementos que forma
parte una pagina</P>
</BODY>
10
Creando Sitios de Comercio Electrónico
Una vez creada la hoja de estilo, agregue a la pagina el link en la seccion <HEAD>:
<HEAD>
<TITLE>Aquí si se usa Hojas de Estilo</TITLE>
<LINK Rel="stylesheet" TYPE="text/css" HREF= "colores.css">
</HEAD>
<BODY>
<H1>Este es un ejemplo</H1>
<H2>del uso de hojas de estilo</H2>
<P>Personaliza cada uno de los elementos que forma
parte una pagina</P>
</BODY>
? En el presente libro no nos preocuparemos mucho por el aspecto de nuestra página, sino mas bien
incidiremos en la parte funcional, para la parte artistica dentro de muy poco estará disponible el libro “para
el WebMaster profesional”
11
Creando Sitios de Comercio Electrónico
Caracteristicas:
Ejemplos:
<HEAD>
<TITLE>Ejecutando HTML en el Cliente</TITLE>
</HEAD>
<BODY>
<H2>Usando HTML</H2>
<P>El dia de hoy es 18/02/2002
</BODY>
12
Creando Sitios de Comercio Electrónico
Usando JavaScript:
<HEAD>
<TITLE>Ejecutando un script JavaScript en el Cliente</TITLE>
</HEAD>
<BODY>
<H2>Usando JavaScript</H2>
<P>El dia de hoy es
<SCRIPT LANGUAGE=JavaScript RUNAT=Client>
<!--
dHoy = new Date();
document.write (dHoy);
//-->
</SCRIPT>
</BODY>
13
Creando Sitios de Comercio Electrónico
Usando VBScript:
<HEAD>
<TITLE> Ejecutando un script VBScript en el Cliente </TITLE>
</HEAD>
<BODY>
<H2>Usando VBScript</H2>
<P>El dia de hoy es
<SCRIPT LANGUAGE=VBScript RUNAT=Client>
<!--
Document.Write (Date)
-->
</SCRIPT>
</BODY>
14
Creando Sitios de Comercio Electrónico
15
Creando Sitios de Comercio Electrónico
Son paginas mas inteligentes, actualmente la mayoria de sites son de este tipo.
Caracteristicas:
Basado en ASP:
<HEAD>
<TITLE> Ejecutando un script VBScript en el Servidor </TITLE>
</HEAD>
<BODY>
<H2>Usando VBScript </H2>
<P> El dia de hoy es:
<%Response.Write Date%>
</BODY>
16
Creando Sitios de Comercio Electrónico
Como entornos de trabajo, ambos son muy buenos y tienen mucho en comun. Lo
que los difieren es el sistema operativo sobre el que operan, Windows para ASP y
Linux para PHP.
17
Creando Sitios de Comercio Electrónico
? ASP
? Que necesito para ejecutar ASP
? El modelo de objetos
18
Creando Sitios de Comercio Electrónico
Ventajas
Cómo funciona?
19
Creando Sitios de Comercio Electrónico
Ejemplo:
<HEAD>
<TITLE> Ejecutando un script VBScript en el Servidor </TITLE>
</HEAD>
<BODY>
<H2>Usando VBScript </H2>
<P> El dia de hoy es:
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Response.Write Date
</SCRIPT>
</BODY>
Una forma mas practica es encerrar el codigo VBScript dentro <% y%>.
<HEAD>
<TITLE> Ejecutando un script VBScript en el Servidor </TITLE>
</HEAD>
<BODY>
<H2>Usando VBScript </H2>
<P> El dia de hoy es:
<%Response.Write Date%>
</BODY>
20
Creando Sitios de Comercio Electrónico
? Windows 95: Primero debe actualizar Windows. Esta actualizacion está con el
Service Pack 1. Esta actualizacion se llama Windows Socket 2 (WinSock2), el
cual, puede bajar el WinSock2 de:
http://www.microsoft.com/windows/downloads/bin/w95ws2setup.exe
Esta actualizacion corrige los problemas con el protocolo TCP/IP de Windows 95.
Luego se podrá instalar el PWS correctamente.
Ejecución:
Botón Inicio
Programas
Microsoft Personal Web Server
Administrador personal de Web
Asi mismo indica el nombre del directorio local, que en este caso es
c:/InetPub/wwwroot
http://Grap
21
Creando Sitios de Comercio Electrónico
22
Creando Sitios de Comercio Electrónico
http://Grap/Capitulo3
http://Grap/Capitulo3/ejemplo.asp
23
Creando Sitios de Comercio Electrónico
? En conclusion:
Si vamos a rentar un servicio de hosting será suficiente con Windows 98 (por razones de costo de
licencia). Concluida la labor de desarrollo, podemos colocar la aplicación en el espacio rentado en el
servicio de hosting, via FTP o mediante la consola que el servicio de hosting nos provea.
Si vamos a implementar un Servidor Web en nuestra oficina, conviene adquirir una licencia de Windows
2000 Advanced Server.
A efectos de crear los programas ASP, será suficiente un simple editor de textos como el Bloc de notas de
Windows, o adquirir un Editor mas practico como el EditPlus (www.editplus.com), por unos 30 dolares.
24
Creando Sitios de Comercio Electrónico
Ahora si se puede adquiera MS-Visual InterDev (no crea que lo hará todo, de todos
modos hay que echarle mano al codigo).
Si se quiere acceder a una base de datos, se puede usar una conexión ODBC, una
conexión OLE-DB, o una ruta física. Como plataforma de bases de datos, una
simple base de datos hecha en Microsoft Access puede ser suficiente.
Hay diversos recursos en el web que son gratuitos y nos ayudarán a crear
soluciones muy profesionales, a lo largo del texto se irá indicando.
25
Creando Sitios de Comercio Electrónico
El Objeto Response
Este objeto se usará para enviar información a mostrar en el navegador o para
redireccionar a un URL diferente.
Ejemplo:
También puede incluirse instrucciones HTML como para indicar el salto de linea.
<HEAD>
<TITLE> Un saludo </TITLE>
</HEAD>
<BODY>
<H2>Hola a todos</H2>
<% Response.Write ("Esta cadena <BR> ha sido generada en el
<B>Servidor. </B>") %>
</BODY>
26
Creando Sitios de Comercio Electrónico
El Objeto Request
El Objeto Request se usará para obtener la información incluida en un formulario
HTML o a partir de los datos enviados mediante la instrucción QueryString.
Un ejemplo del uso del Objeto Request es recuperar un valor de un formulario html.
El nombre de la variable viene del dispositivo de entrada de html.
<HEAD>
<TITLE>Formulario entrada de datos </TITLE>
</HEAD>
<BODY>
<FORM ACTION="VerDatos.asp" METHOD="POST">
<INPUT TYPE=Text NAME=txtNombre>
<INPUT TYPE=Text NAME=txtDireccion>
<INPUT TYPE="Submit" VALUE="Ver">
<INPUT TYPE="Reset" VALUE="Borrar">
</FORM>
</BODY>
VerDatos.asp
<HEAD>
<TITLE> Visualizando resultados </TITLE>
</HEAD>
<BODY>
<%
strNom = Request.Form ("txtNombre")
strDir = Request.Form ("txtDireccion")
? Ahora podemos usar la variable, por ejemplo para almacenar el contenido en una Base de Datos,
realizar alguna calculo, imprimirla como parte de un mensaje, etc.
27
Creando Sitios de Comercio Electrónico
El Objeto Application
El Objeto Application se usa para guardar la información que deba ser compartido
simultáneamente por todos los usuarios de la aplicación.
Application("Impuesto") = 0.18
El Objeto Session
El Objeto Session se usa para conservar datos durante una sesion.
Puede almacenarse en un Objeto Session, el Id del usuario, y asi poder verificar sus
datos y filtrar la informacion.
Session("autorizado") = "sí"
Cuando el usuario acceda a una pagina interior, para verificar si tiene permiso, solo
tendriamos que acceder y verificar que el valor de la variable de sesion “autorizado”
sea “si”.
? Hay un Objeto Application para todos los usuarios, y un Objeto Session para cada usuario
El Objeto Server
El Objeto Server se usa para definir la cantidad máxima de tiempo que se esperará
para realizar una escritura, crear instancias a componentes COM y poder usarlas en
nuestras paginas ASP, etc.
Por ejemplo podemos usar este objeto para crear una instancia del objeto de
ADODB.Connection y establecer una conexión a una Base de Datos.
Cn = Server.CreateObject ("ADODB.Connection")
28
Creando Sitios de Comercio Electrónico
Variables de Memoria
Objetivos
En este módulo se desarrollaran los siguientes puntos:
29
Creando Sitios de Comercio Electrónico
Variables
? En ASP (VBScript) hay sólo un tipo de variable: Variant.
? Todas las variables son del tipo Variant.
? Cada variable puede tener un subtipo diferente.
? Hay 10 subtipos diferentes del tipo Variant (que se describe mas adelante).
Dim miVar
Nombrando variables
Al dar un nombre a una variable debe tener en cuenta:
Usando variables
Simplemente asigne valores a las variables:
Num1 = 3.4142
Num2 = FormatNumber(Num1, 2)
strFrase = "Bienvenido..."
strNombre = “Cesar”
strSaludo = strFrase + strNombre
? Una variable tiene por alcance el modulo donde fue definido. Es decir si define una variable en una
función, sólo en esa función se podrá usar dicha variable. Para que la variable esté disponible a nivel de
toda la página, debe definirla al principio y fuera de cualquier función o subprogramas.
30
Creando Sitios de Comercio Electrónico
Suma.asp
<HEAD>
<TITLE>Intentando sumar numeros </TITLE>
</HEAD>
<BODY>
</BODY>
Neto.asp
<HEAD>
<TITLE>Deberia sumar, pero concatena </TITLE>
</HEAD>
<BODY>
<%
strSueldo = Request.Form ("txtSueldo")
strBoni = Request.Form ("txtBoni")
Al ejecutar obtenemos:
31
Creando Sitios de Comercio Electrónico
32
Creando Sitios de Comercio Electrónico
<HEAD>
<TITLE>Declarando Variables</TITLE>
</HEAD>
<BODY>
<%
Dim intMonto, intIGV, intTotal
intMonto = 900
intIGV = 18
intTotal = intMonto - ((intMonto/100)*intIGV)
%>
<P>Monto inicial <% = intMonto %> soles</P>
<B><P>El total es <% = intTotal %> soles</B></P>
</BODY>
33
Creando Sitios de Comercio Electrónico
Option Explicit
Las variables en ASP no necesitan ser declaradas, sin embargo es un buen hábito
declarar las variables que usemos, una forma de forzar su definición es mediante la
orden Option Explicit, la cual debe insertarse al principio del código ASP de cada
pagina.
<%Option Explicit
Dim a,b,c
..
%>
Documentando
Es bueno documentar las secciones de codigo con cierta complejidad, nos sera de
ayuda a nosotros (en el futuro), como a los otros desarrolladores del equipo de
trabajo.
<HEAD>
<TITLE>Declarando Variables</TITLE>
</HEAD>
<BODY>
<%
Dim intMonto, intIGV, intTotal ‘Declaramos variables
intMonto = 900 ‘Monto en soles
intIGV = 18 ‘Impuesto
intTotal = intMonto - ((intMonto/100)*intIGV)
%>
<!—Imprimimos los resultados ?
<P>Monto inicial <% = intMonto %> soles</P>
<B><P>El total es <% = intTotal %> soles</B></P>
</BODY>
34
Creando Sitios de Comercio Electrónico
La funcion TypeName
Esta funcion devuelve el tipo de dato, de una variable o expresion.
<HEAD>
<TITLE>Usando TypeName</TITLE>
</HEAD>
<BODY>
<%Dim dblPi, TipoPi, datFNac, TipoFNac, strFrase, TipoFrase
dblPi = 3.142
TipoPi = TypeName(dblPi)
datFNac = #11/08/02#
TipoFNac = TypeName(datFNac)
Dim emp
emptyVar = TypeName(emp) %>
</BODY>
Al ejecutar obtenemos:
35
Creando Sitios de Comercio Electrónico
Los Subtipos
Veamos un resumen de los subtipos disponibles:
Subtipo Rango
Byte 0-255
4.94065645841247E-324 a 1.79769313486232E308
para valores positivos
36
Creando Sitios de Comercio Electrónico
Funciones de conversión
Las siguientes funciones se acostumbrar usar para convertir las variables a un
subtipo específico:
Todas estas funciones toman como parámetro una variable, y devuelven el subtipo
pedido que puede luego ser retenida en la misma variable, por ejemplo:
var1 = CStr(var1)
37
Creando Sitios de Comercio Electrónico
<HEAD>
<TITLE>Definiendo SubTipos</TITLE>
</HEAD>
<BODY>
<%
Dim strPi, dblPi, intPi, strPi2
Dim TipoPi1, TipoPi2, TipoPi3, TipoPi4
strPi = "3.142"
TipoPi1 = TypeName(strPi)
dblPi = CDbl(strPi)
TipoPi2 = TypeName(dblPi)
intPi = CInt(dblPi)
TipoPi3 = TypeName(intPi)
strPi2 = CStr(intPi)
TipoPi4 = TypeName(strPi2)
%>
38
Creando Sitios de Comercio Electrónico
IsArray(var)
IsDate(var)
IsEmpty(var)
IsNull(var)
IsNumeric(var)
IsObject(var)
Estas funciones retornan un valor lógico (verdadero o falso). Veamos el uso de cada
uno de ellos:
IsEmpty(var)
Esta función indica si una variable está vacía. Una variable está vacía cuando la
variable se ha creado, pero no se ha asignado aún un valor. Esto es distinto a una
cadena vacía ("") o a un valor NULO.
IsNull(var)
Esta funcion determina si el contenido de una variable contiene un valor numol.
Una variable es nula cuando se iguala a un valor nulo.
IsNumeric(var)
Devolverá verdadero si la variable contiene un valor numerico.
Ejemplo:
<HEAD>
<TITLE>Averiguando si es un numero</TITLE>
</HEAD>
<BODY>
<%
miVar = "Hola"
If IsNumeric(miVar) Then
Response.Write ("la Variable es numérica".)
Else
Response.Write ("la Variable no es numérica".)
End If
%>
</BODY>
39
Creando Sitios de Comercio Electrónico
La función VarType()
Otra manera de determinar el Subtipo es usando la funcion VarType ()
La sintaxis:
VarType(var)
40
Creando Sitios de Comercio Electrónico
InStr(CadenaDondeBuscar, CadenaABuscar)
La funcion retorna:
Ejemplo:
str1 = "Hola"
str2 = "ol"
If InStr(str1,str2)> 0 Then
Response.Write ("str1 contiene a str2")
Else
Response.Write ("str2 no está contenido en str1")
End If
Se imprimirá:
Left(Cadena,num)
Extrae caracteres por la izquierda
Se mostrará:
41
Creando Sitios de Comercio Electrónico
Right(Cadena,num)
Extrae caracteres por la derecha
Se mostrará:
Ejemplo:
El resultado:
ASP
Ejemplo:
str1 = "Cesar-Augusto-Bustamante-Gutierrez"
Response.Write ("con espacios :" & Replace(str1," -",""))
Se imprimirá:
42
Creando Sitios de Comercio Electrónico
Len(cadena)
Devuelve la longitud de una cadena
El resultado:
Active Server
43
Creando Sitios de Comercio Electrónico
Ejemplo:
miNomr= "CESAR"
Response.Write(LCase(miNom))
Se imprimirá:
Cesar
miApe = "bustamante"
Response.Write(UCase(Left(miNom,1)) & LCase(Mid(miNom,2)))
Response.Write(UCase(Left(miApe,1)) & LCase(Mid(miApe,2)))
Se imprimirá:
Cesar Bustamante
44
Creando Sitios de Comercio Electrónico
Por ejemplo:
Se imprimirá: 12
45
Creando Sitios de Comercio Electrónico
FormatDateTime(Fecha[,Formato])
Ejemplo:
dHoy = Now()
Response.Write ("dHoy antes de estructurar: " & dHoy &" <BR>")
Response.Write ("dHoy estructurado en 0 =" &
FormatDateTime(dHoy,0) &" <BR>")
Response.Write ("dHoy estructurado 1 =" & FormatDateTime(dHoy,1)
&" <BR>")
Response.Write ("dHoy estructurado 2 =" & FormatDateTime(dHoy,2)
&" <BR>")
Response.Write ("dHoy estructurado 3 =" & FormatDateTime(dHoy,3)
&" <BR>")
Response.Write ("dHoy estructurado 4 =" & FormatDateTime(dHoy,4)
&" <BR>")
El resultado:
46
Creando Sitios de Comercio Electrónico
yyyy - Año
q - Cuarto
m - Mes
y - Día del año
d - Día
w - Día de la semana
ww - Semana de año
h - Hora
n - Minuto
s - Segundo
? Por lo general, se obvian los parametros opcionales: PrimerDiaSemana y PrimerDiaAño, por tanto se
asume que el primer dia de la semana es domingo y el año comienza con el 1ro de enero
47
Creando Sitios de Comercio Electrónico
Ejemplo:
dHoy = Now()
Response.Write ("dHoy =" & dHoy &" <BR>")
Response.Write ("yyyy =" & DatePart ("yyyy", dHoy) &" <BR>")
Response.Write ("m =" & DatePart ("m", dHoy) &" <BR>")
Response.Write ("q =" & DatePart ("q", dHoy) &" <BR>")
Response.Write ("y =" & DatePart ("y", dHoy) &" <BR>")
Response.Write ("d =" & DatePart ("d", dHoy) &" <BR>")
Response.Write ("w =" & DatePart ("w", dHoy) &" <BR>")
Response.Write ("ww =" & DatePart ("ww", dHoy) &" <BR>")
Response.Write ("h =" & DatePart ("h", dHoy) &" <BR>")
Response.Write ("n =" & DatePart ("n", dHoy) &" <BR>")
Response.Write ("s =" & DatePart ("s", dHoy) &" <BR>")
Al ejecutar se mostraria:
48
Creando Sitios de Comercio Electrónico
Con esta función puede agregar o substraer una cantidad a una fecha o tiempo.
Cantidad, es el número que se quiere añadir o restar a una fecha (1, -4, 10, etc).
Ejemplo:
dHoy = Now()
Response.Write ("dHoy =" & dHoy &" <BR>")
Response.Write ("dHoy más 10 días =" & DateAdd ("d", 10, dHoy) &
" <BR>")
Response.Write ("dHoy menos 10 días =" & DateAdd ("d", -10,
dHoy) &" <BR>")
Response.Write ("dHoy más 3 meses =" & DateAdd ("m", 3, dHoy) &"
<BR>")
Response.Write ("dHoy menos 3 meses =" & DateAdd ("m", -3, dHoy)
& " <BR>")
Response.Write ("dHoy más 2 horas =" & DateAdd ("h", 2, dHoy) &"
<BR>")
Response.Write ("dHoy menos 2 horas =" & DateAdd ("h", -2, dHoy)
&" <BR>")
Al ejecutar se obtiene:
49
Creando Sitios de Comercio Electrónico
Esta función es útil para encontrar la cantidad de tiempo entre una fecha y otra.
Ejemplo:
var1 = #30/08/1970#
var2 = Date
Los resultados:
var1 =30/08/1970
var2 =26/02/2002
var1 al var2 es 11503 días
var1 al var2 es 378 meses
var1 al var2 es 32 el año(s)
50
Creando Sitios de Comercio Electrónico
Response.Write ( DateSerial(1970,08,10) )
Response.Write ( DateSerial(2002,02,31) )
10/08/1970
03/03/2002
Dado que en el mes de enero del 2002 hay solo 28 dias, y se ha especificado 31, la
funcion adaptara los dias restantes al mes siguiente, es decir 3 de marzo.
DateValue(Fecha)
Devuelve una fecha, pasada como argumento en formato de fecha larga.
Ejemplo:
Response.Write ( DateValue(“10”,”Setiembre”,”2002”) )
10/09/2002
51
Creando Sitios de Comercio Electrónico
Hay cinco funciones que le permitirá obtener una determinada parte de una fecha:
Day(Fecha)
Retorna el dia de una fecha, un número entre 1 y 31,
Month(Fecha)
Retorna el numero del mes de una fecha, un número entre 1 y 12,
Year(Fecha)
Retorna el numero del año de una fecha, un número como 2002
Weekday(Fecha)
Retorna el numero del dia en la semana, un numero entre 1-7, dónde 1 es domingo
MonthName(mes, abreviado)
Devuelve el mes en forma abreviada o larga
Ejemplo:
var1 = "30/08/1970"
Response.Write ("var1 =" & var1 &" <BR>")
Response.Write ("Para var1 el día es" & Day(var1) &" <BR>")
Response.Write ("Para var1 el mes es" & Month(var1) &" <BR>")
Response.Write ("Para var1 el año es" & Year(var1) &" <BR>")
Response.Write ("Para var1 el día de la semana es" &
WeekDay(var1, 1) &" <BR>")
Response.Write ("Para var1 el nombre del dia es" &
WeekDayName(WeekDay(var1), falso, 1) &" <BR>")
52
Creando Sitios de Comercio Electrónico
Al ejecutar se obtiene:
var1 =30/08/1970
Para var1 el día es 30
Para var1 el mes es 8
Para var1 el año es 1970
Para var1 el día de la semana es 1
Para var1 el nombre del dia es Domingo
53
Creando Sitios de Comercio Electrónico
Time()
Devuelve la hora del sistema
Hour(Hora)
Devuelve la hora
Minute(Hora)
Devuelve los minutos
Second(Hora)
Retorna los segundos de la Hora especificada en el argumento.
Timer()
Devuelve el numero de segundos transcurridos desde las 12 horas (medianoche)
TimeValue(Hora)
Devuelve un dato tipo fecha
54
Creando Sitios de Comercio Electrónico
Ejemplo:
<%
Dim hora
hora = Hour(Time())
'Empezamos la comprobaciones de tiempo.
If hora > 6 and hora < 13 then
Response.Write ("<B>Buenos Dias</B>, son las: " & Time())
ElseIf hora > 12 and hora < 20 then
Response.Write ("<B>Buenas Tardes</B>, son las: "& Time())
ElseIf hora > 19 and hora < 24 then
Response.Write ("<B>Buenas Noches</B>, son las: "& Time())
ElseIf hora >= 0 and hora < 7 then
Response.Write ("<B>Buenas Noches</B>, son las: "& Time())
End If
%>
Al ejecutar obtenemos:
55
Creando Sitios de Comercio Electrónico
Rnd()
La funcion Rnd(), genera un número aleatorio entre 0 y 1. Requiere que en nuestro
código pongamos la instrucción Randomize.
<%
Dim aleatorio
Randomize
' Generamos un numero entre 1 y 10.
Aleatorio = Int (Rnd*10) + 1
response.write "Numero aleatorio "& numero_azar
%>
56
Creando Sitios de Comercio Electrónico
Numeros enteros
FormatNumber(Numero[, Decimal, CeroInicial, Parentesis])
El primer parámetro es el único que se requiere, a menos que sea necesario indicar
el numero de cifras decimales mediante el segundo parámetro.
Con CeroInicial, puede indicar si se incluira cero, si el valor es fraccionario menor a
uno.
Mediante Parentesis, puede indicar si se encerrará con parentesis si el valor
numerico es negativo
Ejemplo:
var1 = 5443.354
var2 = -877743.2345
Response.Write ("var1 con formato=" & FormatNumber(var1, 2, -1,
-1) &" <BR>")
Response.Write ("var2 con formato =" & FormatNumber(var2, 1, -1,
-1))
Al ejecutar se obtiene:
Valores monetarios
FormatCurrency(Numero[, Decimal, CeroInicial, Parentesis])
Ejemplo:
var1 = 5443.354
var2 = -877743.2345
Response.Write ("var1 con formato =" & FormatCurrency(var1, 2, -
1, -1) &" <BR>")
Response.Write ("var2 con formato =" & FormatCurrency(var2, 1, -
1, -1))
57
Creando Sitios de Comercio Electrónico
El resultado:
Porcentajes
FormatPercent(Numero[, Decimal, CeroInicial, Parentesis])
Ejemplo:
var1 = 5.4333
var2 = .823
Response.Write ("var1 con formato =" & FormatPercent(var1, 2, -
1, -1) &" <BR>")
Response.Write ("var2 con formato =" & FormatPercent(var2, 1, -
1, -1))
Ejecutando se obtiene:
58
Creando Sitios de Comercio Electrónico
Arreglos
Los arreglos son dinámicos, es decir puede cambiarse el tamaño luego de haberse
creado el arreglo.
Dim miArray(1)
miArray(0) = "Jose"
miArray(1) = "Gustavo"
Dim miArray(20)
59
Creando Sitios de Comercio Electrónico
Ejemplo:
<HEAD>
<TITLE>Usando arreglos</TITLE>
</HEAD>
<BODY>
<%
Dim aLista()
Redim aLista(4)
aLista(0) = "Pilar"
aLista(1) = "Karen"
aLista(2) = "Tamara"
aLista(3) = "Gabriela"
Response.Write "<P>"
For n = 0 to 3
Response.Write aLista(n) & "<BR>"
Next
For n = 0 to 4
Response.Write aLista(n) & "<BR>"
Next
%>
</BODY>
Dim aColores
aColores = Array("Azul", "Verde", "Rojo")
60
Creando Sitios de Comercio Electrónico
LBound(Arreglo [,Dimension])
Esta función retorna el menor valor contenido en uno de los elementos de un
arreglo.
Dimension (por defecto 1), es un parámetro opcional, especifica la dimensión del
arreglo donde se quiere encontrar el más bajo valor.
UBound(ArrayName [, ArrayDimension])
Esta función retorna el mayor valor contenido en uno de los elementos de un
arreglo.
Dimension (por defecto 1), es un parámetro opcional, especifica la dimensión del
arreglo donde se quiere encontrar el más alto valor.
Ejemplo:
61
Creando Sitios de Comercio Electrónico
miArray(2,3) tendría 2 columnas y 3 filas, esto generaria un arreglo con 3 filas (de
0 a 2) con 4 columnas (de 0 a 3), es decir con 12 elemntos (3x4)
Ejemplo:
Dim miArray(2,3)
miArray(0,0) = "electrodomesticos"
miArray(1,0) = "lustradora"
miArray(2,0) = "10"
miArray(0,1) = "electrodomesticos "
miArray(1,1) = "tostador"
miArray(2,1) = "12"
miArray(0,2) = "perfumes"
miArray(1,2) = "Carolina Herrera"
miArray(2,2) = "40"
miArray(0,3) = "perfumes"
miArray(1,3) = "Aqua Brava"
miArray(2,3) = "23"
For i = 0 To UBound(miArray, 2)
Response.Write (" <tr><td> #" & i &" </td>")
Response.Write (" <td>" & miArray(0,i) &" </td>")
Response.Write (" <td>" & miArray(1,i) &" </td>")
Response.Write (" <td>" & miArray(2,i) &" </td></tr>")
Next
Al ejecutar se obtiene:
62
Creando Sitios de Comercio Electrónico
Instrucciones condicionales
If (condición) Then
' Bloque de instrucciones
End If
If (condición) Then
' Bloque de instrucciones 1
Else
' Bloque de instrucciones 2
End If
Una tercera forma indica, el uso de ElseIf a fin de discriminar otras posibilidades:
If (condición) Then
' Bloque de instrucciones 1
ElseIf (condición) Then
' Bloque de instrucciones 2
ElseIf (condición) Then
' Bloque de instrucciones 3
ElseIf (condición) Then
' Bloque de instrucciones 4
End If
Ejemplo:
63
Creando Sitios de Comercio Electrónico
? Se sugiere evitar ordenes If anidades, en su lugar procure usar la orden condicional Select Case.
En el caso de anidamiento, no olvide cerrar correctamente cada orden If.
Ejemplo:
<HEAD>
</HEAD>
<BODY>
<FORM ACTION="Verificar.asp" METHOD="post">
Ingrese su login:<BR>
<INPUT TYPE="text" NAME="Login"><P>
Ingrese su contraseña:<BR>
<INPUT TYPE="text" NAME="Clave">
<BR>
<BR>
<INPUT TYPE="submit">
</FORM>
</BODY>
64
Creando Sitios de Comercio Electrónico
<HEAD>
<TITLE>Verificando la contraseña </TITLE>
</HEAD>
<BODY>
<%
strLogin = Request.Form("Login")
strClave = Request.Form("Clave")
65
Creando Sitios de Comercio Electrónico
Ejemplo:
Veamos otra forma de envio de datos, al mismo que vemos la solucion usando la
orden condicional multiple.
66
Creando Sitios de Comercio Electrónico
<HEAD>
</HEAD>
<BODY>
<H1>Registro</H1>
<FORM ACTION="DiaSeleccionado.asp" METHOD="post">
Elija un dia<BR>
<SELECT NAME="Dia">
<OPTION VALUE="Lu">Lunes</OPTION>
<OPTION VALUE="Ma">Martes</OPTION>
<OPTION VALUE="Mi">Miercoles</OPTION>
<OPTION VALUE="Ju">Jueves</OPTION>
<OPTION VALUE="Vi">Viernes</OPTION>
<OPTION VALUE="Sa">Sabado</OPTION>
<OPTION VALUE="Do">Domingo</OPTION>
</SELECT>
<BR><BR>
<INPUT TYPE="submit">
<INPUT TYPE="reset">
</FORM>
</BODY>
DiaSeleccionado.asp
<HEAD>
</HEAD>
<BODY>
<%
varMes = Request.Form("Mes")
Select Case varMes
Case "Lu"
Response.Write "Ha seleccionado Lunes"
Case "Ma"
Response.Write " Ha seleccionado Martes"
Case "Mi"
Response.Write " Ha seleccionado Miercoles"
Case "Ju"
Response.Write " Ha seleccionado Jueves"
Case "Vi"
Response.Write " Ha seleccionado Viernes"
Case "Sa"
Response.Write " Ha seleccionado Sabado"
Case "Do"
Response.Write " Ha seleccionado Domingo"
End Select
%>
</BODY>
67
Creando Sitios de Comercio Electrónico
Do
' Bloque de instrucciones
Loop {While <Condición> | Until <Condición>}
Ejemplo:
i = 0
Do While i <5
Response.Write ("i =" & i &" <BR>")
i = i + 1
Loop
El resultado sería:
i=0
i=1
i=2
i=3
i=4
68
Creando Sitios de Comercio Electrónico
Ejemplo:
<HEAD>
</HEAD>
<BODY>
<%
varInicio = 1
varDiaHoy = Day(Now())
varNum = 0
Do While varInicio <= varDiaHoy
varNum = varNum + 1
Loop
Response.Write "Total dias " & varNum & “Transcurridos”
%>
</BODY>
69
Creando Sitios de Comercio Electrónico
While { Condición}
' Bloque de instrucciones
Wend
Esta instrucción resulta muy practica cuando se desea recorrer el contenido de una
tabla:
Ejemplo:
For i = 1 To 7
Response.Write(i = & i &" <BR>")
Next
70
Creando Sitios de Comercio Electrónico
<HEAD>
</HEAD>
<BODY>
</BODY>
Calculos.asp
<HEAD>
</HEAD>
<BODY>
<%
varFNac=Request.Form("FNac")
varFHoy=Request.Form("FHoy")
varFNac = CDate(varFNac)
varFHoy = CDate(varFHoy)
varDias=(varFNac-varFHoy)
varTotal = 0
For x = 0 to varDias
varTotal = varTotal + 20
Next
Response.Write "Total" & varTotal
%>
</BODY>
71
Creando Sitios de Comercio Electrónico
Objetivos
En este primer módulo se desarrollaran los siguientes puntos:
72
Creando Sitios de Comercio Electrónico
El objeto Response
Tiene por funcion enviar datos al cliente, es decir al navegador que ha cargado la
paginas ASP. A traves de este objeto podremos escribir en la pagina que visualizara
el usuario e incluso podremos redirigir al usuario a otra direccion en Internet.
Metodos basicos:
Write
Escribe en el navegador del cliente
Ejemplo:
ServIntel.asp
<HEAD>
<TITLE>Pagina inteligente</TITLE>
</HEAD>
<BODY>
El servidor le informa que son las <% = Time %>
del día <% = Date %> <P>
<%If Hour(Now) < 8 Then %>
Estas no son horas de conectarse, estoy durmiendo!
<% ElseIf Hour(Now) < 15 Then %>
Estoy trabajando, no moleste.
<% Else %>
La tarde es para descansar, ver la tele, dormir, ...
<% End If
Response.Write("<BR><BR>")
Randomize
i = Int(Rnd * 4)
Select Case i
Case 0
Response.Write("Hace buen día, ¿ verdad ?")
Case 1
Response.Write("Me parece que hoy lloverá.")
Case 2
Response.Write("Esta tarde llueve seguro.")
Case 3
Response.Write("Que sol mas espléndido.")
End Select%>
</BODY>
73
Creando Sitios de Comercio Electrónico
Redirect
Redirecciona al navegador web del cliente a la direccion que se le pasa como
argumento
Response.redirect(“http://www.librosdigitales.net”)
Ejemplo:
Selección.htm
<HEAD>
<TITLE>Redireccionando</TITLE>
</HEAD>
<BODY>
</BODY>
VerPagina.asp
? Mejore la velocidad de presentación de su página, usando Response, solo para ejecutar expresiones
en el Servidor, vea el siguiente ejemplo:
74
Creando Sitios de Comercio Electrónico
<HEAD>
</HEAD>
<BODY>
<%
Response.Write "Son las: "
Response.Write Time
Response.Write "horas en la ciudad de Lima"
%>
</BODY>
Lo siguiente es mejor:
<HEAD>
</HEAD>
<BODY>
Son las: <%= Time %> horas en la ciudad de Lima
</BODY>
75
Creando Sitios de Comercio Electrónico
<%
Dim com
'Ahora asignamos la comilla a nuestra variable.
com = Chr(34)
Response.Write "Esta"&com&"está en código ASP"
%>
Al ejecutar tenemos:
76
Creando Sitios de Comercio Electrónico
Ejemplo:
<%
' Procesamiento muy largo en el tiempo
...
if not Response.IsClientConnected then
Response.End
end if
...
' Procesamiento muy largo
%>
77
Creando Sitios de Comercio Electrónico
El objeto Request
Es utilizado para obtener informacion del usuario, por tanto hace las funciones
contrarias a Response.
Request.colección(variable)
Form es una coleccion que contiene todos los elementos de un formulario (<form>)
pasado al archivo ASP con el metodo POST (<form method='post'>), la forma de
acceder a el valor de un elemento del formulario es la siguiente...
<%=Request.Form("nombre_elemento")%>
FormDatos.htm
<HEAD>
<TITLE>Formulario de entrada</TITLE>
</HEAD>
<BODY>
<FORM NAME="Formulario" ACTION=”Recibir.asp" METHOD="POST">
Nombre: <INPUT TYPE="TEXT" NAME="nombre" SIZE="20"><BR>
Apellidos: <INPUT TYPE="TEXT" NAME="apellidos"
SIZE="40"><BR>
Sexo:<BR>
H <INPUT TYPE="RADIO" NAME="sexo" VALUE="varon">
M <INPUT TYPE="RADIO" NAME="sexo" VALUE=”mujer">
<BR><BR>
<INPUT TYPE="SUBMIT" VALUE="Enviar">
</FORM>
</BODY>
78
Creando Sitios de Comercio Electrónico
El formulario Recibir.asp:
<HEAD>
<TITLE>Datos obtenidos del formulario</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
Su nombre es <% = Request.Form("nombre") %>
<BR>
Sus apellidos son <% = Request.Form("apellidos") %>
<BR>
Su sexo es <% = Request.Form("sexo") %>
</BODY>
79
Creando Sitios de Comercio Electrónico
Destino.asp
<HEAD>
</HEAD>
<BODY>
<%If Request.Form = “” Then%>
Seleccione un destino:
<FORM ACTION="Destino.asp" METHOD=POST>
<SELECT SIZE=3 NAME="Destino" MULTIPLE>
<OPTION>Iquitos</OPTION>
<OPTION>Cusco</OPTION>
<OPTION>Arequipa</OPTION>
<OPTION>Trujillo</OPTION>
<OPTION>Lima</OPTION>
</SELECT>
<INPUT TYPE="SUBMIT">
</FORM>
<%else
If Request.Form("Destino").Count=0 then
Response.Write "No ha seleccionado un destino"
Else
Response.Write "El destino que ha seleccionado
es: "
Response.Write Request.Form("Destino")
End If
End If%>
</BODY>
80
Creando Sitios de Comercio Electrónico
Veamos un ejemplo:
FormCiudad.htm
<HEAD>
</HEAD>
<BODY>
Seleccione un destino:
<FORM ACTION="Mostrar.asp" METHOD=GET>
<SELECT SIZE=3 NAME="Destino" MULTIPLE>
<OPTION>Iquitos</OPTION>
<OPTION>Cusco</OPTION>
<OPTION>Arequipa</OPTION>
<OPTION>Trujillo</OPTION>
<OPTION>Lima</OPTION>
</SELECT>
<INPUT TYPE="SUBMIT">
</FORM>
</BODY>
Mostrar.asp
<HEAD>
</HEAD>
<BODY>
<%
If Request.QueryString("Destino").Count=0 then
Response.Write "No ha seleccionado un destino"
Else
Response.Write "El destino que ha seleccionado es: "
Response.Write Request.QueryString("Destino")
End If
%>
</BODY>
81
Creando Sitios de Comercio Electrónico
Para pasar las variables de una página a otra lo podemos hacer introduciendo dicha
variable en la dirección URL de la página destino dentro del enlace hipertexto. La
sintaxis sería la siguiente:
<a href="destino.asp?variable1=valor1&variable2=valor2&..."></a>
Para recoger la variable en la página destino lo hacemos por medio del objeto
Request con el método Querystring:
Request.querystring("variable1")
Request.querystring("variable2")
Veamos un ejemplo:
Origen.htm
<HTML>
<HEAD>
<TITLE>De aquí se envia valores</TITLE>
</HEAD>
<BODY>
<a href="destino.asp?saludo=hola&usuario=cesar">
Haga clic para enviar los valores
</a>
</BODY>
</HTML>
Destino.asp
<HEAD>
<TITLE>destino.asp</TITLE>
</HEAD>
<BODY>
<%
texto = Request.Querystring("saludo")
nombre = Request.Querystring("usuario")
%>
Variable saludo: <%Response.Write(texto& " " & nombre)%>
</BODY>
82
Creando Sitios de Comercio Electrónico
Ejemplo:
<HEAD>
</HEAD>
<BODY>
<H2>Escoja la pagina que desea ver</H2>
<FORM ACTION="VerPagina.asp" METHOD="POST">
<INPUT TYPE="Radio" NAME="optPagina" VALUE="Pag1"
CHECKED>Pagina 1<BR>
<INPUT TYPE="Radio" NAME="optPagina" VALUE="Pag2">Pagina
2<P>
<INPUT TYPE="Submit" VALUE="Ver pagina">
<INPUT TYPE="RESET">
</FORM>
</BODY>
VerPagina.asp
<%
Option Explicit
Dim strRpta
strRpta = Request.Form("optPagina")
83
Creando Sitios de Comercio Electrónico
Puede usarse el control Hidden de HTML, para almacerar en ella un valor, la sintaxis
de la orden es la siguiente:
Esta tecnica podria resultar util, para almacenar informacion que la pagina genere
(como un nuevo id del usuario, etc), y poder enviarlo a otra pagina, evitando el uso
de variables de sesion.
84
Creando Sitios de Comercio Electrónico
La redirección se implementa mediante cabeceras HTTP que son distintas que las
enviadas cuando se muestra una página web. Eso significa que si se utiliza
Response.Write o se intercala cualquier código HTML, ya no funcionará un posterior
Response.Redirect porque se habrán enviado las cabeceras de mostrar una página
web, no las de redirección. No obstante, existe una solucion y enviar un comando
de redirección tras haber enviado comandos write. Esto implica el uso de la
propiedad Buffer como se explica a continuación.
La primera:
La segunda:
85
Creando Sitios de Comercio Electrónico
86
Creando Sitios de Comercio Electrónico
Propiedad Buffer:
Puede estar True o False. Si está en True el servidor procesa todo y luego lo envia.
Si está en False va enviando a medida que procesa.
Método Flush:
Se puede utilizar solamente cuando el Buffer está en True. ¿Para que sirve? Dijimos
que cuando el Buffer está en true, toda la información se envia cuando es
procesada completamente. Con Response.Flush pediremos todo lo que está
procesado hasta ese momento.
<%
Response.Buffer = True
'parte pesada de la página...
....
Response.Flush
'Continuamos con la página.
...
%>
Método Clear:
Se utiliza para borrar todo el Buffer. Su sintaxis es simple <% Response.Clear %>
87
Creando Sitios de Comercio Electrónico
Método End:
<%
'parte pesada de la página.
...
'comprobamos si el cliente sigue activo.
If not Response.IsClientConnected then
Response.End
end if
%>
Ejemplo:
<BODY>
Este texto se envia al navegador<P>
Está esperando a ser mostrada<P>
<% Response.Flush %>
Esto puede enviarse al cliente<P>
Sin embargo será borrado<P>
<% Response.Clear %>
<%
Response.Write "Podemos tener control en la salida<P>"
Response.Flush
%>
Se supone que aquí termino todo<P>
<% Response.End %>
Esto creo que no aparecerá
</BODY>
88
Creando Sitios de Comercio Electrónico
Evitando la Caché
El navegador guarda una copia de las páginas visitadas en la caché. Cuando retorna
al mismo sitio lo que hace es verificar si ya visitó esa página y cuál es la fecha del
archivo. Si la fecha de modificación concuerda con la del servidor, la página se
carga desde la caché. Si no, baja del server. Veremos a continuacion como evitar
eso, y que siempre baje el archivo desde el servidor, evitando la caché del
navegador.
Método Response.Expires:
Con este método definimos los minutos que se usará la caché. Si ponemos 3
significa que a los 3 minutos dejará de usar la caché, y pedirá la página al servidor.
Obviamente si ponemos 0, se evita totalmente la caché, ya que pedirá
directamente la página al server. Algo importante es que debemos ubicarlo antes
de los encabezados HTTP. Su forma de usarlo es el siguiente.
Método Response.ExpiresAbsolute:
Método Response.AddHeader:
Tiene varias funciones, pero sólo comentaremos la siguiente que sirve para no
llegar a guardar la caché de la página en cuestión.
89
Creando Sitios de Comercio Electrónico
Ejercicio
Dada las paginas:
oficina.asp
juegos.asp
tareas.asp
Crear una pagina inicial que muestre una de las paginas citadas, dependiendo de la
hora.
En horario de oficina: oficina.asp
En horario de refrigerio: juegos.asp
El resto del dia: tareas.asp
90
Creando Sitios de Comercio Electrónico
Procedimientos y funciones
Objetivos
En este módulo se desarrollaran los siguientes puntos:
? Procedimientos
? Funciones
? Archivos Include
? Tratamiento de errores
? Alcance de las variables
91
Creando Sitios de Comercio Electrónico
Procedimientos
? Esta constituido por un grupo de instrucciones que realizan una tarea especifica.
? Un Procedimiento no devuelve valores.
? Los procedimientos pueden aceptar argumentos. Los argumentos son variables
que se pueden enviar al procedimiento y utilizarlas para realizar las acciones.
Los procedimientos contienen una serie de comandos o instrucciones en
VBScript, encerrados entre las instrucciones
Ejemplo:
<%
Sub Saludo()
Response.Write "Bienvenido <BR>"
End Sub
%>
<%
'llamamos al procedimiento:
Saludo
%>
Al ejecutar se mostraria:
Bienvenido
<%
Sub Saludo(nombre)
Response.Write "Bienvenido “ & nombre & “<BR>"
End Sub
%>
<%
'llamamos al procedimiento:
Saludo(“Cesar”)
%>
92
Creando Sitios de Comercio Electrónico
Al ejecutar obtenemos:
Bienvenido Cesar
93
Creando Sitios de Comercio Electrónico
Funcion de usuario
Esta constituido por un grupo de instrucciones que realizan una tarea especifica.
Una función de usuario devuelve valores.
NOTA:
Para devolver un valor en una función, debe asignar el valor que se desea devolver
al nombre de la función.
Ejemplo:
Function ChequeaEspacio(x)
If InStr(x,"")> 0 Then
ChequeaEspacio = True
Else
ChequeaEspacio = False
End If
End Function
Destino.htm
<HEAD>
</HEAD>
<BODY>
94
Creando Sitios de Comercio Electrónico
Presupuesto.asp
<HEAD>
</HEAD>
<BODY>
<%
Function CostoLima(NumDias)
varHotel = NumDias*175
varViaticos = NumDias*75
varTransporte = 85
CostoLima = varHotel +varViaticos+varTransporte
End Function
Function CostoProvincia(NumDias)
varHotel= NumDias*85
varTaxi = NumDias*45
varViaticos = NumDias*75
CostoProvincia = varHotel +varTaxi + varViaticos
End Function
varUbicacion=Request.Form("localizacion")
%>
95
Creando Sitios de Comercio Electrónico
Hay dos tipos de Include: virtual y absoluto. Cada uno se demuestra debajo:
Virtual:
Absoluto:
¿Cuál es mejor? Puede ser el virtual. Si el archivo Include se mueve a otro website,
o servidor y se mantiene la misma ruta, no inmplica modificaciones en el codigo de
mi programa.
General.asp
<%
'Abrimos un Sub.
Sub menu
%>
<TABLE BORDER="0" ALIGN="center" WIDTH="90%">
<TR>
<TD>Home Page</TD>
<TD>Ejemplos</TD>
<TD>Historia>/TD>
<TD>Contactate</TD>
</TR>
</TABLE>
<%
'Cerramos el Sub.
End Sub
%>
96
Creando Sitios de Comercio Electrónico
HomePage.asp
Ejemplos.asp
Sub y Call:
Habrán visto que en el archivo general.asp se abría un Sub llamado menu y luego
se cerraba. Podemos crear varios Sub en el mismo archivo y luego llamar a cada
uno por separado con la instrucción Call. Después de Call se debe poner el nombre
de la Sub. Fijense bien como se usa y ahorrarán lineas y lineas de código.
Consejos de seguridad
97
Creando Sitios de Comercio Electrónico
Ejemplo:
<%
Function Cuadrado(numero)
If numero <= 0 Then
Cuadrado –1
End Function
Else
Cuadrado = numero * numero
End If
End Function
Rpta = Cuadrado(3)
If Rpta = -1 Then
Response write (“No acepta valores negativos”)
Else
Response write (“El cuadrado de 3 es ”& Rpta)
Endif
%>
98
Creando Sitios de Comercio Electrónico
Tratamiento de errores
Cuando se genera un error, los datos del error de almacenan en el objeto Err, asi
se deseamos ver el error, podemos usar:
If Err.Number> 0 Then
' tratamiento en caso de error
End If
Provocaria el error:
If Err.Number> 0 Then
Response.Write ("Error #" & Err.Number &" < br>")
Response.Write ("Fuente del Error: " & Err.Source &" < br>")
Response.Write ("Descripción del Error: " & Err.Description &" < br>")
End If
El resultado:
Error #9
La Fuente del error: Microsoft el VBScript runtime error
La Descripción del error: El subíndice fuera de rango
El resultado es más fácil de leer. Puede aplicar esto a cualquier código que escriba.
De esta manera podemos ayudar a explicar mejor el error a los usuarios.
99
Creando Sitios de Comercio Electrónico
Variables Locales
? Toda variable declarada en una funcion o procedimiento es de tipo Local.
? Una variable local conserva su valor solo dentro de la funcion o procedimiento
Ejemplo:
<HEAD>
</HEAD>
<BODY>
<%
Sub Procedure_1
strCadena = "Esta es una frase"
Response.Write strCadena
End Sub
Sub Procedure_2
strCadena = "Esta es una frase distinta"
Response.Write strCadena
End Sub
%>
100
Creando Sitios de Comercio Electrónico
Variables Globales
Si se desea preservar el valor de una variable, debe declararla al inicio del modulo,
fuera de cualquier funcion o precedimiento.
<HEAD>
</HEAD>
<BODY>
<%
strCadena = "Esta es la frase inicial"
Response.Write strCadena
Sub Procedure_1
strCadena = "Esta es una frase"
Response.Write strCadena
End Sub
Sub Procedure_2
strCadena = "Esta es una frase distinta"
Response.Write strCadena
End Sub
%>
101
Creando Sitios de Comercio Electrónico
? Tratamiento de sesiones
? Manejo de aplicaciones
? Archivos Include
? Tratamiento de errores
Alcance de las variables
102
Creando Sitios de Comercio Electrónico
El Objeto Session
El objeto Session es, un objeto intrínseco de ASP (que no tenemos que crear o
instanciar) que almacena el estado a nivel de usuario. A cada usuario se le es
asignado un objeto Session. Puesto que cada usuario tiene su propio objeto, su
propio conjunto de datos puede ser mantenido.
Una sesión empieza cuando el usuario ingresa a su website. Una sesión ha acabado
cuando un usuario cierra el navegador o cuando ésta espira a un determinado
tiempo.
Session.SessionID:
Session.TimeOut
Response.Write(Session.SessionID)
El servidor Web garantiza que este valor es único para cada visitante mientras esté
corriendo. Sin embargo, si el servidor es reiniciado ya no se puede garantizar que
siga siendo único para cada visitante que hayamos tenido en la vida de nuestro
sitio Web. Puesto que el contenido de cada objeto Session de cada visitante se
guarda en la memoria del servidor, éste tiene que poder recuperarla eliminando las
sesiones de los visitantes que han abandonado el sitio. Esto se consigue de dos
formas: la primera, automática, cuando caduca el tiempo de sesión (Session
TimeOut) que tiene un valor por defecto (20 minutos históricamente) y que
representa el tiempo que ha estado el usuario sin hacer ninguna petición (supone
que tras 20 minutos sin pedir ninguna página, se habrá ido a otro sitio); la
segunda, llamando desde una página ASP al método Abandon del objeto Session,
así:
El tiempo de sesión puede cambiarse, bien para todo el sitio Web desde el
Administrador de IIS, o bien para una única sesión, especificándolo en una página
ASP así:
103
Creando Sitios de Comercio Electrónico
Las Variables de sesión le permitirá asignar un valor en una variable en una página
y poder usarla en otra página. Un ejemplo de su uso, seria que mantener en una
variable el Id del visitante, asi si desea ingresar a otra pagina simplemente
verificamos si inicio una sesion, y no tener que pedir que escriba su username y
contraseña nuevamente.
<%
Session("Nombre") = "Carlos"
%>
<%
Dim nombre
nombre = Session("Nombre")
%>
Ejemplo:
fechahora.asp
104
Creando Sitios de Comercio Electrónico
Ejercicio
Diseñe una pagina que solicite los datos de usuario, los guarde en una variable
sesion, para luego poder ser usadas en alguna consulta
Desventajas
? Evite el uso excesivo de variables de sesion, ya que puede bajar el rendimiento
del servidor.
? No usarla para almacenar datos: por cada visitante que entra el sitio web recibe
su objeto Session personal. Los objetos ocupan una gran cantidad de memoria
del servidor. Almacenarlos en una variable de sesión significa que rápidamente
el servidor se va a quedar sin memoria y va a correr mucho más lentamente
? Otro de los errores más comunes es guardar en variables de sesión cosas que
no son específicas para cada usuario, como cadenas de conexión a bases de
datos, algún HTML que imprimimos siempre, como pie de página... Las variables
de sesión no están pensadas para eso.
105
Creando Sitios de Comercio Electrónico
El objeto Application
? El objeto Application, es único para todo el sitio Web.
? Todos los visitantes comparten el mismo objeto Application.
? El objeto Application se usa para compartir la información con todos los usuarios
de su aplicación.
? Una Variable de la Aplicación, es accesible a lo largo de la aplicación.
Un caso donde podria usarse el Objeto Application, seria para guardar la direccion
web de la aplicación. Por ejemplo si la aplicación se esta desarrollando y hay
necesidad de modificar continuamente el site, simplemente modificariamos la
direccion almacenada en la variable redireccionandola hacia otro lugar sin
necesidad de detener la aplicación.
Otro caso donde podria usarse una variable Application seria para almacenar la
acdena de conexión a la Base de Datos:
Cn.Open Application("ConnStr")
106
Creando Sitios de Comercio Electrónico
El contenido del objeto Application es global, y compartido por todos los usuarios
del sitio Web, por tanto podria ocurrir un problema de concurrencia.
Veamos el siguiente caso: tenemos una página ASP que suma 1 a una variable de
aplicación, y otra que resta 1 a la misma variable.
Esta es la primera:
Y esta la segunda:
Solucion: usar los métodos del objeto Application: Lock y Unlock (cerrar y abrir).
Estos dos métodos simplemente digamos que restringen el uso del objeto
Application en ese momento.
<%
Application.Lock
Application("Num") = Application("Num") + 1
Application.Unlock
%>
Desventajas
Evita guardar objetos en variables de aplicación. Además de ocupar mucha
memoria, casi nunca ofrecen el supuesto incremento del rendimiento que en
principio puede parecer.
El único escenario en que es más lógico utilizar una variable de aplicación es aquel
en que lo que guardamos sea susceptible de cambiar muy a menudo, como el
número de visitantes, o la fecha del último mensaje en un foro, etc
107
Creando Sitios de Comercio Electrónico
El archivo Global.asa
Este archivo debe colocarse en el directorio raíz de publicación Web. Así, cuando el
servidor sea iniciado, el evento Application_OnStart se dispara y el código que
escribamos en su procedimiento correspondiente se ejecuta. Cuando un nuevo
visitante llega al sitio Web, el evento Session_OnStart se dispara y su código se
ejecuta. Cuando la sesión de cada visitante termina, Session_OnEnd se dispara y el
código escrito en ese procedimiento se ejecuta. Por último, cuando el servidor Web
es detenido o reiniciado, Application_OnEnd se ejecuta.
¿Para qué utilizamos GLOBAL.ASA? Los eventos de inicio (los OnStart) deben
utilizarse para inicializar las variables de sesión y aplicación que pretendamos
utilizar. Así mismo, los eventos de fin (los OnEnd) deben utilizarse para limpiar
estas variables.
Global.asa
Sub Session_OnStart
Application.Lock
Application("Activos") = Application("Activos") + 1
Application.Unlock
End Sub
Sub Session_OnEnd
Application.Lock
Application("Activos") = Application("Activos") - 1
Application.Unlock
End Sub
Sub Application_OnEnd
'Cualquier código
End Sub
</SCRIPT>
¿Por qué funciona esto? Muy sencillo: cuando el servidor Web es iniciado (o el
archivo GLOBAL.ASA es añadido), el primer Sub se ejecuta y la variable de
aplicación Activos se inicializa a cero. Cada vez que un nuevo visitante entra en la
Web, Session_OnEnd se ejecuta y, utilizando Lock y Unlock para garantizar la
atomicidad, se suma 1 a la variable. Cuando el tiempo de sesión de cada visitante
termina, Session_OnEnd se ejecuta y se resta uno de la variable. De esta forma,
podemos imprimir en cualquier página el número aproximado de usuarios que están
en ese momento en el sitio Web así:
108
Creando Sitios de Comercio Electrónico
Se ha visto que los objetos Session y Application como un buen lugar para
mantener datos que utilicemos multitud de veces a lo largo del sitio Web.
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.
global.asa
Sub Application_OnStart
application("visitas")=0
application("fecha")=date()
End Sub
Sub Application_OnEnd
End Sub
Sub Session_OnStart
application.lock
application("visitas")=application("visitas")+1
application.unlock
End Sub
Sub Session_OnEnd
End Sub
</SCRIPT>
109
Creando Sitios de Comercio Electrónico
mipagina.asp
El uso correcto
La forma más efectiva de trabajar con bases de datos es usando JIT activation (Just
In Time activation) o activación justo en el momento, y ASAP Deactivation (As Soon
As Posible Deactivation) o desactivación tan pronto como sea posible. Esto significa
que no debemos crear (Server.CreateObject) y utilizar componentes hasta que los
necesitemos, y debemos cerrarlos y destruirlos (set obj = nothing) tan pronto como
hayamos terminado con ellos y no al final de la página ASP siempre.
<%
Dim oConn, rs, SQL
set oConn = Server.CreateObject("ADODB.Connection")
oConn.Open Application("CadenaConexion")
oConn.Close
set oConn = nothing
%>
Ejemplo:
Diseñando un chat
110
Creando Sitios de Comercio Electrónico
111
Creando Sitios de Comercio Electrónico
ADO OLEDB
Presenta tres componentes
Proveedores de datos
(Data Providers)
Receptores de Datos
(Data Consumers)
Componentes de Servicio
(Service Components)
Objetos ADO
Consta de tres componentes principales:
el objeto Connection,
el objeto Command y
el objeto RecordSet
112
Creando Sitios de Comercio Electrónico
La Conexión
La conexion con DSN es la más cómoda, pero sólo se puede utilizar si tenemos
acceso al Panel de Control del Servidor.
<%
'Definimos la variable para la conexión.
Dim cn
Set cn = Server.CreateObject ("ADODB.Connection")
Como se ve es muy facil. Sin embargo si vamos a optar por un servicio de hosting,
debemos averiguar si alli podemos crear un DSN en todo caso debera obtarse por
otra alternativa de conexion.
113
Creando Sitios de Comercio Electrónico
<%
Dim Cn
'Creamos el objeto de conexion ahora...
Set Cn = Server.CreateObject ("ADODB.Connection")
Cn.open "DRIVER={Microsoft Access Driver (*.mdb)};
DBQ=C:\misitio\db\miBase.mdb;"
%>
<%
Dim Cn
'Creamos el objeto de conexion ahora...
Set Cn = Server.CreateObject ("ADODB.Connection")
Cn.Open "Provider=Microsoft.Jet.OLEDB.3.51; Data
Source=C:\misitio\db\miBase.mdb;"
%>
<%
Dim Cn
'Creamos el objeto de conexion ahora...
Set Cn = Server.CreateObject ("ADODB.Connection")
Cn.open "Provider=Microsoft.Jet.OLEDB.4.0; Data
Source=C:\misitio\db\miBase.mdb;"
%>
114
Creando Sitios de Comercio Electrónico
<%
Dim Cn
'Creamos el objeto de conexion ahora...
Set Cn = Server.CreateObject ("ADODB.Connection")
Cn.Open "driver={SQL Server};server=miServidor; database=miBase;
uid=sa;pwd="
%>
Para ORACLE
<%
Dim Cn As New ADODB.Connection
Dim cadena As String
cadena = "Driver={Microsoft ODBC Driver for Oracle};" & _
"Server=miServidor; Uid=Usuario; Pwd=Clave"
con.Open cadena
%>
<%
Dim path
'guardamos en la variable path lo que devuelve la función
path = Server.MapPath("./")
Response.Write path
%>
C:\InetPub\WWWRoot\directorio_actual
115
Creando Sitios de Comercio Electrónico
<%
Dim Cn, cadena
'Creamos el objeto de conexion ahora...
Set Cn = Server.CreateObject ("ADODB.Connection")
cadena = "DRIVER={Microsoft Access Driver (*.mdb)}";
cadena = cadena & Server.MapPath("./") & "miBase.mdb";
cadena = cadena & "PWD=miPassword"
Cn.Open(cadena)
%>
116
Creando Sitios de Comercio Electrónico
Manejo de Resultados
Usará el objeto Recordset.
En términos sencillos, un objeto Recordset es una tabla que contiene los datos que
manejará nuestra aplicación ASP. Esta tabla almacena el resultado obtenido por las
consultas realizadas sobre la base de datos a la que nos encontremos conectados
mediante el objeto Connection. Un Recordset se encuentra formado por filas
(registros) y columnas (campos), a las que deberemos hacer referencia para poder
acceder a sus datos.
Tipos de resultado
rs.CursorType = tipoCursor
117
Creando Sitios de Comercio Electrónico
Propiedades
Ejemplo:
<HEAD>
<TITLE>Acceso a base de datos</TITLE>
</HEAD>
<BODY>
<%
'Abre la conexion con la base de datos
Set Cn = Server.CreateObject("ADODB.Connection")
Cn.Open "dsnLista"
'Ejecuta un sentencia SQL de consulta
sql = "SELECT * FROM Usuario"
Set Rs = Cn.Execute(sql)
%>
Lista de Clientes
<BR>
<TABLE>
<TR>
<TD><B>Nombre</B></TD>
<TD><B>Apellidos</B></TD>
</TR>
<%
'Recorre todas las filas del resultado
Do While Not Rs.EOF
' Muestra la fila actual
Response.Write("<TR>")
Response.Write("<TD>" & Rs("Nombre") & "</TD>")
Response.Write("<TD>" & Rs("Direccion") & "</TD>")
Response.Write("</TR>")
'Pasa a la siguiente fila
Rs.MoveNext
Loop
'Libera variables de memoria
Rs.Close
Set Rs = Nothing
Cn.Close
Set Cn = Nothing
%>
</TABLE>
</BODY>
118
Creando Sitios de Comercio Electrónico
Instrucciones SQL
Generando consultas
La instrucción que permite recuperar información de una Base de Datos se llama
SELECT. La sintaxis más breve es la siguiente:
El símbolo asterisco, señala que se recuperarán todos los campos de la tabla, por
ejemplo para recuperar los datos de todos las ciudades anotaríamos:
Las columnas resultado de la sentencia SELECT por lo general son campos, aunque
también puede ser: una constante, especificando que el mismo valor constante va a
aparecer en todas las filas de los resultados de la consulta o una expresión SQL,
indicando la orden SQL que debe calcular el valor a colocar en los resultados, según
el estilo especificado por la expresión. Por ejemplo si sólo se requiere el nombre y
el Id de cada Vendedor, anotaría:
<Select Name="Ciudad">
<%Set Cn = Server.CreateObject("ADODB.Connection")
Cn.Open "DSN=Pruebas"
SQL = "SELECT * FROM Ciudad"
Set rs = Cn.Execute(SQL)
While Not rs.EOF %>
<option
value="<%=rs("IdCiudad")%>"><%=rs("NomCiudad")%>
119
Creando Sitios de Comercio Electrónico
</option>
<%
rs.MoveNext
Wend
rs.Close
%>
</Select>
120
Creando Sitios de Comercio Electrónico
Creación de expresiones
Las expresiones se utilizan para calcular valores que son de una base de datos y
para calcular valores utilizados en la búsqueda de la base de datos. Por ejemplo
para mostrar el Id de un Articulo y el precio venta mas IGV, anotaría:
121
Creando Sitios de Comercio Electrónico
Usando funciones
También puede incluir funciones en la construcción de expresiones, por ejemplo
para mostrar el número de comprobante y el mes de las ventas realizadas hoy:
Las funciones internas también suelen utilizarse para reformatear los datos. Por
ejemplo, podemos mostrar el igv de las ventas con redondeo a una cifra decimal:
SELECT Fecha,
en_dos_dias=DATEADD(day, 2, Fecha)
FROM Reserva
SELECT Fecha,
en_letras = DATENAME(dw, Fecha)+','
+ STR(DATEPART(dd, Fecha),2)+
' de ' + DATENAME(mm, Fecha)+
' de '+ STR(DATEPART(yy, Fecha),4)
FROM Reserva
122
Creando Sitios de Comercio Electrónico
Falta de datos
Puesto que una Base de Datos es generalmente un modelo de una situación del
mundo real, ciertos datos pueden inevitablemente faltar, ser desconocidos o no ser
aplicables. Suponga que al emitir una Reserva no se insertó la fecha, la Reserva
quedaría registrado, pero la columna Fecha quedaría vacío, aquí es donde podemos
aplicar el valor nulo.
Un valor nulo es un indicador que nos indica que el dato falta o no es aplicable. Por
conveniencia, un dato que falta normalmente se dice que tiene el valor NULL, pero
el valor NULL no es un valor de dato real como 0 o “”. En vez de ello, es una señal,
o un recordatorio de que el valor de datos falta o es desconocido.
SELECT *
FROM Reserva
WHERE Fecha ISNULL()
Lo cual puede generar confusion, que hacer?, puede usar la funcion isNull()
Veamos un ejemplo:
strCiudad = rs(“Ciudad”)
If IsNull(strCiudad) Then
strCiudad =""
Else
strCiudad = Trim(strCiudad)
If Len(strCiudad) <1 Then
strCiudad =""
End If
End If
If strCiudad ="" Then
Response.write(“No ingreso Ciudad”)
Else
Response.write(“Ciudad ” % strCiudad)
End If
123
Creando Sitios de Comercio Electrónico
Condicionando el resultado
La cláusula WHERE incluye una condición de búsqueda que especifica las filas a
recuperar. Conceptualmente, SQL recorre cada fila de la tabla, una a una, y aplica
la condición de búsqueda a la fila. Cuando aparece un nombre de columna en la
condición de búsqueda. Por cada fila, la condición de búsqueda puede producir uno
de tres resultados:
Por ejemplo para obtener la lista de artículo con precio menor a 100 soles
anotaríamos:
=, <, >, SQL calcula y compara los valores de dos expresiones SQL por cada fila
>=, >=, de datos. Las expresiones pueden ser tan simples como un nombre de
<>, !=, columna o una constante, o pueden ser expresiones aritméticas más
!<, !> complejas.
AND Y lógico
OR O lógico
NOT Negación
124
Creando Sitios de Comercio Electrónico
Muestra los Id de los Vendedores que han emitido documentos antes del
06/01/2000
Una lista de los documentos que no las haya emitido el Vendedor E00005
125
Creando Sitios de Comercio Electrónico
Caracteres comodín
En el parámetro LIKE puede incorporar caracteres comodín que sustituyan a un
caracter o a grupo de ellos, estos son:
SELECT DesArticulo
FROM Articulo
WHERE DesArticulo LIKE '%ro%'
SELECT NomVendedor
FROM Vendedor
WHERE NomVendedor LIKE '_A%'
Una lista de Vendedores, donde la primera letra del nombre pueda ser J, K o L y la
segunda ‘ A’:
126
Creando Sitios de Comercio Electrónico
En algunos casos los resultados de la consulta pueden ser un único valor, como en
el siguiente ejemplo: ¿A cuanto asciende las ventas realizadas por el vendedor
V00005?
Este resultado sigue siendo una tabla, aunque sólo conste de una fila y una
columna. Finalmente, es posible que una consulta produzca cero filas de resultados,
como en este ejemplo: Liste los artículos cuyo precio sea mayor a S/ 5000
127
Creando Sitios de Comercio Electrónico
SELECT IdVendedor
FROM Documento
128
Creando Sitios de Comercio Electrónico
El parámetro BETWEEN incluye los valores extremos del rango, por ejemplo si el
campo de búsqueda es Fecha, luego de BETWEEN deberá anotar el valor inferior,
luego AND seguido del valor superior.
Para negar esta expresión sólo debe anteponer el operador NOT a BETWEEN, por
ejemplo:
Para el caso de campos que contienen valores NULL, se define las siguientes reglas
en la cláusula BETWEEN:
129
Creando Sitios de Comercio Electrónico
Todos los elementos en la lista de valores objetivo deben tener el mismo tipo de
datos, y ese tipo debe ser comparable al tipo de datos de la expresión de la
condición. Al igual que el caso BETWEEN, el caso IN no añade potencia expresiva a
SQL, ya que la condición de búsqueda.
X IN (A, B, C)
Es completamente equivalente a:
Cuando deba especificar múltiples condiciones en una consulta, tendrá que usar los
operadores lógicos AND, OR y NOT, las siguientes tablas le serán de mucha ayuda:
Caso AND:
AND TRUE FALSE NULL
TRUE TRUE FALSE NULL
FALSE FALSE FALSE NULL
NULL NULL NULL NULL
130
Creando Sitios de Comercio Electrónico
Caso OR:
OR TRUE FALSE NULL
TRUE TRUE TRUE TRUE
FALSE TRUE FALSE NULL
NULL TRUE NULL NULL
Caso NOT:
NOT TRUE FALSE NULL
FALSE TRUE NULL
Un ejemplo: Listar los comprobantes emitidos por los vendedores V00003, V00007,
que hayan hecho ventas entre abril y julio o los días martes, jueves, sabado:
131
Creando Sitios de Comercio Electrónico
Al igual que las filas en una tabla en la base de datos las filas de los resultados de
una consulta no están dispuestas en ningún orden particular. Se puede pedir a SQL
que ordene los resultados de una consulta incluyendo la cláusula ORDER BY en la
sentencia SELECT. La cláusula ORDER BY, seguidas de una lista de especificaciones
de ordenación separadas por comas. Por ejemplo, podemos ordenar los
comprobantes según el id del vendedor y luego por la fecha:
Por omisión, SQL ordena los datos en consecuencia ascendente, también puede
incluir la palabra clave ASC para especificar el orden ascendente. Para solicitar
ordenación en secuencia descendente, se incluye la palabra clave DESC en la
especificación de ordenación, como en este ejemplo:
132
Creando Sitios de Comercio Electrónico
Función Descripción
AVG([ALL/DISTINCT] Retorna el promedio de una expresión columna
exp) numérica
Para que SQL elimine valores duplicados de una columna antes de aplicarle una
función de columna use la palabra clave DISTINCT.
SELECT MAX(PreVenta)
FROM Articulo
Para calcular el total por las ventas realizadas por el vendedor “V00002”
anotaríamos:
SELECT COUNT(*)
FROM Vendedor
133
Creando Sitios de Comercio Electrónico
SELECT COUNT(TelVendedor)
FROM Vendedor
WHERE TelVendedor IS NOT NULL
SELECT COUNT(*)
FROM Vendedor
WHERE TelVendedor IS NOT NULL
Observe que la función COUNT( ) ignora los valores de los datos en la columna;
simplemente cuenta cuántos datos hay. En consecuencia, no importa realmente
que columna se especifica como argumento de la función COUNT( ). El último
ejemplo podría haberse escrito igualmente:
Resulta mas practico solucionar el ejemplo anterior mediante la función COUNT (*)
que cuenta filas en lugar de valores de datos. He aquí la misma consulta, reescrita
una vez utilizar la función COUNT (*):
134
Creando Sitios de Comercio Electrónico
Consultas Agrupadas
Las consultas anteriores que incluyen funciones de columna en una expresión,
generan un simple número para una tabla como un total al final de informe. Puede
ampliar la capacidad de estas funciones realizando el cálculo sobre grupos
específicos de datos al igual que los subtotales de un informe.
SELECT SUM(SubTotal)
FROM Documento
SELECT IdVendedor,
Emitidos = COUNT (*)
FROM Documento
GROUP BY IdVendedor
SELECT IdVendedor,
NumComprobantes = COUNT (*)
FROM Documento
WHERE DATEPART(mm,Fecha) = 1
GROUP BY IdVendedor
135
Creando Sitios de Comercio Electrónico
SQL puede agrupar los resultados de consulta en base a contenidos de dos o más
columnas. Por ejemplo, supongamos que se desea agrupar los comprobantes por
cada mes y por cada Vendedor. Esta consulta agrupa los datos basándose en
ambos criterios:
136
Creando Sitios de Comercio Electrónico
Averiguaremos el total por cada una de los comprobantes emitidos donde el total
sea menor a S/. 2000
SELECT IdDocumento,
'Total por Documento',
SUM(SubTotal)
FROM Documento
GROUP BY IdDocumento
HAVING SUM(SubTotal) < 2000
137
Creando Sitios de Comercio Electrónico
SQL permite recuperar datos que responden a estas peticiones mediante consultas
multitabla que componen (JOIN) datos procedentes de dos o más tablas.
SELECT tabla.campo,
tabla.campo, …
FROM tabla [Tipo_Join] JOIN tabla ON condicion
[WHERE condicion]
SELECT tabla.campo,
tabla.campo, …
FROM tablas
WHERE tabla.campo Operador_Join tabla.campo
SELECT tabla.campo,
tabla.campo, …
FROM tabla [Tipo_Join] JOIN tabla ON condicion
[WHERE condicion]
138
Creando Sitios de Comercio Electrónico
SELECT tabla.campo,
tabla.campo, …
FROM tablas
[WHERE tabla.campo Operador_Join tabla.campo
Operador de Descripción
combinación
= Igual a
> Mayor que
> Menor que
>= Mayor e igual que
<= Menor e igual que
<> Diferente que
Veamos un ejemplo:
Para comprender mejor las facilidades que SQL proporciona para consultas
multitabla lo mejor es comenzar con una petición simple que combina datos de dos
tablas diferentes: Obtenga una lista de las Documento emitidas con su respectivo
total e igv (tablas Documento y Detalle)
SELECT Detalle.IdDocumento,
SubTotal=STR(PreVenta*Cantidad,7,2),
igv = STR(PreVenta*Cantidad*0.18,7,2)
FROM Documento INNER JOIN Detalle
ON Documento.IdDocumento = Detalle.IdDocumento
Las consultas multitabla más comunes implican a dos tablas que tienen una
relación natural padre-hijo. La consulta referente a Documento y Detalle del
ejemplo anterior es un ejemplo de tal tipo de consulta. Cada línea de Detalle (hijo)
tiene un Documento asociado (padre), y cada Documento (padre) puede tener
139
Creando Sitios de Comercio Electrónico
varias líneas de Detalle asociados (hijos). Los pares de filas que generan los
resultados de la consulta son combinaciones de fila padre-hijo.
Las claves foráneas y las claves primarias crean relaciones padre-hijo en una base
de datos SQL. La tabla que contiene la clave foránea es el hijo en la relación; la
tabla con la clave primaria es el padre. Para ejercitar la relación padre-hijo en una
consulta debe especificarse una condición de búsqueda que compare la clave
foránea y la clave primaria. Veamos otro ejemplo:
En SQL ANSI:
La tabla Vendedor (hijo) contiene IdVendedor, una clave foránea para la tabla
Documento (padre).
SQL puede combinar datos de tres o más tablas utilizando las mismas técnicas
básicas utilizadas para las consultas de dos tablas.
He aquí un sencillo ejemplo de una composición con tres tablas: Listar los
comprobantes emitidas en el mes de Julio, incluyendo el nombre del Vendedor y el
nombre de la empresa:
SELECT Documento.IdDocumento,
Vendedor=Vendedor.NomVendedor,
Empresa =Empresa.NomEmpresa,
Documento.Fecha
FROM Documento , Vendedor, Empresa
WHERE Documento.IdVendedor = Vendedor.IdVendedor
AND Documento. IdEmpresa = Empresa.IdEmpresa
AND DATEPART(mm, Documento.Fecha) = 2
140
Creando Sitios de Comercio Electrónico
He aquí otra consulta de tres tablas que utiliza una disposición diferente de las
relaciones padre- hijo: Listar el nombre de los Vendedores, el numero de factura, y
el subtotal por sus compras efectuadas.
SELECT Vendedor.NomVendedor,
Documento.IdDocumento,
SubTotal = SUM(Detalle.PreVenta*Detalle.Cantidad)
FROM Detalle, Documento, Vendedor
WHERE Detalle.IdDocumento = Documento.IdDocumento
AND Documento.IdVendedor = Vendedor.IdVendedor
GROUP BY Vendedor.NomVendedor, Documento.IdDocumento
141
Creando Sitios de Comercio Electrónico
Muestre los comprobantes emitidas en los días en que un nuevo Vendedor fue
contratado (se asume la presencia del campo FecIng de tipo fecha en la tabla
Vendedor).
SELECT Documento.IdDocumento,
Documento.Fecha,
Vendedor.NomVendedor
FROM Documento, Vendedor
WHERE Documento.Fecha = Vendedor.FecIng
Los resultantes de esta consulta provienen de los pares de filas de las tablas
Documento y Vendedor en donde el valor en la columna Documento.Fecha coincide
con el valor en la columna Vendedor.FecIng para el Vendedor.
Ninguna de estas columnas es una clave foránea o una clave primaria, y la relación
entre los pares de filas es ciertamente una relación extraña la única cosa que los
comprobantes y Vendedores correspondientes tienen en común es que resultan
tener las mismas fechas. Sin embargo, SQL compone las tablas felizmente.
Las columnas de emparejamiento como las de este ejemplo generan una relación
de muchos a muchos entre las dos tablas. Puede haber muchos comprobantes que
compartan una única fecha de contrato del vendedor, y más de un vendedor puede
haber sido contratado en la fecha de Documento de un determinado Documento.
En la consulta:
SELECT *
FROM Documento, Vendedor
WHERE Documento.IdVendedor = Vendedor.IdVendedor
Obtendria un resultado con todos los campos de todas las tablas. Esto no es
frecuente por cierto.
142
Creando Sitios de Comercio Electrónico
SELECT C.NomVendedor,
F.Fecha,
F.IdDocumento
FROM Documento F, Vendedor C
WHERE F.IdVendedor = C.IdVendedor
Las operaciones que se pueden efectuar a partir de una sola tabla se puede
extender a multiples tablas, veamos algunos ejemplos:
Calcular el total de ventas, el igv y el total por comisiones (se asume el 10% del
total):
SELECT
Ventas = SUM(Detalle.PreVenta*Detalle.Cantidad),
IGV = SUM(Detalle. PreVenta *Detalle.Cantidad)*0.18,
Comision=SUM(Detalle.PreVenta*Detalle.Cantidad)*0.1
FROM Documento, Detalle, Vendedor
WHERE Documento.IdDocumento = Detalle.IdDocumento AND
Documento. IdVendedor = Vendedor.IdVendedor
SELECT E.NomVendedor,
Vendio=SUM(D.PreVenta*D.Cantidad),
Comision = SUM(D.PreVenta*D.Cantidad)*0.1,
Neto= SUM(D. PreVenta *D.Cantidad) -
SUM(D. PreVenta *D.Cantidad)*0.1
FROM Documento F, Detalle D, Vendedor E
WHERE F.IdDocumento = D.IdDocumento AND
F.IdVendedor = E. IdVendedor
GROUP BY E.NomVendedor
143
Creando Sitios de Comercio Electrónico
Utilizando Subconsultas
Una subconsulta es una consulta que aparece dentro de la cláusula WHERE o
HAVING de otra sentencia SQL. Las subconsultas proporcionan un modo eficaz y
natural de manejar las peticiones de consultas que se expresan en términos de los
resultados de otras consultas. He aquí un ejemplo de tal tipo de petición.
“Listar aquellos articulos cuyo precio sea mayor o igual al precio promedio de los
articulos vendidos”
Ahora:
SELECT DesArticulo,
PreVenta
FROM Articulo
WHERE PreVenta >= ???
SELECT AVG(Detalle.PreVenta)
FROM Detalle
La subconsulta esta siempre encerrada entre paréntesis, pero por otra parte tiene
el formato familiar de una sentencia SELECT, con una cláusula FROM y cláusulas
opcionales WHERE, GROUP BY y HAVING. El formato de estas cláusulas en una
subconsulta es idéntico al que tienen en una sentencia SELECT, y efectúan sus
funciones normales cuando se utilizan dentro de una subconsulta. Sin embargo,
hay unas cuantas diferencias entre una subconsulta y una sentencia SELECT real:
Una subconsulta debe producir una única columna de datos como resultados. Esto
significa que una subconsulta siempre tiene un único elemento de selección en su
cláusula SELECT.
144
Creando Sitios de Comercio Electrónico
SELECT Vendedor.IdVendedor
FROM Documento, Vendedor
WHERE Documento. IdVendedor = Vendedor. IdVendedor
AND DATEPART(dw,Fecha) = 3
GROUP BY Vendedor. IdVendedor
Ahora presentaremos la lista de Empresas que fueron atendidos por los Vendedores
antes seleccionados:
Si desearamos una lista de los Vendedores que no fueron atendidos por vendedores
que trabajaron un dia martes, solo tendriamos que anteponerle a IN el operador de
negacion NOT
145
Creando Sitios de Comercio Electrónico
146
Creando Sitios de Comercio Electrónico
Operaciones de Mantenimiento
Las principales operaciones son las de agregar registros, borrar y actualizar datos
Agregando registros
La adicion de un nuevo registro a una tabla se efectua mediante el comando:
Tambien se puede tomar una lista de filas, resultado de una selección y trasladarlas
a otra tabla, por ejemplo se asumimos la existencia de la tabla FacJulio con campos
similares a la tabla Documento, trasladariamos las Documento emitidas en julio de
la siguiente forma:
147
Creando Sitios de Comercio Electrónico
Agrega.asp
<HEAD>
<TITLE>Agregando registros</TITLE>
</HEAD>
<BODY>
<%If request.form = “” Then %>
<FORM NAME="Formulario" ACTION=”Agregar.asp”
METHOD="POST">
<TABLE BORDER=0>
<TR><TD>Nombre: <INPUT TYPE="TEXT" NAME="nombre"
SIZE="20"></TD></TR>
<TR><TD>Apellidos: <INPUT TYPE="TEXT"
NAME="apellidos" SIZE="40"></TD></TR>
<TR><TD>Email: <INPUT TYPE="TEXT" NAME=”email"
SIZE="2" MAXLENGTH="2"></TD> </TR>
</TABLE>
<INPUT TYPE="SUBMIT"
VALUE="Enviar"> <INPUT TYPE="RESET" VALUE="Borrar">
</FORM>
<%Else
nom = Request.Form("nombre")
ape = Request.Form("apellidos")
email = Request.Form(”email")
Set con = Server.CreateObject("ADODB.Connection")
con.Open ”CadenaConexion"
sql = "INSERT INTO Cliente (Nombre, Apellido, Email)
VALUES('" & nom& "','" & ape& "','" & email& "')"
con.Execute(sql)
If Err = 0 Then
Response.Write "Inserción correcta."
Else
Response.Write "Error en Inserción."
End If
con.Close
Set con = Nothing
End If%>
</BODY>
148
Creando Sitios de Comercio Electrónico
Borrando registros
La instruccion DELETE elimina filas de una tabla.
Podemos borrar tambien varios registros al mismo tiempo, por ejemplo los
Vendedores que atendieron hace mas de 5 años atrás:
149
Creando Sitios de Comercio Electrónico
Por ejemplo para renovar el telefono del Empresa 'E0004' por el de 2257896,
anotaria:
150
Creando Sitios de Comercio Electrónico
Global.asa
Sub Application_OnStart()
Application("StrConn") =
"Provider=Microsoft.Jet.OLEDB.3.51;Data Source=C:\Libros\Libro
ASP\PeruAdventure/bd/PeruAdv.mdb"
End Sub
Sub Session_OnStart()
Session("IdCliente") = ""
Session("NomCliente") = ""
End Sub
</SCRIPT>
151
Creando Sitios de Comercio Electrónico
Falta Grafico
152
Creando Sitios de Comercio Electrónico
Asi mismo se hace referencia a un archivo ADOVBS.INC que contiene las serie de
constantes para el tratamiento del objeto ADO.
Default.asp
153
Creando Sitios de Comercio Electrónico
Procedimiento de usuario
Los procedimientos al que hace referencia el archivo Default.asp se encuentran en
Util.asp y son los siguientes:
Procedimiento Write
<%
Private Sub Write( Cadema )
Response.Write(Cadema)
End Sub
Procedimiento Cabecera
Procedimiento PiePagina
154
Creando Sitios de Comercio Electrónico
Procedimiento Barra
155
Creando Sitios de Comercio Electrónico
Funcion FechaChr
Uno de los problemas que se presenta con las fecha es cuando se desea mostrarlas
en forma de texto, una alternativa que funciona ya sea en un servidor Windows
NT/2000 en ingles o español es la siguiente:
Function FechaChr(fecha)
Dim aDia, aMes
aDia = Array ("","Lunes","Martes","Miércoles","Jueves",
"Viernes","Sábado","Domingo")
aMes = Array ("","Enero","Febrero","Marzo","Abril","Mayo",
"Junio","Julio","Agosto", "Septiembre","Octubre",
"Noviembre","Diciembre")
FechaChr = aDia (weekday (fecha, 2)) & ", " & Day (fecha) & "
de " & aMes(Month(fecha)) & " de " & Year(fecha)
End function
Funcion HoraChr
Function HoraChr(fecha)
Dim cHora, cMinutos
cHora = Hour(fecha)
cMinutos = Minute(fecha)
If (cHora < 10) then
cHora = "0" & cHora
End If
If (cMinutos < 10) then
cMinutos = "0" & cMinutos
End If
HoraChr= cHora & ":" & cMinutos
End Function
%>
156
Creando Sitios de Comercio Electrónico
Procedimiento MostrarCiudades
157
Creando Sitios de Comercio Electrónico
Nuevocliente.asp
<HEAD>
<TITLE>Peru Travel - Nuevo Cliente</TITLE>
</HEAD>
<BODY>
<% Cabecera()
158
Creando Sitios de Comercio Electrónico
'Creamos el Id correlativo
sql = "Update Parametro Set Valor = Valor + 1 " &
"Where Campo = 'Cliente'"
cn.Execute(sql)
'Insertamos el cliente
Ape = Request.Form("Ape")
Nom = Request.Form("Nom")
EMail = Request.Form("Email")
Clave = Request.Form("Clave")
FN = Request.Form("FN")
Sexo = Request.Form("Sexo")
Pais = Request.Form("Pais")
Ciudad = Request.Form("Ciudad")
Tipo = " "
sql = "Insert Into Cliente (IdCliente, Apellido, Nombre,
EMail, Clave, FechaNac, Sexo, Pais, Ciudad, Tipos) Values( '"&
id &"','"& Ape&"','"& Nom&"','"& Email&"','"& Clave&"',#"&
FN&"#,'"& Sexo&"','"& Pais&"','"& Ciudad&"','"& Tipo &"')"
cn.Execute(sql)
<h1>Registro de Clientes</h1>
159
Creando Sitios de Comercio Electrónico
<TR>
<TD>Sexo (M o F)</TD>
<TD><INPUT id=text3 name=Sexo maxLength=1></TD>
</TR>
<TR>
<TD>Fecha de Nacimiento</TD>
<TD><INPUT id=text6 name=FN maxLength=15></TD></TR>
<TR>
<TD>Email</TD>
<TD><INPUT id=text4 name=Email maxLength=40></TD>
</TR>
<TR>
<TD>Contraseña</TD>
<TD><INPUT type=password id=password1 maxLength=20
name=Clave></TD>
</TR>
<TR>
<TD>País</TD>
<TD><INPUT id=text7 name=Pais maxLength=20></TD>
</TR>
<TR>
<TD>Ciudad</TD>
<TD><INPUT id=text8 name=Ciudad maxLength=20>
</TD>
</TR>
</TABLE>
<INPUT id=submit1 type=submit value=Aceptar name=submit1>
</FORM>
<% End If %>
<%Barra("Vacia")%>
<% PiePagina() %>
</BODY>
</HTML>
160
Creando Sitios de Comercio Electrónico
RegistraCliente.asp
<%@ Language=VBScript%>
<% Option Explicit
Response.Expires = -1
Response.Buffer = True
dim cn
dim rs%>
<!--#include file="ADOVBS.INC"-->
<!--#include file="Util.ASP"-->
<HEAD>
<TITLE>Peru Travel - Conectar</TITLE>
</HEAD>
<BODY bgColor=#ffffff >
<% Cabecera()
If Request.Form="" Then
Write( "Ingrese sus datos para iniciar una sesión<BR><BR>")
Write("<A href=Default.asp>Continuar</A>")
Else
set cn=Server.CreateObject("ADODB.Connection")
cn.Open Application("StrConn")
Set rs = Server.CreateObject("ADODB.RecordSet")
With rs
.ActiveConnection = cn
.CursorType = adopenstatic
.CursorLocation = aduseclient
.Source = "SELECT * FROM Cliente Where Email = '" & _
Request.Form("Email") & "' And Clave = '" & _
Request.Form("Password") & "'"
.Open
End With
if rs.RecordCount > 0 Then
Session("IdCliente") = rs.Fields("IdCliente")
Session("NomCliente") = rs.Fields("Nombre") & " " &
rs.Fields("Apellido")
Set rs = Nothing
set cn = Nothing
Response.Redirect "Sesion.asp?tipo=Perfil"
End If
Error("Conexion")
Set rs = Nothing
set cn = Nothing
End If
PiePagina() %>
</BODY>
161
Creando Sitios de Comercio Electrónico
Inicio de la sesion
Una vez que un cliente se haya inscrito o haya ingresado a la pagina, deberá
mostrarse el catalogo de paquetes turisticos.
Sesion.asp
<HEAD>
<TITLE>Peru Travel - Catalogo</TITLE>
</HEAD>
<BODY >
<%
Tipo=Request.QueryString("Tipo")
162
Creando Sitios de Comercio Electrónico
If Tipo="" Then
Tipo="Error"
end if
Cabecera()
Barra("Carrito")
%>
<% Barra("Vacia")
PiePagina() %>
</BODY>
Procedimiento Error
163
Creando Sitios de Comercio Electrónico
Procedimiento MostrarCatalogo
164
Creando Sitios de Comercio Electrónico
165
Creando Sitios de Comercio Electrónico
Reserva de paquetes
Mediante éste módulo el cliente podrá realizar la reserva de un paquete, la
obtensión de los paquetes se realiza con ayuda de una consulta: V_Catalogo.
Reservar.asp
<%@ Language=VBScript%>
<%
Option Explicit
Response.Expires = -1
Response.Buffer = True
Dim IdPaquete, cn, rs
%>
<!--#include file="ADOVBS.INC"-->
<!--#include file="Util.ASP"-->
<HEAD>
<TITLE>Peru Travel - Reservar</TITLE>
</HEAD>
<BODY bgColor=#ffffff >
<%
Cabecera()
IdPaquete = Request.QueryString("IdPaquete")
If Session("NomCliente") = "" Then
Error("Sesion")
ElseIf IdPaquete = "" Then
Error("Paquete")
Else
Barra("Carrito")
set cn=Server.CreateObject("ADODB.Connection")
cn.Open Application("StrConn")
Set rs = Server.CreateObject("ADODB.RecordSet")
With rs
.ActiveConnection = cn
.CursorType = adopenstatic
.CursorLocation = aduseclient
.Source="SELECT * FROM v_Catalogo Where IdPaquete='"&_
IdPaquete & "'"
.Open
End With %>
<TABLE width="750" border=0 cellspacing=0>
<TR>
<TD width=150 valign=middle align=center>
<BR>
<IMG SRC="Recursos\
<%=rs.Fields("IdPaquete")%>.jpg"
WIDTH=130 HEIGHT=130>
</TD>
<TD width=500 bgcolor=#fafad2 valign=top>
<BR><B><%Write(rs.Fields("Nombre"))%></B><BR>
<FONT SIZE="-8" Face="Arial">
166
Creando Sitios de Comercio Electrónico
Destino: <%=rs.Fields("Ciudad")%><BR>
Tipo: <%=rs.Fields("Tipo")%><BR>
Categoria: <%=rs.Fields("Categoria")%><BR>
Cupos: <%=rs.Fields("Cupos")%><BR>
Costo US$: <%=rs.Fields("PrecioVenta")%><BR>
Del <%=rs.Fields("FechaInicio")%>
Al <%=rs.Fields("FechaTermino")%>
</FONT>
<BR><BR>
</TD>
<TD width=100 valign=middle align=center>
<FORM action="GrabaReserva.ASP" method=post>
<INPUT type="hidden" name=IdPaquete
value=<%Write(IdPaquete)%> >
<INPUT type="hidden" name=IdCliente
value=<%Write(Session("IdCliente"))%> >
Número de Cupos<BR><BR>
<INPUT type="text" name=Cupos value=1 width=10>
<BR><BR>
<INPUT type="submit" value="Reservar"
name=submit1>
</FORM>
</TD>
</TR>
</TABLE>
<%End If
Barra("Vacia")
PiePagina() %>
</BODY>
167
Creando Sitios de Comercio Electrónico
168
Creando Sitios de Comercio Electrónico
Grabando un reserva
GrabaReserva.asp
<HEAD>
<TITLE>Perú Travel - Cargar Reserva</TITLE>
</HEAD>
<BODY bgColor=#ffffff >
<% Cabecera()
Barra("Carrito")
If Session("NomCliente") = "" Then
Error("Sesion")
ElseIf Request.Form = "" Then
Error("Paquete")
Else
' Captura los datos
IdPaquete = Request.Form("IdPaquete")
IdCliente = Request.Form("IdCliente")
Cupos = Request.Form("Cupos")
' Establecer la conexion
set cn=Server.CreateObject("ADODB.Connection")
cn.Open Application("StrConn")
'Graba la reserva
sql="Insert Into Reserva(IdReserva,IdCliente,IdPaquete,
Fecha,Cantidad,TotalVenta,Confirmado,Anulado)
Values('" & Id&"','"&IdCliente&"','"&IdPaquete&"',#"&
Now&"#,"&Cupos&","&Cupos*Precio&",0,0)"
cn.Execute(sql)
169
Creando Sitios de Comercio Electrónico
170
Creando Sitios de Comercio Electrónico
VerReserva.asp
<%@ Language=VBScript%>
<% Option Explicit
Response.Expires = -1
Response.Buffer = True
Dim IdPaquete, cn, rs %>
<!--#include file="ADOVBS.INC"-->
<!--#include file="Util.ASP"-->
<HEAD>
<TITLE>Peru Travel - Reservas</TITLE>
</HEAD>
<BODY bgColor=#ffffff >
<% Cabecera()
If Session("NomCliente") = "" Then
Error("Sesion")
Else
Barra("Continuar")
set cn=Server.CreateObject("ADODB.Connection")
cn.Open Application("StrConn")
Set rs = Server.CreateObject("ADODB.RecordSet")
With rs
.ActiveConnection = cn
.CursorType = adopenstatic
.CursorLocation = aduseclient
.Source="SELECT * FROM v_Reservas Where IdCliente='"&_
Session("IdCliente") & "'"
.Open
End With%>
<TABLE width="750" border=0 cellspacing=0>
<% do while not rs.EOF %>
<TR>
<TD width=150 valign=middle align=center>
<IMG SRC="Recursos\
<%Write(rs.Fields("IdPaquete"))%>.jpg"
WIDTH=120 HEIGHT=100>
</TD>
<TD width=500 bgcolor=#fafad2 valign=top>
<B><%Write(rs.Fields("Nombre"))%></B><BR>
<FONT SIZE="-8" Face="Arial">
Nro. Reserva:
<%Write(rs.Fields("IdReserva"))%><BR>
Destino: <%Write(rs.Fields("Ciudad"))%><BR>
Tipo: <%Write(rs.Fields("Tipo"))%><BR>
Categoria:
<%Write(rs.Fields("Categoria"))%><BR>
171
Creando Sitios de Comercio Electrónico
Cupos: <%Write(rs.Fields("Cupos"))%><BR>
Costo: $.
<%Write(rs.Fields("PrecioVenta"))%><BR>
Total Venta: $.
<%Write(rs.Fields("TotalVenta"))%><BR>
Del <%=rs.Fields("FechaInicio")%>
Al <%=rs.Fields("FechaTermino")%>
</FONT>
<BR><BR>
</TD>
<TD width=100 valign=middle align=center>
<A href=ProcesaReserva.asp?IdReserva=
<%=rs.Fields("IdReserva")%>&Accion=Pagar>
Pagar</A>
<BR>
<A href=ProcesaReserva.asp?IdReserva=
<%=rs.Fields("IdReserva")%>&Accion=Anular>
Anular</A>
</TD>
</TR>
<% rs.MoveNext
loop %>
</TABLE>
<% Set rs = Nothing
cn.Close
Set cn = Nothing
End If
PiePagina() %>
</BODY>
172
Creando Sitios de Comercio Electrónico
173
Creando Sitios de Comercio Electrónico
Una reserva puede ser pagada o anulada, tal accion podrá realizarla el cliente
mediante los vinculos que se muestran a la derecha.
ProcesaReserva.asp
<HEAD>
<TITLE>Perú Travel - Cargar Reserva</TITLE>
</HEAD>
<BODY bgColor=#ffffff >
<% Cabecera()
Barra("Carrito")
IdReserva = Request.QueryString("IdReserva")
Accion = Request.QueryString("Accion")
If Session("NomCliente") = "" Or IdReserva = "" Then
Error("Sesion")
Else
' Establecer la conexion
set cn=Server.CreateObject("ADODB.Connection")
cn.Open Application("StrConn")
If Accion = "Anular" Then
sql="Update Reserva Set Anulado = -1, Confirmado=0
Where IdReserva = '"&IdReserva&"'"
cn.Execute(sql)
End If
174
Creando Sitios de Comercio Electrónico
<CENTER>
PiePagina() %>
</BODY>
175