Você está na página 1de 127

Todos

direitos
reservados.
Proibida a
reproduo, mesmo
parcial, por qualquer
processo mecnico,
eletrnico,
reprogrfico, etc.

ACTIVE SERVER
PAGES

Rua dos Otoni, 881/9 andar - Funcionrios


PABX/FAX : (31) 3273-2822
CEP 30150-270 - Belo Horizonte - MG

ACTIVE SERVER PAGES


SUMRIO
INTRODUO AO ASP ............................................................................................................................................................1
COMPARANDO O ASP COM OUTRAS TECNOLOGIAS ..................................................................................................2
TECNOLOGIAS INICIAIS ...............................................................................................................................................................2
TECNOLOGIAS ADICIONAIS PARA IIS ..........................................................................................................................................2
COMO FUNCIONA UMA PGINA ASP?...............................................................................................................................3
O AMBIENTE DE DESENVOLVIMENTO .............................................................................................................................4
PLATAFORMAS DE DESENVOLVIMENTO DO ASP .........................................................................................................................4
Microsoft Personal Web Server .............................................................................................................................................4
Microsoft Internet Information Server (IIS) ...........................................................................................................................5
TRABALHANDO COM O ASP.................................................................................................................................................8
CONHECENDO A ESTRUTURA DA PROGRAMAO ASP ................................................................................................................8
OS OBJETOS DO ASP .............................................................................................................................................................11
OBJETO RESPONSE ....................................................................................................................................................................11
OBJETO REQUEST ......................................................................................................................................................................12
OBJETO SERVER ........................................................................................................................................................................12
OBJETO APPLICATION ...............................................................................................................................................................13
OBJETO SESSION .......................................................................................................................................................................13
A LINGUAGEM VBSCRIPT ...................................................................................................................................................15
A LINGUAGEM VBSCRIPT POSSIBILITAR, POR MEIO DO ASP, A CRIAO DA APLICAO VALIDANDO AS INFORMAES E
ARMAZENANDO-AS NO BANCO DE DADOS. O ASP EXECUTAR AS SOLICITAES DO VBSCRIPT JUNTO COM SEUS OBJETOS E
DEVOLVER UMA RESPOSTA AO CLIENTE NO FORMATO HTML. ASSIM, O VBSCRIPT EXECUTADO NO SERVIDOR. .................15
VARIVEIS E TIPOS DE DADOS ..................................................................................................................................................15
OPERADORES ............................................................................................................................................................................16
Operadores aritmticos........................................................................................................................................................16
Operador de concatenao ..................................................................................................................................................17
Operadores relacionais........................................................................................................................................................17
Operadores lgicos ..............................................................................................................................................................17
PRINCIPAIS COMANDOS DO VBSCRIPT ......................................................................................................................................18
Comandos Condicionais ......................................................................................................................................................18
Comandos de repetio........................................................................................................................................................19
FUNES ...................................................................................................................................................................................19
Funes para verificao de tipo de variveis ....................................................................................................................20
Funes para converso de tipos.........................................................................................................................................20
Funes para manipulao de nmeros: .............................................................................................................................21
Funes para manipulao de datas ...................................................................................................................................21
Funes para manipulao de strings .................................................................................................................................22
CDIGOS PARA TESTES DOS COMANDOS E FUNES VBSCRIPT ................................................................................................23
Estrutura condicional select case.........................................................................................................................................23
</BODY></HTML>............................................................................................................................................................24
Estrutura de repetio FOR .................................................................................................................................................24
Estrutura de repetio while ................................................................................................................................................24
AS ROTINAS...............................................................................................................................................................................26

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

ACTIVE SERVER PAGES


TESTANDO OS OBJETOS DO ASP.......................................................................................................................................28
TESTE DO OBJETO RESPONSE.....................................................................................................................................................28
Mtodo Write........................................................................................................................................................................28
mtodo end ...........................................................................................................................................................................28
mtodo redirect ....................................................................................................................................................................28
Propriedade Buffer...............................................................................................................................................................30
Coleo Cookie ....................................................................................................................................................................30
TESTANDO O OBJETO SESSION ...................................................................................................................................................31
TESTE DO OBJETO REQUEST ......................................................................................................................................................33
Recuperando Cookies...........................................................................................................................................................33
Recuperando informaes de formulrios ...........................................................................................................................34
Recuperando informaes da string de pesquisa da URL ...................................................................................................36
Aes do formulrio em outro arquivo ................................................................................................................................39
TESTE DO OBJETO APPLICATION ................................................................................................................................................41
TESTANDO OBJETO SERVER ......................................................................................................................................................45
O mtodo mappath ...............................................................................................................................................................45
O mtodo createobject .........................................................................................................................................................46
CONHECENDO O SITE...........................................................................................................................................................51
O BANCO DE DADOS DO SITE .....................................................................................................................................................51
O MAPA DO SITE ........................................................................................................................................................................53
A DIRETIVA INCLUDE ..........................................................................................................................................................56
ACESSO AO BANCO DE DADOS..........................................................................................................................................59
CONHECENDO OS OBJETOS ADO ...............................................................................................................................................59
QUE TIPO DE PROVEDOR UTILIZAR ODBC OU OLE DB?...........................................................................................................60
PASSOS PARA ACESSAR O BANCO DE DADOS ..............................................................................................................................60

A LINGUAGEM SQL ...............................................................................................................................................................64


O COMANDO SELECT .................................................................................................................................................................64
critrios de seleo para texto .............................................................................................................................................67
Critrios de seleo com valores .........................................................................................................................................71
Ordenando os Dados............................................................................................................................................................71
CALCULANDO VALORES ..................................................................................................................................................72
Agrupando valores ...............................................................................................................................................................74
O COMANDO INSERT ...............................................................................................................................................................76
O COMANDO UPDATE ................................................................................................................................................................78
O COMANDO DELETE .................................................................................................................................................................78
CRIANDO A PGINA DE CADASTRO ................................................................................................................................79
CRIANDO A PGINA DE LOGIN .........................................................................................................................................92
O ARQUIVO LOGOUT.ASP ..........................................................................................................................................................95
O ARQUIVO DEFAULTON.ASP .....................................................................................................................................................95
CRIANDO A PGINA DE RESTRIO...............................................................................................................................96
CRIANDO A PGINA DE PESQUISA...................................................................................................................................97
BUSCANDO AS CATEGORIAS DO BANCO DE DADOS ....................................................................................................................98
CRIANDO A PESQUISA ................................................................................................................................................................98

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

ACTIVE SERVER PAGES


CRIANDO PGINA DE COMPRA ......................................................................................................................................104
PREPARANDO O FORMULRIO PARA A GRAVAO DO PRODUTO COMPRADO ...........................................................................105
INSERINDO O PRODUTO NO CARRINHO .....................................................................................................................................107

CRIANDO A PGINA DE PRODUTOS COMPRADOS ...................................................................................................110


EXCLUINDO ITENS DO CARRINHO ............................................................................................................................................112
CRIANDO A PGINA FINALIZA........................................................................................................................................116
ENVIANDO O E-MAIL DE CONFIRMAO ..................................................................................................................................121
CONCLUSO ..........................................................................................................................................................................123

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

ACTIVE SERVER PAGES


INTRODUO AO ASP
ASP (Active Server Pages - Pginas de Servidor Ativas) um ambiente para
programao por scripts no servidor, que voc pode usar para criar pginas dinmicas,
interativas e de alta performance. Como as pginas ASP, os scripts so executados no servidor e
no no browser do cliente. o prprio servidor que transforma os scripts em HTML padro,
fazendo com que qualquer browser do mercado seja capaz de acessar um site que usa ASP.
O ASP surgiu juntamente com o lanamento do Internet Information Server 3.0
(IIS), hoje j se encontra na verso 5.0. Esta uma soluo Microsoft, exigindo que o servidor
execute um sistema operacional da Microsoft (Windows 95/98, NT ou 2000). Os seguintes
servidores suportam o uso de pginas ASP:

Microsoft Internet Information Server verso 4.0 no Windows NT Server.

Microsoft Internet Information Server verso 5.0 no Windows 2000.

Microsoft Personal Web Server no Windows NT Workstation

Microsoft Personal Web Server no Windows 95 ou Windows 98

A grande vantagem que voc fica independe do browser que o cliente utiliza, pois
o servidor que possui a exigncia de ter um sistema operacional Microsoft. Assim, o cliente
pode navegar num site construdo em ASP com qualquer browser (seja ele Internet Explorer ou
Netscape Navigator).
Entre os recursos que podem ser implementados via ASP, podemos citar:

Programao em VBScript ou Jscript.

Acesso banco de dados.

Acesso a arquivos textos.

Captao de informaes de formulrios.

Captao de informaes sobre o visitante e sobre o servidor.

Uso de variveis e loops.

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.: 1

ACTIVE SERVER PAGES


COMPARANDO O ASP COM OUTRAS TECNOLOGIAS
Precisamos neste momento explicar porque escolhemos o ASP, visto que temos
outras tecnologias que podem ser utilizadas para contedo dinmico. O que o ASP oferece de
melhor em relao s outras tecnologias?

TECNOLOGIAS INICIAIS
Desde a primeira verso do IIS (Internet Information Server) o contedo dinmico
pode ser adicionado ao site por: aplicaes CGI, extenses e filtros ISAPI, Internet Database
Connector (IDC). A partir da verso 3.0 o ASP foi includo nestas opes. Quais as vantagens do
ASP em relao a estas tecnologias? que ele reuniu o que tinha de melhor em todas elas.
Abaixo alistamos as principais vantagens do uso do ASP.

Facilidade de programao e acesso a banco de dados (como o IDC), fcil


acesso ao sistema operacional (como o CGI ou ISAPI) e velocidade (como o
ISAPI).

Ambiente baseado em script de servidor, que conduz a aplicaes dinmicas,


interativas, que no consomem muito tempo de processamento.

H muitas ferramentas RAD (Rapid Application Development) disponveis


como, por exemplo, o Visual InterDev, que permitem que voc crie facilmente
pginas ASP.

TECNOLOGIAS ADICIONAIS PARA IIS


Allaire ColdFusion: servidor de aplicaes da Web que permite que voc construa
pginas sofisticadas. Usa um ambiente de script de servidor baseado em tags. Possui um IDE
(Integrated Development Environment) e pode ser usado para criar aplicativos dimensionveis
Aplicaes do Visual Basic para a Web: integradas com o ASP, as aplicaes do VB6
so visualizadas como "pginas da Web encapsuladas". O cdigo est contido em um nico
componente do Visual Basic, permitindo que voc acesse os mesmos recursos que acessaria em
uma pgina do ASP, porm com as melhorias de desempenho do processamento em uma
linguagem compilada.

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.: 2

ACTIVE SERVER PAGES


COMO FUNCIONA UMA PGINA ASP?
Quando o cliente acessa uma pgina ASP, imediatamente o Servidor IIS ou PWS
entra em ao e executa todos os scripts contidos nessa pgina, caso essa pgina faa algum tipo
de acesso banco de dados, ele tambm feito e o resultado desse acesso enviado para o
servidor. Aps tudo isso, o servidor retorna para o cliente uma pgina HTML simples, contendo o
resultado de suas requisies.
Observe o esquema a seguir:
* Rotina ASP

Servidor
IIS **

** Gera HTML
dinamicamente

Acesso
ao BD

Pginas
ASP *

HTML ***

*** Resultado
mostrado ao cliente

Browser
Cliente

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.: 3

ACTIVE SERVER PAGES


O AMBIENTE DE DESENVOLVIMENTO
Como os arquivos .asp so arquivos do tipo texto, eles podem ser escritos em
qualquer editor de texto simples, como o bloco de notas. Existem vrios editores que tornam
mais fcil a programao em ASP por deixarem o cdigo colorido, um exemplo o EditPlus. Mas,
se voc deseja um ambiente mais profissional, o Microsoft Visual InterDev o indicado.

PLATAFORMAS DE DESENVOLVIMENTO DO ASP


O ASP acha-se disponvel em vrias plataformas, devemos escolher a que se
adapta ao nosso ambiente. Exemplos:

MICROSOFT PERSONAL WEB SERVER


O PWS um servidor da Web desenvolvido para empresas ou pessoas que
precisam de um IIS em escala reduzida para aplicaes e desenvolvimentos de intranets.
A vantagem do PWS que ele pode ser executado em um sistema operacional
Windows 95, Windows 98 ou Windows NT Workstation de baixo custo.
Recursos principais do PWS para plataforma Windows 9x:

Suporte para ASP.

Servio WWW.

Interface Easy Web para administrao.

Suporte para Microsoft Transaction Server.

Suporte para Microsoft Message Queue Server.

FrontPage Extensions para facilitar a atualizao de sites.

Suporte para Activex Data Objects (ADO) e Remote Data Services (RDS).

um servidor da Web com baixo volume, limitado a um mximo de dez


usurios.

Os seguintes recursos esto disponveis s na plataforma Windows NT Workstation:

Servio de FTP.

Interface com Optional Internet Service Manager (ISM) para administrao.

Suporte para Autenticao.

Publicao com o uso de unidades locais e de rede.

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.: 4

ACTIVE SERVER PAGES


MICROSOFT INTERNET INFORMATION SERVER (IIS)
O IIS um servidor da Web que se integra no Windows NT Server e no Windows
2000. O IIS permite que voc publique informaes na Web e execute vrias aplicaes de
negcios usando o ASP. Esta a plataforma de desenvolvimento que utilizaremos em nosso
treinamento.
Recursos principais do IIS:

Index Server para indexao textual e pesquisa do contedo de um site.

Site Server Express para a anlise do contedo e do uso do site.

Servio de SMTP para o envio de e-mail.

Servio de NNTP para a hospedagem de newsgroup particulares.

Certificate Server para a emisso de certificados que podem ser usados para
a garantia de sites da Web.
No h limites para usurios.

ONDE SALVAR OS ARQUIVOS ASP


Quando o IIS instalado no Windows NT ou no Windows 2000 criada a pasta
Inetpub onde esto os diretrios que o IIS precisa para poder trabalhar o diretrio onde ficam
armazenadas os arquivos de um site o wwwroot. Dentro dessa pasta devemos criar uma pasta
para o site e armazenar todos os arquivos asp, htm, gifs, jpgs, etc. dentro dele.
Mas no basta apenas criar a pasta com os arquivos do site necessrio configurar
a pasta criada como uma pasta virtual, ou seja, uma pasta que possa ser acessada pelo browser
sem indicarmos todo o caminho fsico.
Para fazer essa configurao entre no Gerenciador do ISS (que no Windows 2000
est localizado no Painel de Controle dentro da pasta Ferramentas administrativas).

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.: 5

ACTIVE SERVER PAGES

Clique sobre a pasta do site que voc criou com o boto direito do mouse e
selecione a opo Propriedades (Properties).

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.: 6

ACTIVE SERVER PAGES

Deixe as opes marcadas como na tela acima, dessa forma voc poder acessar o
site diretamente de seu computador digitando o nome da sua mquina seguido do Local Path
definido nas propriedades. Voc tambm pode digitar http://localhost/o Local Path definido.

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.: 7

ACTIVE SERVER PAGES


TRABALHANDO COM O ASP
Assim chegamos a concluso que a linguagem ASP uma juno de programao
em VBScript (ou qualquer outro script que suporte o modelo ActiveX Scripting, como o
JavaScript),Objetos ActiveX e os seus prprios objetos.
VBScript uma linguagem criada a partir do Visual Basic, mas com algumas
limitaes, por motivos de segurana, so os blocos de construo bsicos usados nas pginas
ASP. usada como padro atualmente pelos programadores ASP.
Objetos ActiveX so funes prontas, j existentes no servidor. Essas funes
captam os parmetros de entrada dos dados, manipula-os de acordo com seu objetivo e ento os
envia para a sada. Um exemplo de ActiveX o Objeto ASPMail, o qual capta os dados de entrada
(nome, email, corpo da mensagem, etc), cria um email com esses dados e depois envia a
mensagem usando o servidor de SMTP configurado.
Objetos so add-ons que do a capacidade de captura e transmisso de variveis
entre as pginas, de criao e manipulao de cookies, sessions e publicidade rotativa nos sites,
a capacidade de captura de informaes sobre o Browser do usurio e sobre o servidor, de
consulta, alterao e adio de dados em Bando de Dados, de envio e recebimento de emails via
pgina WEB, e uma infinidade outras funes.
O ASP serve para voc disponibilizar em seu site contedo dinmico, ou seja,
deixar o usurio livro para solicitar informaes sobre o que ele quiser. Como o cdigo
armazenado no servidor e o usurio recebe apenas o HTML, voc est garantindo a sua
propriedade intelectual.
Imagine que voc possui um banco de dados com vrios artigos, sobre diferentes
assuntos. Se montar um site apenas com HTML, voc precisar criar inmeras pginas com cada
um dos artigos e links que direcionam para esta pasta. Com o ASP, voc criar apenas uma
pgina onde o usurio escolhe o assunto e v a lista com os assuntos disponveis. E uma outra
pgina padro que ser montado quando ele selecionar o artigo que deseja ler. Voc conseguir
sites teis, rpidos e com as informaes realmente necessrias para cada usurio
individualmente.

CONHECENDO A ESTRUTURA DA PROGRAMAO ASP


Uma vez que a linguagem ASP embutida dentro de pginas HTML, existe um
smbolo para diferenciar o que cdigo HTML do que cdigo ASP: <% cdigo asp %>
Abaixo um exemplo de pgina em HTML e ASP:

<html>
<title>Exemplo</title>
<p>Estou aprendendo ASP</p>
<%
' aspas simples significam comentrios dentro do cdigo
' a linha abaixo tem o mesmo efeito do cdigo HTML acima
response.write "<p> Estou aprendendo ASP </p>"
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.: 8

ACTIVE SERVER PAGES


%>

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.: 9

ACTIVE SERVER PAGES


</html>
ASP uma linguagem que veio para complementar a linguagem HTML. Observe o
cdigo abaixo:

<html>
<head><title>Como funciona o ASP?</title></head>
<body bgcolor="#FFFFFF">
<p><font face=Verdana,Arial><b>Ol Mundo!!!</font></b></p>
<%
response.write "<p><font face=Verdana,Arial><i>Ol
Mundo!!!</font></i></p>"
%>
<p><%= "Ol Mundo!!!" %></p>
</body></html>
Abaixo segue a simbologia e as convenes de uso da linguagem ASP:
<% incio do trecho de cdigo ASP
%> final do trecho de cdigo ASP
' (aspas simples) usada antes de comentrios dentro do cdigo. Quando
fazemos referncia a cdigo HTML dentro das tags ASP, e os valores das tags HTML precisem
estar entre aspas, devemos utilizar as aspas simples; como no exemplo anterior. Abaixo temos o
erro que gerado pelo servidor web (PWS ou IIS) quando cometemos o erro de trabalhar com
aspas duplas para HTML dentro do ASP.

= usado no modo de programao para a mesclagem de cdigos HTML e ASP.

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:10

ACTIVE SERVER PAGES


OS OBJETOS DO ASP
O ASP possui alguns objetos que operam as funcionalidades de uma aplicao (um
site). Estes objetos so responsveis pelas respostas aos clientes e pelo recebimento de
requisies dos clientes, tambm criam e destroem sees, entres outras coisas.
objetos so:

Estes objetos so constitudos de propriedades, colees e mtodos. Os cinco

Response

Request

Session

Application

Server

Ao criar um site que efetua um cadastro de clientes, voc precisar recuperar as


informaes digitadas no browser para serem utilizadas ou armazenadas no servidor, um dos
objetos do ASP o responsvel em recuperar essas informaes. Se ocorrer algum problema na
gravao dos dados digitados no banco de dados, ser necessrio enviar uma mensagem ao
usurio informando o que aconteceu, um objeto do ASP o responsvel por enviar mensagens do
servidor para o usurio. Portanto, de grande importncia conhecermos e utilizarmos estes
objetos de maneira correta.

OBJETO RESPONSE
o objeto responsvel pelos dados enviados do servidor para o cliente (informao
enviada do servidor para o browser do cliente). Este objeto tem os seguintes Mtodos e
Propriedades:
Mtodos

Propriedades e Colees

Write enviar texto ao browser.

Buffer avisa o browser que a pgina s


dever ser mostrada aps ser totalmente
carregada.
Redirect redireciona o browser para um Cookies grava informaes no cookie do
endereo especificado, s pode ser usado antes browser.
do browser divulgar qualquer mensagem na
tela.
End pra a execuo do script da pgina.

Expires define o tempo de expirao de uma


pgina ou de um cookie.

OBSERVAO:
Se voc no indicar quando o cookie ir expirar, o cookie apenas fica valendo
enquanto o browser do cliente estiver aberto, assim que fechar o cookie desaparece.

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:11

ACTIVE SERVER PAGES


OBJETO REQUEST
o objeto responsvel pelos dados enviados do cliente para o servidor, ou seja,
qualquer informao requisitada pelo servidor ao cliente.
Propriedades e Colees
Form recupera valores enviados pelo formulrio, via mtodo Post.
Querystring recupera valores enviados pelo formulrio, via mtodo Get, isto , as
informaes so obtidas atravs da string de pesquisa http, esta string se encontra aps o ponto
de interrogao na linha do endereo.
Cookies recupera informaes do cookie do cliente.
Servervariables recupera valores sobre o browser do cliente e sobre o servidor Web.
Variveis do sistema que podem ser recuperadas pelo Servervariables:
CONTENT_LENGTH
Retorna o tipo de contedo que foi enviado ao servidor.
QUERY_STRING
String que sucede o ? no endereo URL.
REMOTE_ADDR
IP do usurio.
REMOTE_HOST
Nome do servidor correspondente ao REMOTE_ADDR (nome do provedor de acesso do usurio).
REQUEST_METHOD
Mtodo usado para transmisso das variveis de uma pgina para outra (GET ou POST).
SERVER_NAME
Nome do servidor de hospedagem, como usado no URL (pode ser o IP ou DNS).
URL
endereo URL requisitado (sem a query_string).

OBJETO SERVER
o objeto responsvel por permitir acesso e configurao de algumas funes e
mtodos ligados ao servidor.

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:12

ACTIVE SERVER PAGES

Mtodo
Createobject cria uma instncia de um componente no servidor.
Exemplo:
set conexao = server.createobject("adodb.connection") // Cria
objeto de conexo
Componentes so bibliotecas de objetos que possuem finalidades diversas. Ex.: componentes
que operam servios de e-mail, que manipulam banco de dados, etc..
Mappath mapeia arquivos de acordo com o caminho fsico, a partir do caminho virtual.
Exemplo:

server.MapPath ("mdb\dblivraria")

OBJETO APPLICATION
o objeto responsvel por armazenar e compartilhar valores, estados e
propriedades de um grupo. Um exemplo seria armazenar o nmero total de clientes no site num
instante. tambm possvel controlar erros causados por tentativas de alteraes simultneas de
variveis.
Aplicao todo o conjunto de pginas ASP e HTML que formam o programa (site)
como um todo. Com o objeto Application podemos criar variveis que esto disponveis em
qualquer momento no site.
Declarao de variveis Application:

Application(nomedavariavel) = conteudo
Mtodo
Lock trava o acesso s variveis Application.
Unlock destrava o acesso s variveis Application, disponibiliza as variveis novamente.

OBJETO SESSION
o objeto responsvel por armazenar valores ligados a cada visitante enquanto ele
utiliza uma aplicao. Uma session criada quando o cliente entra no site e destruda quando o
cliente sai do site (seja por logoff ou por tempo expirado, que por padro 20 minutos).
A declarao de variveis do tipo session possibilita que as mesmas estejam
disponveis durante toda a permanncia do cliente no site. So teis quando desejamos
identificar caractersticas do cliente em qualquer ponto do site.
Declarao de variveis Session:

Session(nomedavariavel) = conteudo
Exemplo de utilizao: quando o cliente se logar, podemos guardar numa session
seu nome, e-mail e login e ainda contar seu tempo de permanncia no site, se fizermos isso em
conjunto com uma varivel Application.
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:13

ACTIVE SERVER PAGES

Mtodos
Abandon encerra a session.

Propriedades e Colees
TimeOut determina qual o tempo mximo,
em minutos, de inatividade do visitante at que
a session seja considerada abandonada.

Cada um desses objetos ser utilizado em testes que faremos juntamente com os
comandos de VBScript.

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:14

ACTIVE SERVER PAGES


A LINGUAGEM VBSCRIPT
Como o cdigo do ASP utilizado com instrues VBScript nesse momento faz-se
necessrio uma pequena explicao sobre o funcionamento dessa linguagem. Vamos analisar
variveis e seus tipos, funes pr-definidas, operadores, comandos principais e rotinas
(procedimentos e funes).
Scripts so linguagens que permitem a criao rpida de aplicaes para Internet.
Sendo assim, so mais fceis de aprender e desenvolver do que as linguagens de programao
atuais.
O VBScript (ou Visual Basic Script) uma das possibilidades de linguagem de script
que executam no servidor. Ela a linguagem padro no IIS e no PWS, mas podemos utilizar
outras, uma bastante comum o JavaScript.
Algumas caractersticas do VbScript:

similar ao Visual Basic Application.

Permite a manipulao de nmeros, datas e strings.

Permite a utilizao de todos os comandos do Visual Basic, exceto os de


acesso ao banco de dados, que feito atravs do objeto ADO.

Pense que voc precisa desenvolver uma aplicao que cadastre os clientes de sua
empresa pela Internet. Os dados devem ser armazenados em um banco de dados e vrias
validaes dos dados digitados pelos usurios devem ser feitas.
A linguagem VBScript possibilitar, por meio do ASP, a criao da aplicao validando as
informaes e armazenando-as no banco de dados. O ASP executar as solicitaes do VBScript
junto com seus objetos e devolver uma resposta ao cliente no formato HTML. Assim, o VBScript
executado no servidor.

VARIVEIS E TIPOS DE DADOS


As variveis so criadas quando precisamos armazenar valores na memria que
existiro durante a execuo do programa, auxiliando e permitindo que informaes sejam
manipuladas (entrada e sada).
A declarao de uma varivel feita por meio da palavra-chave do VBScript: DIM
Exemplo:

DIM var
var = Algum texto var recebeu um valor string
var = 20 var recebeu um valor inteiro

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:15

ACTIVE SERVER PAGES


Quando apenas definimos o nome da varivel, estamos indicando que ela do tipo
variant, pois no foi especificado o seu tipo. No VBScript no se faz necessrio a declarao do
tipo de varivel.

TIPOS DE DADOS
Os principais tipos de dados que o VBScript trabalha, so:
Tipo

Descrio

Empty

Varivel que contm 0 para valores numricos e "" (string vazia) para strings.

Null

Varivel que no contm nenhum valor.

Boolean

Varivel que contm valores True ou False.

Byte

Nmeros inteiros entre 0 e 255.

Integer

Nmeros inteiros no intervalo de -32,768 a 32,767.

Long

Nmeros inteiros no intervalo de -2,147,483,648 a 2,147,483,647.

Single

Nmeros com ponto flutuante de preciso simples na faixa de -3.402823E38 a 1.401298E-45 para nmeros negativos e 1.401298E-45 a 3.402823E38 para
nmeros positivos.

Double

Nmeros com ponto flutuante de dupla preciso na faixa de 1.79769313486232E308 a -4.94065645841247E-324 para nmeros negativos e
4.94065645841247E-324 a 1.79769313486232E308 para nmeros positivos.

Date (Time)

Valores no formato de Data (data e hora) na faixa de 1 de janeiro de 100 a 31


de dezembro de 999. (January 1, 100 a December 31, 9999).

String

Contm dados no formato de string, que podem ter at aproximadamente 2


bilhes de caracteres de tamanho.

OPERADORES
Os operadores so utilizados para fazer clculos, comparaes e junes, tanto no
cdigo VBScript, quanto no cdigo ASP.

OPERADORES ARITMTICOS
+

Adio

Subtrao

Multiplicao

Diviso

Diviso inteira (retorna s a parte inteira)

Mod

Resto da diviso inteira

Potenciao

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:16

ACTIVE SERVER PAGES


OPERADOR DE CONCATENAO
&

Concatenao de strings

OPERADORES RELACIONAIS
=

Igual a

<

Menor que

<=

Menor ou igual que

>

Maior que

>=

Maior ou igual que

<>

Diferente de

OPERADORES LGICOS
And

Or

Ou

Not

No

Eqv

Equivalncia

Imp

Implicao lgica

Xor

Ou exclusivo

Os operadores lgicos so avaliados de acordo com as tabelas a seguir:


AND

OR

Expresso 1

Expresso 2

Resultado

Expresso 1

Expresso 2

Resultado

EQV

IMP

Expresso 1

Expresso 2

Resultado

Expresso 1

Expresso 2

Resultado

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:17

ACTIVE SERVER PAGES


XOR

NOT

Expresso 1

Expresso 2

Resultado

Expresso

Resultado

PRINCIPAIS COMANDOS DO VBSCRIPT


COMANDOS CONDICIONAIS
IF THEN ELSE
O comando IF testa uma condio e executa os comandos que esto aps o THEN
se essa condio for verdadeira e executa os comandos que esto aps o ELSE, caso essa
condio seja falsa.
Sintaxe:
IF condio THEN
Comandos
END IF

IF condio THEN
Comandos
ELSE
Comandos
END IF

SELECT CASE
Sintaxe:

Utilizado quando se tm vrias opes para determinada varivel ou expresso.


SELECT CASE varivel ou expresso
CASE valores
comandos
CASE valores
comandos
CASE valores
comandos
CASE valores
comandos
CASE ELSE
comandos
END SELECT

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:18

ACTIVE SERVER PAGES


COMANDOS DE REPETIO
WHILE ... END
Enquanto uma condio for verdadeira o loop executado. Sintaxe:
WHILE condio
comandos
WEND
DO WHILE ... LOOP
Executa os comandos enquanto a condio for verdadeira. Sintaxe:
DO WHILE condio
comandos
LOOP
FOR ... TO ... NEXT
Sintaxe:

Executa os comandos at que o contador do loop atinja um valor pr-determinado.


FOR contador = valor inicial TO valor final
comandos
NEXT

FUNES
As funes no VBScript servem para que os tipos de dados no sejam interpretados
de maneira incorreta e gerem erros nos cdigos. Isso muito importante levando em
considerao que a Internet est disponvel em vrios pases e cada tem uma maneira de
visualizar valores, por exemplo.
Imagine que est recebendo um valor de um formulrio para ser inserido em um
banco de dados. Este valor deve ser numrico para no gerar nenhum erro de tipo de dado no
banco de dados. Os dados digitados em um formulrio HTML so passados como texto (string),
ento ser necessrio converter este texto em nmero. Conseguiremos isso por meio das funes
de converso.
Tambm ser necessrio fazermos validao de dados, testarmos se uma data,
um nmero, etc.. As funes de verificao nos auxiliaro.

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:19

ACTIVE SERVER PAGES


FUNES PARA VERIFICAO DE TIPO DE VARIVEIS
Funo

Descrio

Sintaxe

IsArray

retorna True se uma varivel um


array (vetor), caso contrrio retorna
False.

IsArray (nome da varivel)

IsDate

retorna True se uma varivel uma


data, caso contrrio retorna False.

IsDate (nome da varivel)

IsEmpty

retorna True se uma varivel contm 0 IsEmpty (nome da varivel)


(no caso de ser numrica) ou "" (no
caso de ser string), caso contrrio
retorna False.

IsNull

retorna True se a varivel no contm


valores vlidos, caso contrrio retorna
False.

IsNull (nome da varivel)

IsNumeric

retorna True se uma varivel contm


um valor numrico, caso contrrio
retorna False.

IsNumeric (nome da varivel)

FUNES PARA CONVERSO DE TIPOS


Funo

Descrio

CBool

retorna True ou False de acordo com o CBool (nome da varivel / expresso)


valor da expresso avaliada.

CByte

converte a expresso dada em um CByte (nome da varivel / expresso)


valor do tipo byte.

CDate

converte a expresso dada em um CDate (nome da varivel / expresso)


valor do tipo data/hora.

CDbl

converte a expresso dada em um CDbl (nome da varivel / expresso)


valor do tipo double.

CInt

converte a expresso dada em um CInt (nome da varivel / expresso)


valor do tipo integer.

CLng

converte a expresso dada em um CLng (nome da varivel / expresso)


valor do tipo long.

CStr

converte a expresso dada em um CStr (nome da varivel / expresso)


valor do tipo string.

CSng

converte a expresso dada em um CSng (nome da varivel / expresso)


valor do tipo single.

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Sintaxe

Pg.:20

ACTIVE SERVER PAGES


FUNES PARA MANIPULAO DE NMEROS:
Funo

Descrio

Sintaxe

Abs

retorna o valor absoluto de um valor Abs (nmero)


numrico.

Fix

retorna a parte inteira de um nmero.

Int

retorna a parte inteira de um nmero, Int (nmero)


caso o nmero seja negativo,
retornado o valor imediatamente
menor.

Sqr

retorna o valor da raiz quadrada do Sqr (nmero)


nmero (esse valor deve ser maior ou
igual a zero).

Fix (nmero)

FUNES PARA MANIPULAO DE DATAS


Funo

Descrio

Day

retorna o dia do
determinada data.

Month

retorna o ms de uma determinada Month (data)


data.

Year

retorna o ano de uma determinada Year (data)


data.

Weekday

retorna o dia da semana de uma Weekday (data)


determinada data.

Hour

retorna a hora de um determinado Hour (tempo)


tempo.

Minute

retorna o minuto de um determinado Minute (tempo)


tempo.

Second

retorna o segundo de um determinado Second (tempo)


tempo.

Now

retorna a data e hora atual (data e Now


hora que consta no relgio do
servidor).

Time

retorna a hora atual (hora que consta Time


no relgio do servidor).

Date

retorna a data atual (data que consta Date


no relgio do servidor).

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Sintaxe
ms

de

uma Day (data)

Pg.:21

ACTIVE SERVER PAGES


FUNES PARA MANIPULAO DE STRINGS
Funo

Descrio

Asc

retorna o caractere (pela tabela ANSI) Asc (string)


correspondente primeira letra da
string de entrada.

Chr

retorna o caractere correspondente a Chr (cdigo)


um determinado cdigo (numrico) da
tabela ANSI.

InStr

retorna
a
posio
da
primeira InStr (posio inicial, string, string de
ocorrncia de uma string dentro da comparao)
outra, possvel delimitar a partir de
qual caractere ser feita tal procura.

LCase

converte todos os caracteres de uma LCase (string)


string para minsculo.

UCase

converte todos os caracteres de uma UCase (string)


string para maisculo.

Left

retorna um determinado nmero de Left (string, nmero de caracteres)


caracteres a partir do lado esquerdo da
string.

Len

retorna o nmero de caracteres numa Len (string)


string (contando espaos em branco),
ou, no caso de variveis numricas ou
no formato de data, retorna a
quantidade de bytes necessrios para
armazenar aquela expresso.

Mid

quebra uma string. Delimita-se a Mid (string, posio inicial, tamanho)


posio inicial, a string e a quantidade
de caracteres a partir da posio inicial
que devem ser deixados na string de
retorno.

Right

retorna um determinado nmero de Right (string, nmero de caracteres)


caracteres a partir do lado direito da
string.

Ltrim

retorna uma cpia da string de LTrim (string)


entrada, mas sem os espaos no incio
da string.

Rtrim

retorna uma cpia da string de RTrim (string)


entrada, mas sem os espaos no final
da string.

Trim

retorna uma cpia da string de Trim (string)


entrada, mas sem os espaos no incio
e no final da string.

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Sintaxe

Pg.:22

ACTIVE SERVER PAGES


CDIGOS PARA TESTES DOS COMANDOS E FUNES
VBSCRIPT
Teste para a estrutura condicional IF.

<HTML>
<TITLE>Teste de VBSCRIPT</TITLE>
<BODY bgcolor = #FFFFFF>
<font face = verdana size = 2>
<% ' Teste do Comando IF
Dim I ' Declara a varivel I
I = 9 Inicializa a varivel
IF I >= 10 THEN
Usamos o comando condicional para testar o valor da varivel %>
<p> O valor de I maior ou igual a 10. </p>
<p> O valor de I <% = I %> e seu quadrado <% = I * I %></p>
<% ELSE %>
<p> O valor de I menor que 10. </p>
<p>O valor de I <% = I %> e seu cubo <% = I * I * I %></p>
<% END IF %>
</BODY></HTML>
Voc pde observar que como a condio do comando IF foi falsa, os comandos
executados foram os do comando ELSE. Para testarmos a condio verdadeira do IF altere o valor
inicial de I para 15. Lembre-se de salvar o cdigo no servidor Web para que voc consiga efetuar
todos os testes.

ESTRUTURA CONDICIONAL SELECT CASE


Preciso informar ao usurio do site quantos minutos da hora atual ele se encontra,
depois qual a hora atual, qual ser a prxima hora e a data e a hora atual. Como aprendemos,
para testarmos vrias opes de uma nica vez usamos o comando SELECT CASE do VBScript.

<HTML>
<TITLE>Teste de VBSCRIPT</TITLE>
<BODY bgcolor = #FFFFFF>
<font face = verdana size = 2>
<% ' Teste do comando SELECT CASE
SELECT CASE Minute(Now)
CASE 0,1,2,3,4,5,6,7,8,9,10 %>
<p> Passam at 10 minutos da hora atual. </p>
<%
CASE 11,12,13,14,15,16,17,18,19,20 %>
<p> Passam at 20 minutos da hora atual. </p>
<%
CASE 21,22,23,24,25,26,27,28,29,30 %>
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:23

ACTIVE SERVER PAGES


<p> Passam at 30 minutos da hora atual. </p>
CASE 31,32,33,34,35,36,37,38,39,40 %>
<p> Passam at 40 minutos da hora atual. </p>
<%
CASE 41,42,43,44,45,46,47,48,49,50 %>
<p> Passam at 50 minutos da hora atual. </p>
<%
CASE ELSE %>
<p> Faltam menos de 10 minutos para a prxima hora. </p>
<% END SELECT %>
<p> A hora atual <%= Hour(now)%> </P>
<p> a prxima hora <% = Hour(now) + 1%> </p>
<p> o minuto agora <% = Minute(now)%> </p>
<p> a data e hora agora <% = Now %> </p>
<%

</BODY></HTML>
ESTRUTURA DE REPETIO FOR
Gostaria de saber o segundo da hora atual at que o valor de uma varivel chegue
at 10. Digite o cdigo abaixo no bloco de notas:

<HTML>
<TITLE>Teste de VBSCRIPT</TITLE>
<BODY bgcolor = #FFFFFF>
<font face = verdana size = 2>
<% ' Teste do comando FOR
DIM Segundo
Declara a varivel
Segundo =""
Inicia a varivel
FOR I = 1 TO 10
O contador comea com 1. O loop feito at o mesmo atingir 10.
Segundo = Second(Now)
Funo utilizada para buscar o segundo da hora atual
%>
<br><font face = "Verdana" Size = 2>O segundo da hora atual : <% =
Segundo %>
</font>
<% NEXT %>
</BODY></HTML>

ESTRUTURA DE REPETIO WHILE


Preciso saber a quantidade de caracteres de uma frase, qual a primeira e a ltima
letra e qual a letra do meio. Digite o cdigo abaixo no bloco de notas:

<HTML>
<TITLE>Teste de VBSCRIPT</TITLE>
<BODY bgcolor = #FFFFFF>
<font face = verdana size = 2>
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:24

ACTIVE SERVER PAGES


<% ' Teste do comando WHILE

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:25

ACTIVE SERVER PAGES


'Declara variveis para auxiliar funes
DIM LetraMeio, TamFrase, Cont, Frase
LetraMeio = ""
TamFrase = ""
Cont = 0
Frase ="Active Server Pages"
WHILE Cont < 3
Conta o nmero de caracteres da frase e acha a metade desse valor
Carac = Len(Frase)
Meio = Carac / 2 %>
<p> Tamanho da Frase =<% =Carac %>
Ultima letra da Frase = <% =Right(Frase,1) %> <br>
Primeira Letra da Frase = <% =Left(Frase,1) %> <br>
Letra do Meio da Frase = <% =Mid(Frase,Carac,1) %> <br></p>
<% Cont = Cont + 1
WEND %>
</BODY></HTML>

AS ROTINAS
As rotinas em uma linguagem de programao servem para agrupar cdigos que
funcionaro vrias vezes em vrios programas diferentes, ou dentro de um mesmo programa o
cdigo deve ser acessado em vrios momentos.
Muitos dos bancos de dados utilizados nos sites esto armazenados em servidores
com padro de data americano. Ao mostrar as datas armazenadas no banco para o usurio do
site, esta deve estar no padro que ele reconhece, levando em conta que iremos trabalhar com
usurios brasileiros; a data deve ser mostrada no formato dia, ms e ano.
Ser necessrio converter a data que est armazenada no banco de dados para o
padro brasileiro em vrios pontos do mesmo programa e do site, ento criamos uma rotina para
armazenar o cdigo que faz esta transformao e a mesma poder ser acessada apenas usando
uma chamada pelo nome dado rotina.
Existem dois tipos de rotinas: funes (rotinas que retornam valor) e
procedimentos (rotinas que no retornam valor, simplesmente executam alguma ao). O
exemplo mencionado acima deve ser criado uma rotina que retorna valor, uma funo. Mas
quando vamos, por exemplo, fazer a conexo com um banco de dados, o cdigo deve ser
repetido em todas as pginas que acessem o banco, mas no necessrio retornar nenhum
valor, ento usamos um procedimento.

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:26

ACTIVE SERVER PAGES


Sintaxe das funes:
FUNCTION nome (parmetros)
comandos
END FUNCTION
Sintaxe dos procedimentos:
SUB nome (parmetros)
comandos
END SUB

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:27

ACTIVE SERVER PAGES


TESTANDO OS OBJETOS DO ASP
Ao testarmos os objetos do ASP estaremos nos preparando para criarmos o site da
Livraria ClaraLuz. Como j vimos cada um dos objetos est interagindo com o cliente e o
servidor.

TESTE DO OBJETO RESPONSE


J sabemos que o objeto Response o responsvel por enviar dados do servidor
para o cliente. E tambm j conhecemos seus mtodos e propriedades. Vamos testar cada um
dos mtodos e propriedades.

MTODO WRITE
Este mtodo ns j estamos utilizando desde o nosso primeiro exemplo. Ele envia
texto ao browser do cliente.
Sintaxe:

<% Response.write Mensagem %>


Esta sintaxe deve ser utilizada quando estamos trabalhando num bloco de
comandos VBScript. Quando temos apenas que enviar um dado para o cliente no meio de um
cdigo HTML, utilizamos a seguinte sintaxe:

<% = varivel %>


esta sintaxe que estamos utilizando at o momento.

MTODO END
Sempre que quisermos encerrar o carregamento da pgina em um determinado
ponto do cdigo, utilizaremos o mtodo End do ASP.
Sintaxe:

<% Response.End %>

MTODO REDIRECT
Em determinados momentos da execuo de um programa necessrio desviar a
execuo para um outro programa. Por exemplo, se o usurio j estiver cadastrado no site ele
deve ser direcionado para a pgina de usurios cadastrados, se no estiver cadastrado ele deve
ser direcionado para a pgina de cadastro. Para conseguirmos redirecionar um usurio para uma
outra pgina do site utilizamos o mtodo Redirect, com a seguinte sintaxe:

<% Response.Redirect(URL) %>

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:28

ACTIVE SERVER PAGES


do site.

Onde a URL pode ser substituda por um endereo http ou o nome de um arquivo

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:29

ACTIVE SERVER PAGES


O mtodo Redirect deve ser utilizado antes que qualquer tag HTML seja enviada
ao browser. Se desejar utiliza-lo depois que um cdigo HTML foi enviado ao browser, utilize a
propriedade Buffer.

PROPRIEDADE BUFFER
Este comando deve ser o primeiro da pgina, antes de qualquer outro cdigo, quer
seja HTML, VBScript, etc.. Ele avisar ao browser que s aps todo o cdigo ter sido carregado no
cliente que o contedo da pgina poder ser mostrado.
Por padro o valor deste comando FALSE, ou seja, a pgina vai sendo mostrada
medida que o cdigo enviado ao browser. Para ativa-lo utilize a sintaxe abaixo:

<% Response.Buffer = true %>

COLEO COOKIE
Com os cookies podemos armazenar informaes em formato texto no micro do
cliente. Informaes como a hora do acesso, a data, ou qualquer outra informao que voc
possa recuperar a qualquer momento no site.
Existem dois tipos de cookies: os de sesso e os permanentes. Os cookies de
sesso s existem enquanto o browser do cliente est aberto. Os cookies permanentes ns
controlamos at quando eles permanecero no disco rgido do cliente.
Lembre-se que o usurio pode travar a mquina para no receber cookies, ou
apaga-los a qualquer momento.
Os cookies devem ser utilizados principalmente quando voc for personalizar a
entrado do site, ou buscar a data da ltima visita do cliente ao site, etc.. Muitos tm medo dos
cookies, pensam que os mesmos podem estar trazendo vrus. Mas, os cookies so apenas
arquivos de texto que armazenam as informaes que voc solicitou e algumas informaes
sobre o site. Nunca utilize cookies para armazenar informaes confidenciais do usurio, porque
ele no tem segurana.
Para gravar um cookie utilize a seguinte sintaxe:

<% Response.cookie ( Nome do Cookie)(Nome do Campo) = valor %>


O Nome do Cookie ser o nome do arquivo armazenado no disco rgido do usurio.
E o Nome do campo sero as informaes que voc armazenou identificadas de maneira correta.
Com o comando acima, assim que o usurio sair da janela do Browser o cookie ser
perdido. Para manter o cookie armazenado durante um perodo utilize a propriedade Expires,
que pode ser utilizada da seguinte maneira:

<% Response.Expires = data %>


Vamos criar um programa que armazena no cliente um cookie com a data e a hora
atual, e o nome do site. Digite o cdigo abaixo no bloco de notas:

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:30

ACTIVE SERVER PAGES


<%
Response.Buffer = True
'Ira apresentar a pgina somente aps ser totalmente carregada
'Cookies -> ira gravar informaes locais na maquina do cliente
Response.Cookies("Teste") ("DataAtual") = Date
Response.Cookies("Teste") ("HoraAtual") = Time
Response.Cookies("Teste") ("Site") = "Curso de ASP"
Response.Cookies("Teste").Expires = "01/11/2005"
%>
<HTML>
<HEAD>
<TITLE>Utilizando o objeto RESPONSE</TITLE>
</HEAD>
<BODY bgcolor = #99CCFF>
<font face = arial size = 4 color = Black >
O cookie Teste foi armazenado no seu Computador!
</font>
</BODY>
</HTML>
Depois de executar o programa, v at a pasta Windows/cookies e organize pela
data, existir um arquivo txt com o nome do servidor WEB. Abra este arquivo e visualize as
informaes gravadas.

TESTANDO O OBJETO SESSION


Voc j aprendeu que o objeto Session o responsvel por armazenar valores
ligados a cada visitante enquanto ele utiliza uma aplicao. Uma session criada quando o
cliente entra no site e destruda quando o cliente sai do site (seja por logoff ou por tempo
expirado, que por padro 20 minutos).
Tambm podemos criar variveis em nvel de Sesso, que podem ser recuperadas
enquanto o usurio no fechar o browser ou o tempo de expirao no se cumprir.
A sintaxe para criao de uma varivel em nvel de sesso :

<% Session(Varivel) = Valor %>


Esta varivel pode ser recuperada a qualquer momento dentro daquela visita do
usurio no site.
Quando acessamos sites de compras, de banco ou que trazem informaes que s
interessam ao usurio naquele momento, sempre encontramos uma opo para abandonar
aquela rea do site, que provavelmente utilizamos uma senha para poder acessar. Isto feito
pelo mtodo Abandon do objeto Session. A sintaxe a seguinte:
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:31

ACTIVE SERVER PAGES


<% Session.abandon %>
Vamos gravar algumas variveis de sesso que sero recuperadas mais tarde.

<%
Session("DataConexao") = Date
Session("HoraConexao") = Time
Armazena qual o nmero equivalente ao dia da semana da data armazenada anteriormente
Session("DiadaSemana") = Weekday(session("DataConexao"))
%>
<HTML>
<HEAD>
<TITLE>Utilizando o objeto SESSION</TITLE>
</HEAD>
<BODY bgcolor = #99CC99>
<font face = arial size = 4 color = Black > As variveis de Sesso foram
armazenadas!
</font>
</BODY>
</HTML>
O cdigo abaixo recuperar as informaes, e como a funo Weekday retorna o
nmero do dia da semana, vamos testar qual esse nmero e mostrar o dia da semana por
extenso.

<HTML>
<HEAD>
<TITLE>Utilizando o objeto SESSION</TITLE>
</HEAD>
<BODY bgcolor = #99CC99>
<H2 ALIGN=CENTER> Recuperando as variveis de Sesso </h2>
<font face = arial size = 2 color = Black >
<p> Data da Conexo = <% = Session("DataConexao")%></p>
<p> Hora da Conexo = <% = Session("HoraConexao")%></p>
<p> Dia da Semana =
<% Select Case Session("DiadaSemana")
Case 1
response.write "Domingo"
Case 2
response.write "Segunda-Feira"
Case 3
response.write "Tera-Feira"
Case 4
response.write "Quarta-Feira"
Case 5
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:32

ACTIVE SERVER PAGES


response.write "Quinta-Feira"
Case 6
response.write "Sexta-Feira"
Case 7
response.write "Sbado"
end select%></p>
</font>
</BODY>
</HTML>
Desta maneira, qualquer informao que for acessada vria vezes enquanto o
usurio est no site pode ser armazenada em uma varivel do objeto Session.

TESTE DO OBJETO REQUEST


o objeto responsvel pelos dados enviados do cliente para o servidor, ou seja,
qualquer informao requisitada pelo servidor ao cliente.
Podemos recuperar qualquer informao que est armazenada no cliente com o
objeto Request. Essas podem estar vindo do servidor, de um formulrio, de um cookie ou at
mesmo da string de pesquisa da URL.

RECUPERANDO COOKIES
No programa feito anteriormente gravamos alguns cookies, abaixo emos um
exemplo de um programa para recuperar os cookies gravados. .
No programa citado foram armazenadas dentro do cookie teste as variveis:
DataAtual, HoraAtual e Site. O cdigo abaixo recupera as variveis armazenadas no cookie:

<HTML>
<HEAD>
<TITLE>Objeto REQUEST - Recuperando Cookies</TITLE>
</HEAD>
<BODY bgcolor = #99CC99>
<font face = arial size = 2 color = Black >
<p><B>Buscando os cookies armazenados:</b></p>
<p>Data do ltimo acesso:
<% = request.cookies("Teste")("DataAtual")%></p>
<p>Hora do ltimo acesso:
<% = request.cookies("Teste")("HoraAtual")%></p>
<p>Site: <% = request.cookies("Teste")("Site")%></p>
</font>
</BODY>
</HTML>
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:33

ACTIVE SERVER PAGES


usurio.

Utilize os cookies para buscar informaes que sero teis em uma outra visita do

RECUPERANDO INFORMAES DE FORMULRIOS


Quando trabalhamos com formulrios no HTML, temos dois mtodos de enviar os
dados preenchidos: o GET e o POST. Qual a diferena de um para o outro? O mtodo GET envia
todos os dados preenchidos no formulrio usando a string de pesquisa da URL.
Mas o que a string de pesquisa da URL? So todos os valores que so informados
aps a ?(interrogao) no endereo da pgina acessada. Enviando os valores desta maneira
temos o problema da limitao da quantidade de valores enviados. E os mesmos ficam visveis ao
usurio.
Pelo mtodo POST os dados so enviados de maneira oculta para o servidor, como
se fosse um arquivo anexado. Vamos trabalhar usando este mtodo, porque temos maior
flexibilidade nos dados que podem ser enviados ao servidor.

AES DO FORMULRIO NO MESMO ARQUIVO


O nosso primeiro teste usando formulrio ser bem simples. Crie uma pgina html
com o seguinte formulrio:

O method do formulrio ser Post. O action o que ser executado quando o


usurio clicar no boto submit do formulrio. Neste caso ele executar o prprio arquivo.
O que quero que acontea quando o usurio clicar no boto enviar? O que ele
preencheu nos campos de nome e email deve ser mostrado e um link para ele voltar pgina
deve ser acrescentado. Mas estas aes vo estar dentro do mesmo arquivo do formulrio. Como
vamos identificar quando o visitante clicou no boto enviar ou no?
Todos os campos do formulrio so reconhecidos apenas depois do clique no boto
submit. Ento, criaremos um campo oculto que ser o identificador do envio do formulrio.
Acrescente a seguinte linha aps o comando FORM do seu arquivo:

<input type=hidden name=hidEnviando value=ok>


Ento, quando o usurio clicar no boto Enviar, todos os campos do formulrio so
transmitidos via POST. Vou testar se o campo hidEnviando igual a ok, se sim vou mostrar os
dados digitados no formulrio e criar um link para mostrar o arquivo novamente. Abaixo est o
cdigo final para esta pgina:
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:34

ACTIVE SERVER PAGES

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:35

ACTIVE SERVER PAGES


<HTML>
<HEAD>
<TITLE>Objeto Request - Recuperando informaes do FORM</TITLE>
</HEAD>
<BODY font = arial size = 3 bgcolor = #ffffcc>
<font color = Black face=tahoma size=2>
<%
'Testa se o campo oculto est com o valor OK
if Request.Form("hidEnviando")="ok" then
Response.Write "<Font Color = #330066> <b>
Response.Write Dados enviados com sucesso <br>"
'Busca do formulrio o nome digitado
Response.Write "Nome : " & Request.Form("txtNome") & "<br>"
'Busca do formulrio o email digitado
Response.Write "Email: " & Request.Form("txtEmail") & "<br> </font>"
%>
<a href = "testeASP5.asp"> <p><p> Voltar </a>
<%else%>
<b> Cadastre o seu nome e email </b> <br> <br>
<form method=post action = testeASP5.asp >
<input type = hidden Name = hidEnviando value=ok >
Nome: <input type=text name = txtNome Size = 50> <br>
Email : <input type=text name = txtEmail Size = 50> <br>
<p> <input type = Submit Value = Enviar >
</form>
</font>
<%end if %>
</BODY>
</HTML>
Ao clicar no link voltar, o arquivo ser carregado novamente e como o campo
hidEnviando neste momento no existe mais, porque no estamos clicando no boto Enviar; ele
montar o formulrio novamente.

RECUPERANDO INFORMAES DA STRING DE PESQUISA DA URL


Outra maneira de passarmos informaes para serem usadas durante a execuo
dos programas em ASP pala string de pesquisa da URL, tambm conhecido como o mtodo GET
de envio de informaes.
A string de pesquisa de uma URL comea depois do sinal de ? (interrogao) no
endereo solicitado. Para recuperarmos estas informaes usaremos o objeto Request, com a
propriedade Querystring.
Neste teste daremos ao visitante duas opes de escolha. Ele poder escolher
informar sobre a opo de lngua estrangeira que ele deseja ou o nvel de aprendizado que se
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:36

ACTIVE SERVER PAGES


encontra. Se escolher a opo de lngua estrangeira, ele ser direcionado para uma pgina com
um
parmetro, passado pela string de pesquisa, informando que a parte do cdigo que deve ser
executada a da lngua estrangeira. Se escolher o nvel de aprendizado, ser passado o
parmetro indicando que deve ser executada a parte do cdigo relacionada com o nvel de
aprendizado.
Observe o cdigo:

<HTML>
<HEAD>
<TITLE>Objeto Request - Propriedade QueryString</TITLE>
</HEAD>
<BODY BGCOLOR=#ffffff>
<FONT FACE=verdana SIZE=2 COLOR=#003333>
<p>Escolha uma opo:</p>
<!--Este teste vai chamar uma pgina passando parmetros pela URL-->
<a href=TesteASP7.asp?acao=opcao>Opo de Lingua </a><br>
<a href=TesteASP7.asp?acao=nivel>Nivel de aprendizado </a>
</Font>
</BODY>
</HTML>
Precisamos testar qual foi o valor passado pela string de pesquisa da URL para que
o arquivo monte o formulrio correto. O cdigo da pgina chamada o seguinte:

<HTML>
<HEAD>
<TITLE>Formulrios</TITLE>
</HEAD>
<BODY BGCOLOR=#FFFFFF>
<FONT FACE=verdana SIZE=2 COLOR=#003333>
<% 'Avalia a string de pesquisa passada na URL a opcao
if Request.QueryString("acao")="opcao" then %>
<Form method=post action=TesteASP8.asp>
Digite seu nome e escolha a opo de lingua de sua preferncia:
<br><br>
Nome: <input type=text name=nome size=30> <br> <br>
Opo de Lngua: <br>
<input type=radio name=Lingua value=Ingls> Ingls
<input type=radio name=Lingua value=Espanhol> Espanhol
<input type=radio name=Lingua value=Frances> Francs
<br> <br>
<input type=submit value=Enviar>
</form>
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:37

ACTIVE SERVER PAGES


<% 'Avalia se astring de pesquisa passada na URL nivel
elseif Request.QueryString("acao")="nivel" then %>
<form method=post action=TesteASP8.asp>
Digite seu nome e seu nvel de aprendizagem no idioma: <br><br>

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:38

ACTIVE SERVER PAGES


Nome: <input type=text name=nome size=30><br><br>
Nvel de aprendizagem no idioma: <br>
<input type=checkbox name=Escrita value=Ok> Escrita
<input type=checkbox name=Leitura value=Ok> Leitura
<input type=checkbox name=Conversa value=Ok> Conversao <br><br>
<input type=submit value=Enviar>
</form>
<%'Se nenhuma opo foi selecionada
else%>
<a href=TesteASP6.asp> V para o Teste9.asp </a>
<%end if%>
</font>
</BODY>
</HTML>
importante ressaltarmos a importncia de todos os nomes que foram utilizados
nos formulrios e strings de pesquisa da URL estarem exatamente como foram criados, ou seja,
devemos respeitar as letras maisculas e minsculas utilizadas nos nomes.
OBSERVAO
Se algum erro ocorrer na execuo dos arquivos, voc deve primeiro conferir a
sintaxe de cada um dos comandos. Ver se no esqueceu uma aspa, ou digitou o nome de um
objeto com letra maiscula e era minscula.
funcionem.

Agora precisamos criar um outro arquivo para que o action dos formulrios acima

AES DO FORMULRIO EM OUTRO ARQUIVO


Uma outra situao que encontramos muito nos sites atuais as aes de um
formulrio chamando um outro arquivo para validar as informaes. Como em uma pgina onde
necessrio entrarmos com um usurio e senha, ser chamado um arquivo externo para validar
o usurio e a senha digitados, ou quando estamos fazendo compras em um site, assim
que digitamos a quantidade de produtos desejada e confirmamos a compra um programa
acionado para gravar as informaes.
O arquivo testeASP7 est chamando o arquivo testeASP8. Note que os dois
formulrios chamam este arquivo. Como poderemos identificar qual foi o formulrio que chamou
o testeASP8 para que as informaes passadas sejam corretas? Utilizaremos novamente o
recurso do campo oculto ao usurio.
O primeiro formulrio ser chamado de A. Ento acrescente a seguinte linha logo
abaixo do primeiro FORM no arquivo do formulrio:

<input type=hidden name=Formulario value=A>

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:39

ACTIVE SERVER PAGES


Abaixo do segundo FORM acrescente esta linha:

<input type=hidden name=Formulario value=B>


Assim sendo, o campo do tipo oculto ser enviado junto com os outros campos do
formulrio pelo mtodo POST e poderemos avalia-lo no arquivo que executa as aes, para
mostrarmos os dados corretos ao usurio. O cdigo que validar as informaes passadas pelos
formulrios o seguinte:

<HTML>
<HEAD>
<TITLE>Objeto Request - Busca de informaes de outro formulrio</TITLE>
</HEAD>
<BODY BGCOLOR=#FFFFFF>
<FONT FACE=verdana SIZE=2S COLOR=#003333>
<%
If Request.Form("Formulario")= "A" then
Response.Write "Informaes enviadas: <br><br>"
Response.Write "Seu Nome: <b>" & Ucase (Request.Form("Nome")) &
"</b></br>"
Response.Write
"Opo
de
Lingua:
"
&
Ucase
(Request.Form("Lingua")) & "<br>"
Elseif Request.Form ("Formulario")="B" then
Response.Write "Informaes enviadas: <br><br>"
Response.Write "Seu nome:<b> :" & Ucase (Request.Form ("Nome"))
&"</b><br>"
If Request.Form ("Leitura")="Ok" then
Response.write "Leitura <br>"
End if
If Request.Form ("Escrita")="Ok" then
Response.Write "Escrita <br>"
End if
If Request.Form ("Conversa")="Ok" then
Response.Write "Conversao <br>"
End if
End if%>
<center><a href=testeASP6.asp> Voltar </a>
</center>
</Font>
</BODY>
</HTML>

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:40

ACTIVE SERVER PAGES


TESTE DO OBJETO APPLICATION
o objeto responsvel por armazenar e compartilhar valores, estados e
propriedades de um grupo. Um exemplo seria armazenar o nmero total de clientes no site num
instante. tambm possvel controlar erros causados por tentativas de alteraes simultneas de
variveis.
Aplicao todo o conjunto de pginas ASP e HTML que formam o programa (site)
como um todo. Com o objeto Application podemos criar variveis que esto disponveis em
qualquer momento no site.
Declarao de variveis Application:

Application(nomedavariavel) = conteudo
Para entendermos melhor a funo deste objeto, vamos pensar no controle do
nmero de usurios em um determinado momento no site e no nmero de usurios que j
acessaram o site, e quando chegar ao acesso 500 direcionar o usurio para a pgina user500.asp
. Poderamos at utilizar um banco de dados para guardar essas informaes, mas isso geraria
um fluxo muito grande de processamento no servidor, porque a cada usurio que acesse o site
ele deveria abrir o banco de dados, gravar as informaes e fecha-lo novamente.
As variveis Application ficam disponveis durante todo o funcionamento do site,
independente de qual usurio est conectado. Em qualquer momento e qualquer programa pode
acessar as informaes gravadas nestas variveis. Elas s so perdidas caso o servidor que
armazena a aplicao (site) for desligado.
Portanto, as variveis que vo contar o nmero total de usurios e os usurios em
um determinado momento devem ser iniciadas quando o primeiro usurio acessar o site. E caso
seja necessrio reiniciar o servidor Web, as informaes armazenadas nas variveis devem ser
gravadas para serem recuperadas depois.
E a cada usurio que acessar uma pgina do site, um acesso deve ser contabilizado
e quando sair deve ser retirado dos usurios atuais.
Para conseguirmos tal funcionamento das variveis precisamos utilizar um arquivo
especial do ASP, o arquivo global.asa. Este arquivo deve ser armazenado na raiz do site (no
caso do PWS, s existir um global.asa ativo, mesmo que existam subpastas), ele executado
automaticamente, como um autoexec do DOS. Em seu contedo temos apenas quatro rotinas,
que s podem ser utilizadas dentro do global.asa, que so mostradas a seguir:

<script language=VBScript Runat=Server>


O comando acima define que o cdigo ser escrito na linguagem VBScript
e ser executado no servidor
Sub Application_OnStart
Comandos que sero executados quando o primeiro usurio acessar
o aplicativo
End sub
Sub Application_OnEnd
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:41

ACTIVE SERVER PAGES


Comando que sero executado quando o servidor for desligado
End sub

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:42

ACTIVE SERVER PAGES


Sub Session_OnStart
Comandos executados quando um usurio entrar no site
End sub
Sub Session_OnEnd
Comandos executados quando o usurio sai do site
End sub
</script>
Vamos criar o arquivo global.asa que conta os usurios correntes e o total de
usurios e direciona o usurio 500 para o arquivo user500.asp . O cdigo ser o seguinte:

<script language=VBScript Runat=Server>


O comando acima define que o cdigo ser escrito na linguagem VBSCript
e ser executado no servidor
Sub Application_OnStart
Vamos travar a varivel para que mais de um processo no a acesse
simultaneamente
Application.Lock
Application(UsuariosAtuais) = 0
Application(TotalUsuarios) = 0
Destrava as variveis
Application.Unlock
End sub
Sub Session_OnStart
Application.Lock
Application(UsuariosAtuais) = Application(UsuariosAtuais) + 1
Application(TotalUsuarios) = Application(TotalUsuarios) + 1
If Application(TotalUsuarios) = 500 then
Response.redirect(user500.asp)
End if
Application.Unlock
End sub
Sub Session_OnEnd
Application.Lock
Application(UsuariosAtuais) = Application(UsuariosAtuais) - 1
Application.Unlock
End sub
</script>
global.asa.

Esse arquivo deve estar dentro da pasta do site no servidor web, com o nome
Abaixo um cdigo para podermos visualizar o contedo das variveis Application.

<HTML>
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:43

ACTIVE SERVER PAGES


<HEAD>

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:44

ACTIVE SERVER PAGES


<TITLE> Objeto APPLICATION - Buscando informaes do Global.asa</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" text="#000000">
<font face = "Verdana" Size =2>
<p> Visitantes atualmente no site:
<%= Application("UsuariosAtuais")%></p>
<p> Total de visitantes do site at o momento:
<%= Application("TotalUsuarios")%></p>
</BODY>
</HTML>

TESTANDO OBJETO SERVER


o objeto responsvel por permitir acesso e configurao de algumas funes e
mtodos ligados ao servidor.
Com este objeto podemos controlar o tempo que mximo para carregamento e
execuo de uma pgina, codificar textos com caracteres especias, mapear os arquivos fsicos do
site atravs do caminho virtual, a criao de instncias de objetos Activex, a criao de arquivos
de texto, etc..
importante ressaltarmos que utilizaremos muito a criao de instncias de
objetos no site que criaremos a seguir, principalmente os relacionados a banco de dados.

O MTODO MAPPATH
Este mtodo recupera, a partir do caminho virtual da aplicao, o caminho fsico do
arquivo especficado. Mas, no podem existir arquivos homnimos no mesmo domnio para que o
mtodo retorne corretamente o caminho fsico.
Gostaria de saber o caminho fsico do arquivo global.asa que criamos no recurso anterior.
<HTML>

<HEAD>
<TITLE> Objeto SERVER - Mapeando o caminho dos arquivos</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" text="#000000">
<font face = "Verdana" Size =2>
<p> Caminho fsico do arquivo global.asa:
<%= server.Mappath("global.asa")%></p>
</BODY>
</HTML>
Este mtodo muito til quando estamos criando uma aplicao em uma mquina
e depois ser transportada para outra, assim evitamos o problema de nomes fsicos diferentes
nas mquinas gerarem erros em nosso programa.

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:45

ACTIVE SERVER PAGES


O MTODO CREATEOBJECT
Utilizamos o mtodo Createobject quando necessitamos utilizar dentro de nossa
aplicao um objeto que est armazenado no servidor. Assim estamos criando uma instncia do
objeto dentro do programa.
Mas o que uma instncia? uma cpia de execuo do objeto em questo. Por
exemplo, voc precisa acessar o banco de dados da empresa para mostrar a categoria dos
produtos, ou acessar a tabela de departamentos da empresa para que o visitante do site mande
um e-mail para o departamento correto. Tambm quando formos enviar e-mails pelo site,
precisaremos criar uma instncia do objeto do ISS que trata desse envio.
A sintaxe do ASP utilizada para instanciar uma objeto :

Server.CreateObject(ProgId)
Onde o ProgId como o objeto conhecido dentro do servidor Web. Durante o
nosso curso conheceremos alguns.
Para exemplificar como escreveramos este cdigo dentro do VBScript, vamos citar
o objeto Dicitionary. Este objeto uma maneira poderosa de armazenarmos informaes
associadas a uma chave que identifica o valor. Ao declararmos um objeto Dictionary em uma
instncia o comando seria o seguinte:

set Dicionario = server.createobject(scripting.dictionary)


Na linha acima utilizamos a forma de declarao SET que utilizada para variveis
que recebero a instncia de um objeto. Variveis comuns devem ser declaradas apenas com a
instruo DIM.
Vamos criar um exemplo que armazena as mensagens de um usurio no dicionrio.
Este dicionrio ser uma varivel de sesso.

<HTML>
<HEAD>
<TITLE> Objeto SERVER - Criando um dicionrio</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" text="#000000">
<font face = "Verdana" Size =2>
<form method="post" action="testeServer1.asp">
<!-- O comando abaixo cria uma varivel oculta que identifica que o
formulrio foi enviado-->
<input type="hidden" name="Enviando" value="Sim">
<p> Digite a sua mensagem: <input type="text" name="txtMensagem"
size="50"> </p>
<p> <input type="submit" value="Armazenar">
</form>
<%
Dim varMensagem
'Declarao de Varivel
'Testa se o formulrio foi enviado.
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:46

ACTIVE SERVER PAGES


'Apenas quando o visitante clica no boto submit que os campos
do formulrio passam a existir.

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:47

ACTIVE SERVER PAGES


if request.form("Enviando") = "Sim" then
'Carrega a varivel varMensagem com o que o usurio digitou
varMensagem = request.form("txtMensagem")
'Verifica se o dicionrio j foi criado
If IsEmpty(Session("DicionarioUsuario")) then
'Se a varivel for Empty, significa que ela no existe
e precisa ser criada
'Criao da varivel que receber uma instncia do dicionrio
Set
Session("DicionarioUsuario")
server.createobject("scripting.dictionary")
end if
'Define uma varivel para receber o dicionrio
Dim MeuDicionario
set MeuDicionario = Session("DicionarioUsuario")
'Adiciona a mensagem no dicionrio na posio indicada pelo nmero
atual de items mais um
MeuDicionario.Add cStr(MeuDicionario.count + 1), varMensagem
end if
%>
</BODY>
</HTML>

Teste digitando algumas mensagens e v armazenando. Agora precisamos


recuperar as mensagens armazenadas na varivel Session. O objeto Dictionary tem a
propriedade Count que nos informa quantos itens foram armazenados. O ndice do dicionrio
comea de 0, ento se temos dez (10) mensagens armazenadas o ndice final ser 9. Para
recuperarmos as nove(9) mensagens ser preciso criar um loop at o nmero final do ndice,
para isso usaremos um clculo o valor do count 1. Ento, digite o cdigo abaixo no bloco de
notas:

<HTML>
<HEAD>
<TITLE> Objeto SERVER - Lendo um dicionrio</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" text="#000000">
<font face = "Verdana" Size =2>
<%
'Verifica se o dicionrio j foi criado
If IsEmpty(Session("DicionarioUsuario")) then
'Se a varivel for Empty, significa que ela no existe e precisamos
informar ao visitante que nenhuma mensagem foi gravada
response.write "Nenhuma mensagem encontrada"
else
Dim MeuDicionario, aMensagens 'Declarao de Varivel
'Define uma varivel para receber o dicionrio
set MeuDicionario = Session("DicionarioUsuario")
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:48

ACTIVE SERVER PAGES


'Cria um array para receber o contedo do dicionrio
aMensagens = MeuDicionario.Items

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:49

ACTIVE SERVER PAGES


'O ndice do dicionrio inicia-se de zero. Vamos criar um loop para
ler o dicionrio at o final
for i = 0 to Meudicionario.count - 1
O count retorna o total de itens comeando de um, como o ndice
para busca inicia-se de zero temos de subtrair um do nmero total de
itens
response.write "<br>" & aMensagens(i)
next
end if
%>
</BODY>
</HTML>

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:50

ACTIVE SERVER PAGES


CONHECENDO O SITE
Como j conhecemos os objetos do ASP e os principais comando VBScript e
algumas funes ns j podemos conversar sobre o site da Livraria ClaraLuz que vamos produzir.
Lembre-se que no nos atentamos ao designer do site, mas sim a sua funcionalidade e
programao, para que seu aprendizado de ASP seja o mais proveitoso possvel.
O objetivo do site da Livraria ClaraLuz permitir aos clientes cadastrados fazer
compras e downloads dos produtos da loja. Ns no faremos nenhum programa para a rea
administrativa do site, ou seja, todos os dados relacionados aos produtos sero inseridos
diretamente nas tabelas do banco de dados.

O BANCO DE DADOS DO SITE


Ento precisaremos desenvolver o banco de dados do site, que ser em Access e
acrescentar alguns dados.
Vamos analisar quais so as tabelas necessrias para o funcionamento do site.
Como j informamos o objetivo do site permitir que usurios cadastrados tenham acesso a
compras dos produtos da loja e downloads. Se so apenas os cadastrados, precisaremos de uma
tabela de Clientes e uma para Produtos. Neste contexto, acrescentamos que os produtos so
divididos por categorias onde o cliente poder selecionar os produtos que deseja pelo nome ou
parte dele, e pela categoria do produto.
Como o cliente efetuar uma compra ser gerado um pedido que contm os
produtos selecionados com seus respectivos preos e quantidades. At aqui so necessrias
mais trs tabelas Categorias, Pedidos, e a tabela que relaciona o pedido com os produtos que
ser a ProdutosPedidos. Mas, como voc j deve ter observado em sites de compras, enquanto
no confirmamos a compra os produtos selecionados ficam armazenados em um carrinho de
compras, que uma tabela de uso temporrio, ou seja, apenas enquanto o cliente est no site
que ela armazena as compras. Ento, mais uma tabela a do Carrinho.
No total temos seis tabelas que so: Clientes, Produtos, Categorias, Pedidos,
ProdutosPedidos e Carrinho. A estrutura das tabelas mostrada nas imagens a seguir:

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:51

ACTIVE SERVER PAGES

Aps criar cada uma das tabelas necessrio fazermos os relacionamentos entre
elas, a figura a seguir mostra como devero ser estes relacionamentos:

Adicione as categorias que os produtos podero estar na tabela de Categorias.


Sugestes: Livro, CD, Brinquedo, Revista, Software, etc..

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:52

ACTIVE SERVER PAGES


Adicione alguns produtos, sugerimos que cadastre pelo menos trs produtos para
cada categoria. Nesta tabela temos o campo preo e o preodesconto. O campo preo armazena
o preo normal do produto e o precodesconto armazena o valor do produto j com desconto.
Cadastre alguns produtos com precodesconto.
As outras tabelas sero alimentadas por meio da programao que estaremos
fazendo nas pginas do site.

O MAPA DO SITE
Agora que j temos o banco de dados precisamos conhecer o funcionamento das
pginas do site. Observe o esquema abaixo:

LIVRARIA CLARALUZ

VALIDALOG.ASP
DEFAULT.ASP

DEFAULTON.ASP

CADASTRO.ASP

LOGOUT.ASP
DOWNLOAD.ASP
PESQUISA.ASP

COMPRA.ASP
COMPRADOS.ASP

LOGIN.ASP

TOPO.ASP

RODAPE.ASP
FINALIZA.ASP

CONECTA.ASP

RESTRITO.ASP

A pgina Default.asp a pgina inicial do site, o visitante no cadastrado tem


acesso ao login e ao cadastro. O cliente cadastrado depois de se logar tem acesso ao restante do
site. Como ser feita a restrio do acesso a algumas pginas do site? Pelo arquivo restrito.asp
que verificar se aquele cliente est logado.
Ao se logar o cliente poder sair do site (logout.asp), fazer download dos livros
(download.asp) e pesquisar (pesquisa.asp) os produtos para fazer as compras (compra.asp).
Em todas as pginas no site estaro visveis as pginas login, topo e rodape. Todas
as pginas que fizerem acesso ao banco de dados tero que conter o cdigo do conecta, e todos
tero o teste de restrio de acesso ao site. A pgina Default.asp ter a seguinte aparncia:

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:53

ACTIVE SERVER PAGES

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:54

ACTIVE SERVER PAGES

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:55

ACTIVE SERVER PAGES


A DIRETIVA INCLUDE
Como j dissemos em todas as pginas do site os arquivos topo, que a parte do
cabealho da pgina; rodap, que a parte que garante a autoria do site; e o login, onde o
visitante pode digitar seu login e senha e se conectar ao site; estaro sendo visualizados. Isto
no quer dizer que tenhamos que copiar o cdigo de cada um desses arquivos e colar no arquivo
default. Como o ASP monta dinamicamente o HTML que ser enviado ao cliente temos uma
diretiva que insere o cdigo de um arquivo em outro.
Usamos a diretiva Include quando temos cdigos que se repetem em vrias
pginas. Em vez de digitar este cdigo em cada uma das pginas, voc cria um arquivo com o
cdigo padro e usa a diretiva para incluir aquele arquivo em qualquer ponto do cdigo que voc
est escrevendo.
Em quase todos os sites utilizada uma barra de navegao, que normalmente
aparecem em todas as pginas do site. Essa barra de navegao sempre sofre mudanas em
virtude das atualizaes do site, imagine que voc tivesse que entrar em cada uma das pginas e
alterar a barra de navegao, isto pode gerar erro e alguma pgina pode no ser alterada.
Usando a diretiva Include voc cria um arquivo com o cdigo que ser inserido em
um arquivo e usa a diretiva em cada um dos arquivos que receber o cdigo. Este cdigo pode
ser puro HTML ou funes que vo ser utilizadas pelo ASP.
A sintaxe da diretiva Include a seguinte:

<!--#include file= arquivo.ext -->


etc..

Onde ext a extenso do arquivo que ser inserido, que pode ser asp, htm, js,

Para montarmos qualquer pgina do nosso site sero utilizados quatro arquivos:
topo, login, o contedo e o rodap. Onde o contedo (miolo) vai depender de cada pgina, ou
seja, varivel.
A pgina default.asp o miolo ou o contedo principal desta pgina. Mas na parte
superior precisamos que aparea a logo da livraria, o banner e a barra de navegao. esquerda
do miolo aparecer o login para o visitante entrar no site e efetuar suas compras e abaixo de
tudo est o rodap. Observe o esquema a seguir:

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:56

ACTIVE SERVER PAGES

Topo.asp
Login.asp

Default.asp

Rodape.asp
Para melhor visualizao de cada um dos cdigos destes arquivos melhor
criarmos uma tabela para que cada parte fique colocada corretamente.
Como o arquivo topo o primeiro a aparecer vamos comear a tabela neste
arquivo. Abra o arquivo topo.asp e acrescente as linhas abaixo no final do cdigo html. Lembrese que este o primeiro cdigo que ser inserido na pgina, ento os comandos </html> e
</body> devem ser apagados, se existirem.

<table border=0 width=100% cellspacing=5 cellpadding=5>


<tr>
Salve o arquivo. Agora podemos voltar ao arquivo default e acrescentarmos a
diretiva Include, para inserirmos os trs arquivos. O arquivo topo ser o primeiro a ser inserido
e s ele tem as tags iniciais do cdigo HTML. A primeira linha do arquivo default.asp ser:

<!--#include file="topo.asp"-->
A partir deste ponto temos a segunda linha do esquema anterior, onde na coluna
da esquerda ser includo o arquivo login.asp e a direita o contedo do arquivo default. Logo
depois da primeira linha do arquivo default.asp, que o cdigo acima, insira as seguintes linhas:

<td valign=top width=20%><!--#include file="login.asp"--></td>


<td width=80%>
cdigo:

Depois de todo o cdigo do default, ou seja, no final do arquivo digite o seguinte

</td></tr>
<!--#include file=rodape.asp-->
Salve o arquivo default.asp.

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:57

ACTIVE SERVER PAGES


O mesmo precisa ser feito nas pginas download.asp, pesquisa.asp, defaulton.asp,
compra.asp, comprados.asp, cadastro.asp e finaliza.asp. Faa as mesmas alteraes que voc fez
no arquivo default.asp neste outros arquivos.

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:58

ACTIVE SERVER PAGES


ACESSO AO BANCO DE DADOS
Como o desenho do site est pronto precisamos comear a cadastrar os clientes
para que todo o processo de compra seja efetuado.
Sempre que formos gravar, ler, excluir ou alterar informaes em uma base de
dados, precisamos primeiro, acessar esses dados para que as aes sejam efetuadas.
Como a primeira tarefa do nosso site o cadastro, ou seja, gravar informaes no
banco de dados, precisamos acessar o banco de dados. Depois precisaremos pesquisar os
produtos cadastrados, gravar a quantidade comprada e atualizar o estoque quando a compra for
efetuada, todos estes processos exigem conexo com o banco de dados.
A interface de comunicao dos dados com o ASP o Activex Data Objects (ADO).
O ADO neutro quanto linguagem de programao, ele pode ser acessado em VBScript, Jscript,
Visual Basic e qualquer linguagem que trate de objetos.
O ADO tambm neutro quanto ao provedor de acesso aos dados. Ento podemos
utilizar um provedor rpido, por exemplo OLE DB ou um provedor confortvel como o ODBC. Mas
o que o OLE DB e o ODBC?
O OLE DB um conjunto de interfaces de programao no nvel de sistema que
fornece acesso a diversas informaes e fonte de dados localizadas em qualquer lugar. Usando
este tipo de provedor o programado tem total controle sobre as interfaces, entretanto, o mesmo
precisar ter algum conhecimento da linguagem C++.
O ODBC (Open Database Connectivity) fornece uma interface que permite aos
aplicativos acessarem os dados de vrias fontes de dados. uma maneira aberta e neutra quanto
ao fabricante de acessar dados que esto armazenados em formatos e bancos diferentes.
Agora, por que devemos utilizar ADO para acessar os dados? Porque a maneira
mais confortvel de acessar qualquer banco de dados, os objetos ADO so fceis de usar, ele
fornece acesso de alta velocidade com overhead baixa de memria e footprint de disco pequeno.
E quando estamos tratando de um servidor Web que atendo simultneas requisies de usurios
essas vantagens so muito importantes.

CONHECENDO OS OBJETOS ADO


O ADO tem objetos que nos ajudam a conectarmos a um banco de dados e
manipularmos seus dados. Abaixo alistamos os principais objetos ADO.
Connection representa a conexo com uma fonte de dados.
Recordset o conjunto de registros retornados de uma consulta ao banco e um
cursor para aqueles registros.
Field o contedo de uma nica coluna e informaes sobre os dados. O objeto
Recordset fornece a coleo Fields, que contm todos objetos Field de um recordset.

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:59

ACTIVE SERVER PAGES


QUE TIPO DE PROVEDOR UTILIZAR ODBC OU OLE DB?
Agora que vamos fazer a nossa conexo com o banco de dados que criamos no
Access para o site da livraria ClaraLuz precisamos definir se utilizaremos ODBC ou OLE DB para
acessarmos os dados.
Quando utilizamos o servidor ODBC para termos acesso a um banco de dados,
precisamos criar um Data Source Name (DSN), que um nome para base de dados desejada.
Para isso necessrio acessar o Painel de Controle do computador e acessar as fontes de dados
ODBC. Na guia NFD de Sistema bastaria acrescentar um novo DSN para o banco de dados
livraria. Qual a primeira desvantagem de utilizar o ODBC, se voc trocar o seu aplicativo de
mquina precisar configurar o ODBC novamente. Segunda desvantagem, a conexo mais
lenta, porque o ADO precisar passar pelo ODBC e pelo OLE DB para fazer a conexo, ou seja
precisou utilizar duas camadas para se conectar ao banco. O esquema abaixo ilustra isso:
ADO

OLE DB

ODBC

Banco de Dados

Quando utilizamos a conexo OLE DB estamos fazendo uma conexo direta com o
banco de dados. No necessrio fazer nenhum tipo de configurao no Painel de Controle e
nem altera-lo quando trocar o aplicativo de computador. A principal vantagem que temos que a
conexo por ser direta muito mais rpida. Para cada banco de dados a string de conexo OLE
DB varia um pouco, por se tratar de modelos de banco de dados diferentes. O esquema abaixo
ilustra como funciona a conexo OLE DB.
ADO

OLE DB

Banco de Dados

PASSOS PARA ACESSAR O BANCO DE DADOS


passos:

Para recuperarmos os dados de um banco de dados precisamos seguir os seguintes


1.

Abrir a conexo com o banco de dados.

2.

Criar um recordset que fornece acesso aos campos de dados de cada registro.

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:60

ACTIVE SERVER PAGES

dados.

3.

Recuperar os dados do recordset.

4.

Fechar o recordset e a conexo.

Seguindo estes passos sempre teremos resultados bons no acesso ao banco de

Como precisaremos em vrios momentos do nosso site acessar o banco de dados,


abrir e fechar a conexo vamos criar um arquivo que apenas cria a conexo e a abre e fecha. O
cdigo abaixo deve ser digitado no bloco de notas:

<%
'Procedimentos utilizados no Site Livraria
'Variveis
Dim StrCon
'String de conexo OLE DB
Dim Conexao
'Objeto de conexo
Set Conexao = Server.CreateObject("ADODB.CONNECTION")
conStr
=DRIVER={Microsoft
Access
Driver
(*.mdb)};
server.MapPath("bdLivrariaASP")
Sub AbreConexao()
Conexao.Open StrCon
End sub
Sub FechaConexao()
Conexao.close
end sub
%>

DBQ="

&

Primeiro criamos duas variveis uma para receber a string de conexo e uma outra
que seria a instncia do objeto Connection do ADO, que o representante da conexo com o
banco.
Depois a instncia do objeto Connection armazenada na varivel Conexao.
O script estabelece uma conexo fsica com o banco de dados, para isso precisamos
definir essa conexo. Essas definies fsicas da conexo so chamadas de String de conexo.
Esta foi armazenada na varivel StrCon. O valor da string, que deve vir entre aspas, por no ser
um cdigo ASP. Est a string para Microsoft Access 2000.
Nesta string encontramos o tipo de banco, no nosso caso Access. O DBQ arquivo
mdb que estamos procurando. Aqui poderamos digitar o caminho fsico do banco de dados, por
exemplo: p:\livrariaclaraluz\bdlivrariaASP. Mas encontraramos o problema de migrar o aplicativo
para outra mquina e qualquer mudana na unidade de disco teramos que abrir este arquivo e
alterar o caminho fsico do banco. Usando o objeto Server com o mtodo Mappath estamos
pegando o caminho fsico do site atravs do caminho virtual, independente de qual unidade o
aplicativo esteja ele buscar o caminho correto.

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:61

ACTIVE SERVER PAGES


Voc pode notar a presena do & (e comercial) entre a string OLE DB e o objeto
Server do ASP. Lembre-se que este smbolo serve para concatenar, ou seja, unir um cdigo ASP
a um outro cdigo como HTML, SQL, Strings de conexo e etc..

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:62

ACTIVE SERVER PAGES


A string para Microsoft Access 97 a seguinte:

"DRIVER={Microsoft
Access
Driver
(*.mdb)};
server.MapPath("bdLivraria") & "; uid=sa; pwd=;"

DBQ="

&

E quando estamos utilizando Access 97 precisamos ainda acrescentar os atributos


de usurio e senha, conforme o exemplo anterior.
Se estiver utilizando SQL Server 7 utilize a seguinte string de conexo:

"Provider=SQLOLEDB.1;Data
Source=Curso;User
Catalog=Livraria; Connect Timeout=10"

Id=sa;Password=;Initial

Onde Data Source o nome do servidor SQL Server 7, User ID o usurio de acesso
ao banco de dados, Password a senha do usurio utilizado, Initial Catalog o nome do banco a ser
acessado no servidor SQL Server e o Connect Timeout o tempo que uma conexo com o banco
pode ficar ociosa.
Depois criamos uma sub (procedimento) chamada AbreConexao que abre a
instncia do objeto Connection com as definies da string.
Uma outra sub foi criada para fechar a conexo com o banco de dados.

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:63

ACTIVE SERVER PAGES


A LINGUAGEM SQL
SQL a Structured Query Language, ou a linguagem de consultas estruturada
usada para consultar, atualizar e gerenciar os bancos de dados relacionais. Usando SQL podemos
acessar praticamente todos os bancos de dados existentes, bastando saber seus comandos
bsicos e a estrutura do banco de dados a ser acessado.
Com a linguagem SQL fazemos tudo dentro de um banco de dados. Para
trabalharmos com os dados em um site conheceremos apenas os comandos de manipulao de
dados. Por exemplo, ser necessrio validar se um usurio est cadastrado em nosso banco de
dados para acessar algumas pginas como a de pesquisa, a de download e etc. Para isso
precisamos acessar o banco de dados e procurar na tabela cliente se aquele login existe, esta
uma operao de seleo de dados que a linguagem SQL que faz.
Se o visitante no for cadastrado no site ser necessrio
clientes, tambm uma operao que feita pela linguagem SQL. E
precisarmos atualizar um valor dentro de uma tabela, excluir algum
operaes so efetuadas pela linguagem SQL, que chamada linguagem
dados.
dados para:

inseri-lo na tabela de
assim por diante, se
registro, todas essas
universal de banco de

Quando estamos trabalhando com um banco de dados podemos manipular os

Selecionar (SELECT).

Inserir (INSERT).

Atualizar (UPDATE).

Apagar (DELETE).

A partir de agora estaremos testando estes comandos da linguagem SQL para


depois prosseguirmos com a criao do nosso site.
OBSERVAO
Todos os comandos SQL utilizados neste material referem-se ao Access, algumas
particularidades so diferentes em outros bancos de dados como SQL Server e Oracle. Por isso,
alguns comandos podem gerar erro se forem executados em outros bancos.
Dos quatro comandos citados acima o mais utilizado e o que tem mais
particularidades o comando SELECT, que ser o nosso primeiro objeto de estudo da linguagem
SQL.

O COMANDO SELECT
Este o comando utilizado para selecionar os dados de uma tabela. Tambm
conhecido como comando de leitura. A sintaxe do comando SELECT :

SELECT campo, campo FROM tabela


Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:64

ACTIVE SERVER PAGES


Para testar, vamos criar uma pgina que mostra todas as categorias de produtos
cadastradas em nosso banco de dados:

<!--#include file="conecta.asp"-->
<HTML>
<HEAD>
<TITLE> Categorias</TITLE></HEAD>
<BODY BGCOLOR="#FFFFFF" text="#000000">
<center> <table border="1" width= "80%" cellpadding="0" cellspacing="0">
<tr align = "center">
<td colspan =2><font face="Verdana" Size="2"> Lista de Categorias
</font></td>
</tr> <% 'Declarao de Variveis
Dim ComandoSQL, rsCategorias
Executa o procedimento que est no arquivo conecta.asp
AbreConexao
'Comando SQL para buscar os campos da tabela categorias
ComandoSQL = "SELECT CodCategoria, NomeCategoria FROM Categorias"
'Execuo do comando SQL para gerar um recordset
Set rsCategorias = conexao.execute(ComandoSQL)
'Mostrar todas as categorias at o fim do recordset
While not rsCategorias.EOF%>
<tr><td><font face="Verdana" Size="2">
<%=rsCategorias("CodCategoria")%> </font></td>
<td><font face="Verdana" Size="2">
<%=rsCategorias("NomeCategoria")%> </font></td></tr>
<%
rsCategorias.MoveNext
Wend
rsCategorias.close
FechaConexao
'Liberando espao de memria
Set rsCategorias = nothing %>
</BODY>
</HTML>
Na linha ComandoSQL = "SELECT CodCategoria, NomeCategoria FROM Categorias"
armazenamos a instruo SQL para ser executada no banco.
Depois criamos a instncia do recordset que recebeu o resultado do comando SQL
executado no banco de dados, como a linha abaixo mostra:
Set rsCategorias = conexao.execute(ComandoSQL)
O comando Execute faz parte do objeto ADO de acesso a banco de dados, ele
executa o comando que estiver entre os parnteses. Como este comando retorna dados
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:65

ACTIVE SERVER PAGES


necessrio o uso de recordset, ou seja, sempre que utilizarmos o comando SELECT do SQL
necessrio o uso de um recordset.

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:66

ACTIVE SERVER PAGES


O recordset possui duas propriedades que indicam o incio e o final dos dados. BOF
para incio dos dados e EOF para final dos dados. No comando de repetio While testamos se
no era o final do arquivo para que todos os dados fossem mostrados.
Para mostrar o contedo de cada um dos Fields (campos) dentro do Recordset
utilizamos o comando <%=rsCategorias("NomeCategoria")%> que equivale ao objeto
Response do ASP. Como voc pode notar a sintaxe para exibir o contedo de um dos campos do
recordset :
NomedoRecordset(NomedoCampo)
Para que fosse possvel movermos entre os registros retornados utilizamos um dos
mtodos do recordset, o MoveNext (porque estvamos com o ponteiro parado no primeiro
registro). Temos tambm os seguintes mtodos para movimentao entre os registros:
MoveFirst vai para o primeiro registro do recordset. MoveNext vai para o
prximo registro. MovePrevious vai para o registro anterior e MoveLast vai para o ltimo
registro.
Quando o fim do recordset atingido o While encerrado e o recordset fechado,
procedimento que no deve ser esquecido para no consumirmos recursos do servidor. Tambm
a conexo com o banco foi fechada atravs da chamada do procedimento FechaConexao. E a
varivel utilizada como instncia do recordset liberada da memria pelo comando Set
rsCategorias = nothing.
A maioria dos nossos programas seguir estes passos:
1.

Incluso do arquivo conecta para que a conexo com o banco de dados seja
possvel.

2.

Declarao das variveis.

3.

Criao do comando SQL.

4.

Execuo do comando SQL no banco de dados, com o retorno de recordset ou


no.

5.

Mostrar os dados recuperados com o uso de uma estrutura de repetio.

6.

O fechamento do recordset (quando este existir) e da conexo com o banco de


dados.

7.

E a liberao de variveis de memria.

CRITRIOS DE SELEO PARA TEXTO


Muitas consultas que vamos fazer nos bancos de dados precisam de critrios para
no retornar dados que no so teis a quem est navegando pelo site, ou at mesmo dados
desnecessrios naquele momento da consulta. Desta maneira, precisamos acrescentar a clusula
WHERE no comando SQL que for passado ao banco. A sintaxe a seguinte:
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:67

ACTIVE SERVER PAGES


SELECT campo, campo FROM tabela WHERE critrio

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:68

ACTIVE SERVER PAGES


letra.

Por exemplo, preciso selecionar os produtos que comeam com uma determinada

<!--#include file="conecta.asp"-->
<HTML>
<HEAD>
<TITLE> Produtos</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" text="#000000">
<center>
<table border="1" width= "80%" cellpadding="0" cellspacing="0">
<tr align = "center">
<td colspan =3><font face="Verdana" Size="2"> Lista de Produtos
</font></td></tr>
<tr>
<td><font face="Verdana" Size="2">Nome do Produto</font></td>
<td><font face="Verdana" Size="2">Estoque</font></td>
<td><font face="Verdana" Size="2">Preco</font></td></tr>
<% 'Declarao de Variveis
Dim ComandoSQL, rsProdutos
AbreConexao
'Comando SQL para buscar os campos da tabela Produtos
ComandoSQL = "SELECT Nomeproduto, Estoque, preco FROM Produtos
ComandoSQL = ComandoSQL & WHERE NomeProduto LIKE 'M%' "
'Execuo do comando SQL para gerar um recordset
Set rsProdutos = conexao.execute(ComandoSQL)
'Mostrar todas as produtos at o fim do recordset
While not rsProdutos.EOF%>
<tr>
<td><font face="Verdana" Size="2">
<%=rsProdutos("NomeProduto")%> </font></td>
<td><font face="Verdana" Size="2">
<%=rsProdutos("Estoque")%> </font></td>
<td><font face="Verdana" Size="2">
<%=rsProdutos("Preco")%> </font></td></tr>
<%
rsProdutos.MoveNext
Wend
rsProdutos.close
FechaConexao
'Liberando espao de memria
Set rsProdutos = nothing %>
</BODY>
</HTML>
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:69

ACTIVE SERVER PAGES

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:70

ACTIVE SERVER PAGES


Na linha ComandoSQL = "SELECT Nomeproduto, Estoque, preco FROM
Produtos WHERE NomeProduto LIKE 'M%' " armazenamos a instruo SQL para ser
executada no banco. Note a presena da clusula WHERE que indica: selecionar o nome do
produto, o estoque e o preo da tabela Produtos quando o nome do produto for como (LIKE)
M%. Toda vez que vamos comparar textos no SQL utilizamos aspas simples para separa o texto
da comparao do comando SQL. O sinal % (percentagem) o caractere curinga do SQL, o
mesmo que o * faz no VBScript. Ele substitui qualquer letra que vier depois de M, ou seja,
selecionar todos os produtos que comeam com a letra M.
Lembre-se de colocar a letra inicial de um dos produtos que voc cadastrou no
banco de dados.

CRITRIOS DE SELEO COM VALORES


Tambm precisamos em vrios momentos fazer selees com critrios de valores.
Agora quero selecionar todos os produtos que estejam com o estoque abaixo de 30.
Altere a linha do comando SQL para:

ComandoSQL = "SELECT Nomeproduto, Estoque, preco FROM Produtos WHERE


Estoque < 30 "

ORDENANDO OS DADOS
Voc pode notar que os produtos foram alistados fora da ordem alfabtica. Para
uma melhor leitura dos dados pelo visitante e conseqentemente melhor satisfao podemos
estar ordenando os dados. Basta acrescentar a clusula ORDER BY. A sintaxe a seguinte:

SELECT campo, campo FROM tabela WHERE critrio ORDER BY campo


A clusula ORDER BY pode ser usado tambm quando o WHERE no existir no
comando SQL. Vamos ordenar os dados mostrados no arquivo anterior. Modifique a linha do
comando SQL para:

ComandoSQL = "SELECT Nomeproduto, Estoque, preco FROM Produtos WHERE


Estoque < 30 "
ComandoSQL = ComandoSQL & " ORDER BY NomeProduto"
Como a linha j estava muito grande muito comum utilizarmos a concatenao do
contedo da varivel, como voc pode ver nas linhas de cdigo acima. Ento a varivel que
recebe ela mesma concatenada (&) com a string restante.
seguinte:

Se quiser colocar em ordem decrescente basta acrescentar DESC. A sintaxe a

SELECT campo, campo FROM tabela WHERE critrio ORDER BY campo DESC

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:71

ACTIVE SERVER PAGES


CALCULANDO VALORES
Em muitas ocasies precisamos calcular totais na seleo dos dados. Por exemplo,
preciso saber a quantidade total de produtos em cada categoria. Tambm saber a mdia de
preos dos produtos, etc..
Abaixo alistamos alguns comandos de clculo que podem ser utilizados na
linguagem SQL.

COUNT Conta o nmero de registros.

SUM Soma o contedo de campos numricos.

AVG Calcula a mdia de campos numricos.

MAX Encontra o maior valor dentro de um campo numrico.

MIN Encontra o menor valor dentro de um campo numrico.

Vamos fazer um programa que encontra o preo mais caro do nosso estoque.

<!--#include file="conecta.asp"-->
<HTML>
<HEAD>
<TITLE> Produtos</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" text="#000000">
<center>
<table border="1" width= "80%" cellpadding="0" cellspacing="0">
<tr align = "center">
<td
colspan
=3><font
face="Verdana"
Size="2">
Produto
mais
caro</font></td>
</tr>
<% 'Declarao de Variveis
Dim ComandoSQL, rsProdutos
AbreConexao
'Comando SQL para buscar o maior preo da tabela Produtos
ComandoSQL = "SELECT MAX(preco) AS MaiorPreco FROM Produtos"
'Execuo do comando SQL para gerar um recordset
Set rsProdutos = conexao.execute(ComandoSQL)
'Mostrar o maior preo at o fim do recordset
While not rsProdutos.EOF%>
<tr>
<td align="center"><font face="Verdana" Size="2">
<%= formatnumber(rsProdutos("Maiorpreco"),2)%> </font>
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:72

ACTIVE SERVER PAGES


</td> </tr>

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:73

ACTIVE SERVER PAGES


<%
rsProdutos.MoveNext
Wend
rsProdutos.close
FechaConexao
'Liberando espao de memria
Set rsProdutos = nothing
%>
</BODY>
</HTML>
Na linha ComandoSQL = "SELECT
MAX(preco) AS MaiorPreco FROM
Produtos" utilizamos um recurso para nomear o campo calculado. A clusula AS define um nome

que pode ser referenciado na hora de mostrarmos o contedo do campo calculado. Este recurso
pode ser utilizado para qualquer tipo de campo.

Na linha <%= formatnumber(rsProdutos("Maiorpreco"),2)%> utilizamos


uma funo do VBScript que formata os nmeros com a quantidade de casas decimais
especificadas pelo programador. A sintaxe da funo a seguinte:

Formatnumber(valor,casas decimais)

AGRUPANDO VALORES
Quando precisamos calcular totais em grupos utilizamos a clusula GROUP BY da
linguagem SQL.
Vamos criar um programa que calcule o total de produtos por categoria. Digite o
cdigo abaixo no bloco de notas:

<!--#include file="conecta.asp"-->
<HTML>
<HEAD><TITLE> Produtos</TITLE></HEAD>
<BODY BGCOLOR="#FFFFFF" text="#000000">
<center>
<table border="1" width= "80%" cellpadding="0" cellspacing="0">
<tr align = "center">
<td colspan =2><font face="Verdana" Size="2">
Total de Produtos por Categoria</font></td></tr>
<tr align="center">
<td><font face="Verdana" Size="2"> Categoria</font></td>
<td><font
face="Verdana"
Size="2">
Quantidade
Total
em
Estoque
</font></td>
</tr>
<% 'Declarao de Variveis
Dim ComandoSQL, rsProdutos
AbreConexao
'Comando SQL para buscar os campos da tabela Categorias e calcular o
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:74

ACTIVE SERVER PAGES


estoque

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:75

ACTIVE SERVER PAGES


ComandoSQL = "SELECT NomeCategoria, SUM(estoque) AS TotEstoque
ComandoSQL = ComandoSQL & FROM Produtos, Categorias "
ComandoSQL
=
ComandoSQL
&
"
WHERE
Produtos.codCategoria=Categorias.CodCategoria
ComandoSQL = ComandoSQL & " GROUP BY NomeCategoria "
'Execuo do comando SQL para gerar um recordset
Set rsProdutos = conexao.execute(ComandoSQL)
'Mostrar todas as categorias at o fim do recordset
While not rsProdutos.EOF%>
<tr>
<td align="center"><font face="Verdana" Size="2">
<%= rsProdutos("NomeCategoria")%> </font></td>
<td align="center"><font face="Verdana" Size="2">
<%=
formatnumber(rsProdutos("totEstoque"),2)%>
</font></td></tr>
<%
rsProdutos.MoveNext
Wend
rsProdutos.close
FechaConexao
'Liberando espao de memria
Set rsProdutos = nothing
%>
</BODY>
</HTML>
Na linha do SELECT criada neste programa utilizamos a clusula GROUP BY para
agrupar os valores pelo Nome da Categoria. No resultado do programa veremos qual a
quantidade de produtos em estoque para cada uma das categorias cadastradas em nosso banco
de dados.

O COMANDO INSERT
Este o comando utilizado para inserir dados em uma tabela. Tambm conhecido
como comando de gravao. A sintaxe do comando INSERT :

INSERT
valores)

INTO

tabela

(campo,

campo,

campo)

VALUES

(valores,valores,

Para testarmos vamos criar um programa que insere uma nova categoria na tabela
de categorias e depois mostra todos os valores armazenados nesta tabela. A seguir o exemplo de
um cdigo para insero em uma tabela:

Comando SQL para inserir a nova Categoria


ComandoSQL
=
"INSERT
INTO
Categorias
(NomeCategoria)
VALUES
('Brinquedo')"
'O comando insert no gera retorno, ento no necessrio uso do
recordset
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:76

ACTIVE SERVER PAGES


conexao.execute(ComandoSQL)

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:77

ACTIVE SERVER PAGES


O COMANDO UPDATE
Este o comando utilizado para alterar dados em uma tabela. Tambm conhecido
como comando de gravao. A sintaxe do comando UPDATE :

UPDATE tabela SET campo = valor WHERE critrio


Utilizaremos este comando quando formos por exemplo alterar o estoque de um
produto depois de uma compra, ou quando um cliente alterar o seu cadastro, etc..

O COMANDO DELETE
Este o comando utilizado para excluir dados em uma tabela. Tambm conhecido
como comando de excluso. A sintaxe do comando DELETE :

DELETE tabela WHERE critrio


tabela.

Utilizaremos este comando quando for preciso excluir um dos registros de uma

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:78

ACTIVE SERVER PAGES


CRIANDO A PGINA DE CADASTRO
A pgina cadastro servir para o cliente informar seus dados pessoais para que
possamos efetuar as suas compras.
O nosso objetivo nesta pgina reunir todos os conhecimentos adquiridos at o
momento com uma aplicao prtica do ASP. Est pgina far testes de validao dos dados
digitados e armazenar mensagens de erro em um dicionrio. E se o cliente preencher todos os
dados corretamente ser inserido na tabela de Clientes.
Suponhamos que j temos o formulrio que ser preenchido pelo cliente montado.
O que acontecer quando o cliente clicar no boto Enviar?
Os dados com asterisco devem ser validados, se houver algum erro a mensagem
ser armazenada em um dicionrio e depois que todas as validaes forem feitas testaremos se
alguma mensagem foi gravada no dicionrio. Se houver alguma mensagem gravada mostraremos
as mensagens e o formulrio novamente. Se no houver nenhuma mensagem armazenada,
vamos inserir os dados na tabela clientes e mostrar uma mensagem para o cliente indicando que
o cadastro foi efetuado com sucesso.
Primeiro ns faremos as validaes. Todos os campos, exceto o lembrete devem
ser preenchidos, este o primeiro teste.
Na senha testar se a senha e a confirmao foram digitadas corretamente. No
estado precisamos saber se o valor do campo igual a selecione.
E no e-mail alm de testarmos se foi preenchido precisamos testar se o @ foi
digitado, porque este o identificador de um e-mail correto.
O prprio arquivo cadastro ser executado quando o cliente clicar no boto Enviar.
Como saberemos que o cliente clicou no boto Enviar? Como j vimos anteriormente basta
criarmos um campo oculto dentro do formulrio.
Por que necessrio este campo? Porque as validaes s podem ser executadas
se o cliente tiver clicado no boto Enviar.
Ento vamos acrescentar a ao em nosso formulrio. No action do comando Form
coloque o arquivo cadastro.asp, conforme a linha abaixo.

<form method=post action=cadastro.asp>


Depois deste comando acrescente o comando input para criar o campo oculto que
testaremos para saber se o cliente clicou no boto Enviar. A linha a seguir mostra o comando a
ser acrescentado:

<input type=hidden name=enviando value=sim>


Como este arquivo acessar o banco de dados vamos inserir o arquivo conecta.
Basta colocar a diretiva include, conforme a linha a seguir, no incio do arquivo.

<!--#include file="conecta.asp"-->
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:79

ACTIVE SERVER PAGES


O primeiro passo testar se o cliente est enviando o arquivo, se o teste for
verdadeiro fazer as validaes.
No caso da validao do e-mail, isso poder acontecer inmeras vezes no site, o
ideal criarmos uma funo que possa ser acessada por qualquer arquivo. Vamos criar esta
funo dentro do arquivo conecta.asp, abra este arquivo e acrescente o seguinte cdigo:

Function validaEmail(email)
Dim totCaracteres,Caractere
totCaracteres = Len(email)
for I = 1 to totCaracteres
Caractere = Mid(email,I,1)
if Caractere = "@" then
validaEmail = "Verdadeiro"
exit for
else
validaEmail = "Falso"
end if
next
end function
Esta funo recebe o e-mail, conta o nmero de caracteres neste e-mail para que
possamos passar caractere por caractere para testar se o @ foi digitado. Em um loop usando for
at o total de caracteres, usamos a funo MID para pegar cada caractere na posio indicada
pelo ndice do FOR, depois testamos se este caractere o @. Se o teste for verdadeiro a funo
retornar Verdadeiro e sair do FOR, ou seja, no mais necessrio testar. Se o teste for falso a
funo retornar Falso.
No programa do cadastro criaremos uma varivel para receber o resultado da
funo e testaremos se a mesma falsa para gravarmos a mensagem de erro.

<font face=verdana size=2>


<p align=center>Preencha o formulrio abaixo:<br>
Campos com * so de preenchimento obrigatrio.</p>
<%
if Request.Form("enviando") = "sim" then
Dim Dicionario 'Mensagens de erro
Dim i
'Contador de erros
Dim comandoSql 'Comando SQL a ser executado
Dim Rs
'Resultado da consulta - registro
Dim Vet
'Vetor de erros
set Dicionario = CreateObject("scripting.dictionary")
i = 0
if Request.Form("nome")="" then
Dicionario.add i, "Preencha o Nome!"
i = i+1
end if
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:80

ACTIVE SERVER PAGES


if Request.Form("email")="" then

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:81

ACTIVE SERVER PAGES


Dicionario.add i, "Preencha o E-mail!"
i = i+1
end if
Email = ValidaEmail(request.form("email"))
if Email = "Falso" then
Dicionario.add i, "E-mail preenchido incorretamente!"
i = i+1
end if
AbreConexao
'Comando SQL para testar se o login digitado pelo cliente j existe
comandoSql = "Select login FROM Clientes WHERE login =
comandoSql = ComandoSQL & '" & Request.Form("login") &"'"
set RS = Conexao.execute(comandoSql)
if not Rs.Eof then
Dicionario.add i, "Login j cadastrado!"
i = i+1
end if
FechaConexao
if Request.Form("senha")="" then
Dicionario.add i, "Preencha a Senha!"
i = i+1
end if
if Request.Form("confirma")="" then
Dicionario.add i, "Preencha a confirmao da Senha!"
i = i+1
end if
if Request.Form("confirma")<> Request.Form("senha") then
Dicionario.add i, "A senha e a confirmao esto diferentes!"
i = i+1
end if
if Request.Form("endereco")="" then
Dicionario.add i, "Preencha o Endereo!"
i = i+1
end if
if Request.Form("Cidade")="" then
Dicionario.add i, "Preencha a Cidade!"
i = i+1
end if
if Request.Form("estado")="UF" then
Dicionario.add i, "Preencha o Estado!"
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:82

ACTIVE SERVER PAGES


i = i+1
end if

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:83

ACTIVE SERVER PAGES


Vet = Dicionario.items
if Dicionario.Count<>0 then
Response.Write "<center><font face=verdana size=1 color=red>"
Response.Write "O(s) seguintes dado(s) est(o) incorreto(s)<br>"
for i = 0 to Dicionario.Count - 1
Response.Write vet(i) & "<br>"
next
Response.Write "</font></center>"
end if
end if
%>
Se voc testar o cdigo at aqui notar que os campos que estavam corretos foram
perdidos e o cliente teve que digit-los novamente. Isso no muito agradvel. Como faremos
para que os campos voltem preenchidos quando acontecer o erro?
Nos campos do tipo Text bastar acrescentar o atributo Value igual ao que o ASP
conseguiu recuperar quando o cliente clicou no boto Enviar. A seguir temos os campos de texto
com o acrscimo do atributo, o que est em negrito deve ser acrescentado ao cdigo:

<tr><td><font face=verdana size=2> Nome:* </font></td>


<td><input type=text name=nome size=60 maxlength=60
value = "<%=request.form("nome")%>" > </td></tr>
<tr><td><font face=verdana size=2>Login:*</font></td>
<td><input type=text name=login size=20 maxlength=20
value="<%=request.form("login")%>"></td></tr>
<tr><td><font face=verdana size=2> Senha:*</font></td>
<td><input type=password name=senha size=20 maxlength=10
value="<%=request.form("senha")%>"></td></tr>
<tr><td><font face=verdana size=2> Confirmao:*</font></td>
<td><input type=password name=confirma size=20 maxlength=10
value="<%=request.form("confirma")%>"></td></tr>
<tr><td><font face=verdana size=2> Lembrete:</font></td>
<td><input type=text name=lembrete size=40 maxlength=40
value="<%=request.form("lembrete")%>"></td></tr>
<tr><td><font face=verdana size=2> Endereo:*</font></td>
<td><input type=text name=endereco size=60 maxlength=60
value="<%=request.form("endereco")%>"></td></tr>
<tr><td><font face=verdana size=2> Cidade:*</font></td>
<td><input type=text name=cidade size=30 maxlength=40
value="<%=request.form("cidade")%>"></td></tr>
<tr><td><font face=verdana size=2> Estado:*</font></td>
<td><select name=estado>
<option selected value=UF>Selecione</option>
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:84

ACTIVE SERVER PAGES


<option value=AM>Amazonas</option>

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:85

ACTIVE SERVER PAGES


<option value=AC>Acre</option>
<option value=BA>Bahia</option>
<option value=MG>Minas Gerais</option>
<option value=RJ>Rio de Janeiro</option>
<option value=SP>So Paulo</option>
<option value=RS>Rio Grande do Sul</option>
<option value=MT>Mato Grosso</option>
<option value=TO>Tocantins</option>
<option value=PE>Pernambuco</option>
<option value=RN>Rio Grande do Norte</option>
<option value=ES>Esprito Santo</option>
<option value=AP>Amap</option>
<option value=RO>Rondnia</option>
<option value=RR>Roraima</option> </select></td></tr>
<tr><td><font face=verdana size=2>Sexo:*</font></td>
<td><font face=verdana size=2>
<input type="radio" value="F" name="Sexo"> Feminino&nbsp;&nbsp;
<input type="radio" value="M" checked name="Sexo">&nbsp;
Masculino</font></td></tr>
<tr><td>
<font face=verdana size=2> E-mail:*</font></td>
<td><input type="text" name="email" size="59"
value="<%=request.form("email")%>"></td></tr>
Agora precisamos tambm fazer com que o estado volte com o valor selecionado
pelo cliente antes do erro. Precisamos testar se aquele foi o valor selecionado, se for verdadeiro o
teste ento vamos colocar o campo como selecionado.
cdigo:

Abaixo o cdigo com as alteraes, o que est em negrito deve ser acrescentado ao

<tr><td><font face=verdana size=2> Estado:*</font></td>


<td><select name=estado>
<option <% if request.form("estado") = "UF" then %>selected
value=UF> Selecione</option>
<option <% if request.form("estado") = "AM" then %>selected
value=AM> Amazonas</option>
<option <% if request.form("estado") = "AC" then %>selected
value=AC> Acre</option>
<option <% if request.form("estado") = "BA" then %>selected
value=BA> Bahia</option>
<option <% if request.form("estado") = "MG" then %>selected
value=MG> Minas Gerais</option>
<option <% if request.form("estado") = "RJ" then %>selected
value=RJ> Rio de Janeiro</option>
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

<%end if%>
<%end if%>
<%end if%>
<%end if%>
<%end if%>
<%end if%>

Pg.:86

ACTIVE SERVER PAGES


<option <% if request.form("estado") = "SP" then %>selected <%end if%>

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:87

ACTIVE SERVER PAGES


value=SP> So Paulo</option>
<option <% if request.form("estado") = "RS" then %>selected
value=RS> Rio Grande do Sul</option>
<option <% if request.form("estado") = "MT" then %>selected
value=MT> Mato Grosso</option>
<option <% if request.form("estado") = "TO" then %>selected
value=TO> Tocantins</option>
<option <% if request.form("estado") = "PE" then %>selected
value=PE> Pernambuco</option>
<option <% if request.form("estado") = "RN" then %>selected
value=RN> Rio Grande do Norte</option>
<option <% if request.form("estado") = "ES" then %>selected
value=ES> Esprito Santo</option>
<option <% if request.form("estado") = "AP" then %>selected
value=AP> Amap</option>
<option <% if request.form("estado") = "RO" then %>selected
value=RO> Rondnia</option>
<option <% if request.form("estado") = "RR" then %>selected
value=RR> Roraima</option> </select></td></tr>

<%end if%>
<%end if%>
<%end if%>
<%end if%>
<%end if%>
<%end if%>
<%end if%>
<%end if%>
<%end if%>

O campo sexo tambm precisa voltar com o valor selecionado pelo cliente antes do
erro. Precisamos testar se aquele foi o valor selecionado, se for verdadeiro o teste ento vamos
colocar o campo como selecionado.
cdigo:

Abaixo o cdigo com as alteraes, o que est em negrito deve ser acrescentado ao

<tr><td><font face=verdana size=2>Sexo:*</font></td>


<td><font face=verdana size=2>
<%if Request.Form("Sexo") = "M" then %>
<td width="80%">
<input type="radio" name="Sexo" value="F">
<font face="Tahoma" size="2">Feminino</font>&nbsp;
<input type="radio" value="M" name="Sexo" checked>
<font face="Tahoma" size="2">Masculino</font></td>
<% elseif Request.Form("Sexo") = "F" then%>
<td width="80%">
<input type="radio" name="Sexo" value="F" checked>
<font face="Tahoma" size="2">Feminino</font>&nbsp;
<input type="radio" value="M" name="Sexo" >
<font face="Tahoma" size="2">Masculino</font></td>
<% else %>
<td width="80%">
<input type="radio" name="Sexo" value="F">
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:88

ACTIVE SERVER PAGES


<font face="Tahoma" size="2">Feminino</font>&nbsp;
<input type="radio" value="M" name="Sexo">

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:89

ACTIVE SERVER PAGES


<font face="Tahoma" size="2">Masculino</font></td>
<% end if%>
Agora que todas as validaes esto prontas e os valores preenchidos
anteriormente j esto sendo mostrados, precisamos programar para que se no acontecer
nenhum erro gravar os dados no banco de dados e mostrar uma mensagem para o cliente
informando que os dados foram armazenados com sucesso.
A condio para gravar os dados no ter nenhuma mensagem de erro
armazenada. Ns j estamos testando se aconteceu algum erro, basta colocarmos o ELSE e os
comandos para inserir os dados na tabela.
Abaixo temos o cdigo com as modificaes que voc precisa fazer, o que est em
negrito deve ser acrescentado ao cdigo existente:

if Dicionario.Count<>0 then
Response.Write "<center><font face=verdana size=1 color=red>"
Response.Write "O(s) seguintes dado(s) est(o) incorreto(s)<br>"
for i = 0 to Dicionario.Count - 1
Response.Write vet(i) & "<br>"
next
Response.Write "</font></center>"
else
'caso no encontrou erro
AbreConexao
ComandoSql = "INSERT INTO Clientes(nomecliente, login, email, senha,
ComandoSql = ComandoSql & lembrete, endercliente, cidade, estado,
ComandoSql = ComandoSql & dtcadastro) "
ComandoSql = ComandoSql & "VALUES('" & Request.Form("nome") & "','"
ComandoSql = ComandoSql & Request.Form("login") & "','"
ComandoSql = ComandoSql & Request.Form("email") &"','"
ComandoSql = ComandoSql & Request.Form("senha") &"','"
ComandoSql = ComandoSql & Request.Form("lembrete") &"','"
ComandoSql = ComandoSql & Request.Form("endereco") &"','"
ComandoSql = ComandoSql & Request.Form("cidade") &"','"
ComandoSql = ComandoSql & Request.Form("estado") &"','" & now() &"')"
conexao.execute(comandoSql)
end if
Se fossemos escrever o comando SQL em uma nica linha ele ficaria assim
ComandoSql = "INSERT INTO Clientes(nomecliente, login, email, senha, lembrete,
endercliente, cidade, estado, dtcadastro) VALUES('" & Request.Form("nome") & "','"
Request.Form("login") &"','" &Request.Form("email")&"','" & Request.Form("senha")
& "','" & Request.Form("lembrete") &"','" & Request.Form("endereco") &"','" &
Request.Form("cidade") &"','" & Request.Form("estado") &"','" & now() &"')"
A princpio este comando parece confuso por causa de tantas aspas duplas e
simples. Vamos tentar relembrar algumas regras de ASP e SQL.

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:90

ACTIVE SERVER PAGES


No ASP tudo que no seja cdigo ASP ou VBScript de ser escrito entre aspas
duplas, como aconteceu no comando acima. Quando preciso juntar um cdigo no ASP com um
cdigo ASP tenho que fechar as aspas do cdigo que no ASP usar o smbolo concatenador (&)
digitar o cdigo ASP, usar o smbolo concatenador se o cdigo no ASP for continuar e abrir as
aspas duplas novamente e fecha-las quando chegarmos ao final do cdigo no ASP.
Outra regra que no podemos nos esquecer que na linguagem SQL todo valor do
tipo String deve ser passado entre aspas simples. No caso do nosso comando INSERT todos os
valores que devem ser acrescentados na tabela clientes so do tipo String, inclusive a data.
Ento, as aspas simples devem ser abertas antes do valor e fechadas depois dele. Foi o que
aconteceu no nosso comando SQL.
Depois que os dados foram inseridos no precisamos mostrar o formulrio mais
mas sim a mensagem que o cadastro foi efetuado com sucesso. A nica maneira de controlarmos
este processo criarmos uma varivel auxiliar, onde o valor dela ser modificado quando os
dados forem inseridos e para que o formulrio seja mostrado o valor dessa varivel deve ser
testado.
Vamos criar esta varivel antes do IF que testa se o formulrio foi enviado, bem no
incio do arquivo. Acrescente o seguinte cdigo.

Dim Cadastrado
Cadastrado = False
Depois de inserir os dados na tabela a conexo fechada, ento o valor de
Cadastrado deve ser modificado para True. Acrescente o seguinte cdigo depois do comando
FechaConexao encontrado aps o comando INSERT.

Cadastrado = True
Agora temos que testar o contedo desta varivel para mostrarmos o formulrio ou
a mensagem de cadastrado com sucesso. Logo aps o segundo ENF IF que est depois do
cadastrado = true acrescente o seguinte cdigo, s o que est em negrito deve ser acrescentado:

Cadastrado = True
end if
end if
if Cadastrado = False then
%>
No final do arquivo devemos acrescentar o ELSE que receber o cdigo a ser
visualizado pelo cliente quando o cadastro for efetuado com sucesso. Logo depois do comando
</FORM> no final do arquivo acrescente o seguinte cdigo:

</form>
<% else
'significa que Efetuado=true %>
<center> <br><br>
<font face=verdana size=2><b>
<% =Request.Form("nome")%> </b>, seu cadastro foi efetuado com sucesso!
</center></font>
<% end if %>
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:91

ACTIVE SERVER PAGES


CRIANDO A PGINA DE LOGIN
A pgina login serve para que o cliente cadastrado tenha acesso a promoes
especiais e possa efetuar suas compras, fazer downloads e etc..
Esta pgina servir para aplicarmos mais alguns dos conhecimentos adquiridos at
o momento. Trabalharemos com o objeto Session e com acesso ao banco de dados.
Suponhamos que j temos o formulrio que ser preenchido pelo cliente montado.
Quando o cliente clicar no boto OK precisamos procurar o login e a senha digitados dentro do
banco de dados, se encontrarmos o cliente ser direcionado para a pgina com as promoes
especiais, se no encontrarmos o cliente no banco de dados mostraremos uma mensagem
solicitando que ele digite novamente o login e a senha.
Qual ser o arquivo executado quando o cliente clicar no boto OK? Ser o arquivo
de validao que em nossa apostila chamaremos de validalogin.asp. Altere o action do formulrio
do arquivo login para valida login.asp conforme o cdigo a seguir:

<form method="post" action="validalogin.asp">


Salve o arquivo Login e crie um arquivo novo.
O arquivo validalogin acessar o banco de dados e far uma seleo na tabela
clientes com os dados digitados pelo visitante. Se estes dados forem encontrados, o cdigo, o
nome e o email do cliente sero armazenados em variveis de sesso para serem usados em
qualquer ponto do site. Este arquivo contm apenas cdigo ASP.

<!--#include file="conecta.asp"-->
<%
AbreConexao
Dim Sql
'Comando SQL
Dim RS
'Recordset para receber o resultado do select
Sql = "Select * FROM Clientes WHERE login = '" & Request.Form("login")
Sql = Sql & "' AND senha='" & Request.Form("senha") & "' "
set Rs = conexao.execute(Sql)
if not rs.eof then
'encontrou o registro procurado
session("CodCliente") = RS("CodCliente")
Session("NomeCliente")
= RS("nomeCliente")
Session("Email")
= RS("email")
Response.Redirect("defaulton.asp")
else
Response.Redirect("default.asp")
end if
FechaConexao
%>
Ao logar-se o usurio ser direcionado para a pgina defaulton.asp, mas nada
modificou-se na pgina login. O login e a senha continuam sendo solicitados, o certo seria ao

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:92

ACTIVE SERVER PAGES


conectar-se mostrar uma mensagem e darmos uma opo para encerrar a sesso. Ento
precisamos saber se o cliente est logado ou no. Como sabemos isso?

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:93

ACTIVE SERVER PAGES


Atravs da varivel de sesso Codcliente. Se ela estiver vazia porque a busca no
banco no foi bem sucedida, se estiver com algum valor porque o cliente digitou um login e
uma senha vlidos.
Ento abra o arquivo login e faa as seguintes alteraes:

<% if session("CodCliente") <> "" then


'usurio logou no site com e-mail e senha corretos %>
<font face=verdana size=2>
<b><center>
Voc pode agora adquirir os livros que mais deseja! </b>
<br><a href="logout.asp"><img border="0" src="images/encerrar.gif">
</a><br>
</center>
&nbsp;
<% else
if session("CodCliente") = "" then %>
<font face=verdana size=2>
<b><center>
Login Invlido! Tente Novamente! </b>
</center>
<%else%>
<font face=verdana size=2>
<b>
J cadastrado? Digite seu login e senha </b>
<%end if%>
<form method="post" action="validalogin.asp">
<table border=0>
<tr>
<td><font face=verdana size=2>Login </font></td>
<td><input type=text name=login size=15></td></tr>
<tr>
<td><font face=verdana size=2>Senha </font></td>
<td><input type=password name=senha size=15></td></tr>
<tr><td colspan=2 align=center>
<input
border="0"
src="images/ok.gif"
name="I1"
type="image"></td></tr>
</table></form></font>
<%end if%>
O que fizemos neste cdigo? Primeiro testamos se a varivel de sesso codcliente
estava diferente de vazia, se o teste for verdadeiro mostrada um mensagem e um boto para
encerrar a sesso, ou seja, sair da rea restrita aos clientes cadastrados.

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:94

ACTIVE SERVER PAGES


Quando esta varivel no diferente de vazio precisamos testar outras duas
situaes que podem ocorrer com o cliente, se ele digitou o login incorreto ou se a primeira vez
que ele est acessando o site, para que sejam mostradas mensagens corretas. Porque se o login
est incorreto uma mensagem mostrada se a primeira vez que est acessando o site outra
mensagem mostrada. E o formulrio deve ser mostrado nas duas situaes, por isso o IF
apenas nas mensagens.

O ARQUIVO LOGOUT.ASP
Mas se voc clicar no boto Encerrar Seo o Internet Explorer retornar o erro que
no foi possvel encontrar o arquivo. Ento vamos criar o arquivo para encerrar a sesso que em
nosso exemplo se chamar logout.asp.
Este arquivo finalizar a seo e o usurio ser direcionado para a pgina principal
do site. O cdigo a seguir deve ser digitado em um arquivo novo do bloco de notas:

<%

session.Abandon
Response.Redirect("default.asp") %>

Teste digitando o login de um cliente que voc cadastrou e a senha, se tiver dvida
consulte o banco de dados. Depois que voc for direcionado para a pgina defaulton.asp clique no
boto Encerrar seo e note que voc ser solicitado a digitar login e senha na tela inicial do site.

O ARQUIVO DEFAULTON.ASP
Quando logamos com um cliente cadastrado estamos sendo direcionados para a
pgina defaulton.asp, nesta temos um Ol, onde depois dele deveria se mostrado o nome do
cliente. Para isso vamos utilizar a varivel de sesso NomeCliente.

Ol <%= Session("NomeCliente")%>,&nbsp;
Ao digitar o login de um cliente que voc cadastrou e a senha, voc ser
direcionado para a pgina defaulton.asp observe que o nome do cliente est sendo mostrado.

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:95

ACTIVE SERVER PAGES


CRIANDO A PGINA DE RESTRIO
Essa pgina servir para restringir o acesso de usurios no logados partes do
site que s podem ser usadas por clientes cadastrados e que tenha efetuado login correto.
Clique no boto Encerrar seo e tente acessar a pgina de downloads. Mesmo no
estando conectado como um usurio voc acessou esta pgina. Como havamos dito no incio do
curso, essa pgina e a pgina de pesquisa que esto na barra de navegao do site s esto
disponveis para clientes cadastrados e que se logaram no site. Ento precisamos avaliar se o
cliente se logou ou no ao site para que o contedo da pgina seja mostrado.
Vamos criar um arquivo novo que conter o cdigo para prevenir que usurios que
no tenham permisso acessem certas pginas do site. O cdigo o seguinte, digite-o no bloco
de notas:

<%if Session("CodCliente")="" or Session("CodCliente") = False then %>


<!--#include file="topo.asp"-->
<table border=0 width=100% height=65% cellspacing=5 cellpadding=5>
<tr>
<td width=80% align=center><font face=verdana size=2>
<p>Voc no tem permisso para acessar esta pgina. <br>
Identifique-se, usando seu login (e-mail) e senha.</p>
<p>Caso no possua um, clique no link Cadastro.</p>
<p>Cordialmente,</p>
<p>Livraria Leitura Obrigatria</p></td>
<td width=20%><!--#include file="login.asp"--></td></tr>
</table>
</table>
<!--#include file="rodape.asp"-->
<%Response.End
End if%>
Primeiro testamos se a varivel de sesso CodCliente estava vazia ou no existia,
se este teste for verdadeiro montada uma pgina no padro de todas as outras do site
informando que necessrio se logar ao site para ter acesso quelas pginas. Depois de montada
colocamos um comando Response.End que para a execuo do arquivo naquele ponto. Se o
teste for falso o contedo da pgina ser montado normalmente.
Para que esses testes passe a funcionar todos os arquivos restritos devem possuir a
diretiva include com a chamada para o arquivo restrito na primeira linha do arquivo.
Abra o um dos arquivos que o usurio no pode ter acesso se no estiver logado e
acrescente a seguinte linha no incio do arquivo antes qualquer cdigo, exceto do
Response.buffer = true.

<!--#include file="restrito.asp"-->

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:96

ACTIVE SERVER PAGES


CRIANDO A PGINA DE PESQUISA
A pgina de pesquisa d a oportunidade do cliente procurar o produto desejado
para efetuar a compra.
Com a pgina de pesquisa temos resultados dinmicos e rpidos sobre os produtos
cadastrados no banco de dados. O cliente pode digitar uma parte do nome do produto ou apenas
selecionar uma categoria ou fazer uma combinao dos critrios de seleo obtendo um resultado
resumido e rpido com apenas o que o interessa.
Se no tivssemos esta pgina seria necessrio mostrar uma pgina HTML com
todos os produtos cadastrados no banco de dados e o cliente teria que ir procurando qual o
produto desejado. Isso traria um grande trabalho para o cliente o que conseqentemente o
afastaria do site.
Ns j temos o formulrio que ser preenchido pelo cliente montado. o mostrado
na figura abaixo:

Como o nosso cdigo dever funcionar? Temos que avaliar quais as situaes que
podem ocorrer neste formulrio para que possamos escrever o cdigo. A primeira o cliente
digitar uma parte do nome ou o nome todo do produto e no selecionar a categoria. A segunda
o cliente digitar uma parte do nome ou o nome todo do produto e selecionar a categoria. A
terceira o cliente selecionar apenas a categoria e a quarta situao o cliente no digitar nada
e no selecionar a categoria e depois de qualquer uma dessas situaes clicar no boto
pesquisar.
Como sabemos que o cliente clicou no boto pesquisar? Criando um campo do tipo
hidden (oculto) que enviado junto com os outros campos do formulrio.
seguir:

Crie um campo do tipo hidden logo aps o comando <FORM>, conforme a linha a

<input type=hidden name=Pesquisando value=Sim>


Mas as categorias dos produtos vm do banco de dados e so dinmicas. Se uma
nova categoria for includa no banco de dados automaticamente o cliente a visualizar. Primeiro
vamos modificar o contedo da caixa de seleo que mostrar o contedo das categorias
cadastradas no banco de dados.

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:97

ACTIVE SERVER PAGES


BUSCANDO AS CATEGORIAS DO BANCO DE DADOS
Para acessarmos o banco de dados ser necessrio fazer a conexo. Usando a
diretiva include acrescente o arquivo conecta.asp no incio do arquivo pesquisa, logo depois do
restrito.asp.
A tag HTML que cria a caixa de seleo o <SELECT> que ns j temos em nosso
arquivo. Precisamos fazer com que as opes do <SELECT> sejam buscadas do banco de dados,
sendo que a opo que deve ser mostrada como padro o Selecione.
No comando <option> precisamos armazenar um value para a opo que for
selecionada pelo cliente. No nosso caso o value ser o cdigo da categoria. Por que? Porque
como poderemos fazer uma pesquisa mais rpida no banco de dados para encontrar os produtos
daquela categoria.
Mas se o cliente visualizar o cdigo isso no significar nada para ele. Ento vamos
armazenar o cdigo mas mostrar a descrio da categoria.
Acrescente o cdigo abaixo logo depois do comando <option selected value=0>.

<%
AbreConexao
ComandoSQL = "SELECT * FROM Categorias"
Set rsCategorias = conexao.execute(ComandoSQL)
while not RsCategorias.EOF %>
<option value="<%=RsCategorias("codCategoria")%>">
<%=RsCategorias("nomeCategoria")%> </option>
<% rsCategorias.MoveNext
wend
FechaConexao%>
Teste digitando o login de um cliente que voc cadastrou e a senha, se tiver dvida
consulte o banco de dados. Clique no link Pesquisa/Compra e clique na seta da categoria. Note
que as categorias que voc cadastrou no banco de dados esto sendo visualizadas.
Para testar, abra o banco de dados, acrescente uma nova categoria e feche o
banco. Volte ao Internet Explorer e atualize a pgina, abra novamente a seta das categorias e a
nova categoria digitada no banco de dados j est visvel para o cliente.
Pronto! Agora podemos procurar no banco de dados os produtos.

CRIANDO A PESQUISA
Ns j sabemos que o cliente est pesquisando se o campo Pesquisando do
formulrio for Sim. E tambm sabemos quais as situaes que podem ocorrer, vamos relembrar:

Digitar apenas uma parte do nome ou o nome completo do produto e no


selecionar a categoria.

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:98

ACTIVE SERVER PAGES

Digitar apenas uma parte do nome ou o nome completo do produto e


selecionar a categoria.

Selecionar apenas a categoria do produto.

E no selecionar nem digitar nada.

Na programao do comando SQL estas quatro hipteses podem ser escritas com
um IF simples. O cdigo abaixo mostra como ficar a instruo SQL. E quando os dados forem
encontrados montar uma tabela com o resultado da pesquisa.
Nessa tabela ser mostrado o nome, a categoria, o estoque e o preo do produto. O
nome do produto ser um link com a chamada para o arquivo compra.asp enviando uma string
de pesquisa com o cdigo do produto.
O produto tem dois preos: o preo normal e o preo com desconto. Quando o
preo com desconto existir ele deve ser mostrado, se no existir temos que mostrar o preo
normal do produto.
pesquisa.

Acrescente este cdigo antes da frase de instrues de como deve ser feita a

<%
if Request.Form("Pesquisando") = "Sim" then
Dim Sql, RS
AbreConexao
if Request.Form("categoria") = 0 then
Sql = "SELECT * FROM Produtos, Categorias
Sql = Sql & WHERE Produtos.CodCategoria =
Sql = Sql & Categorias.CodCategoria"
Sql = Sql & " AND nomeProduto LIKE '%" & Request.Form("produto")
Sql = Sql & "%' ORDER BY nomeProduto"
set Rs = conexao.execute(sql)
else
Sql = "SELECT * FROM Produtos, Categorias
Sql = Sql & WHERE nomeProduto LIKE '%"
Sql = Sql & Request.Form("produto")&"%' "
Sql = Sql & " AND Produtos.CodCategoria = Categorias.CodCategoria
Sql = Sql & AND Produtos.codCategoria = "
Sql = Sql & Request.Form("categoria")
Sql = Sql & " ORDER BY nomeProduto"
set Rs = conexao.execute(sql)
end if
if not Rs.Eof then
%>
<font face=verdana size=2>

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:99

ACTIVE SERVER PAGES


<b>
O(s)
seguinte(s)
encontrado(s)</b></font><br><br>

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

registro(s)

foi(ram)

Pg.:
100

ACTIVE SERVER PAGES


<table border=1 width=100% cellpadding=3>
<tr>
<th align=center><font face=verdana size=2> Produto </font></th>
<th align=center><font face=verdana size=2> Categoria </font></th>
<th align=center><font face=verdana size=2> Estoque </font></th>
<th
align=center><font
face=verdana
size=2>
Preo
Unitrio
</font></th></tr>
<%
while not Rs.eof
%>
<tr>
<td><font face=verdana size=2>
<a href=compra.asp?codigo=<%=Rs("codProduto")%>>
<%=RS("nomeProduto")%> </a></font></td>
<td><font face=verdana size=2><%=RS("NomeCategoria")%>
</font></td>
<td align=right><font face=verdana size=2><%=RS("estoque")%>
</font></td>
<% if RS("PrecoDesconto") = 0 then%>
<td align=right><font face=verdana size=2> R$
<%=formatNumber(RS("preco"),2)%> </font></td></tr>
<% else %>
<td align=right><font face=verdana size=2> R$
<%=formatNumber(RS("precoDesconto"),2)%>
</font></td></tr>
<%end if
Rs.MoveNext
wend
FechaConexao%>
</table>
<%end if
end if%>
Ao testar notar que o resultado da pesquisa visualizado mas o formulrio
montado novamente depois da pesquisa. Isso no est correto. O formulrio s pode ser
montado se o pesquisando for diferente de Sim.
Ento o ltimo end if do cdigo ASP antes do formulrio deve ser substitudo por
ELSE e no final do cdigo, antes do include do rodap acrescente o cdigo <% end if %> para
finalizar o if que est aberto.
No cdigo atual temos um IF para testar se no estamos no final do arquivo, se
este teste for verdadeiro ele monta a tabela com o resultado. Mas no fizemos um cdigo para
quando este teste for falso. Ento vamos acrescentar um ELSE antes do end if para mostrar uma
mensagem caso nenhum produto seja selecionado.
Encontre o END IF antes do ELSE prximo a montagem do formulrio e acrescente
este cdigo antes dele.
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:
101

ACTIVE SERVER PAGES

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:
102

ACTIVE SERVER PAGES


<%else %>
<b><center><font face=verdana size=4>
Nenhum Produto encontrado!<br></b>
<a href=pesquisa.asp> Retornar </a></center>
Agora que toda a pgina de pesquisa est concluda precisamos trabalhar no
arquivo compra.

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:
103

ACTIVE SERVER PAGES


CRIANDO PGINA DE COMPRA
A pgina de compra permite que o cliente digite a quantidade daquele produto ele
deseja comprar, assim que o cliente clicar no boto comprar aquele produto inserido no
carrinho e uma pgina com os produtos selecionados para a compra, at o momento mostrada.
Como estamos trabalhando com um site dinmico no podemos definir para o
cliente qual o produto e a quantidade que ele vai comprar. Esta informao deve ser passada pelo
cliente. A pgina de compra recebe essas informaes e armazena na tabela carrinho que a
tabela temporria com as compras do cliente.
Essa pgina deve mostrar o nome do produto selecionado, sua categoria e o preo
e uma caixa para digitar a quantidade desejada. Agora precisamos pegar o cdigo passado pela
string de pesquisa do arquivo pesquisa.asp para mostrar o produto correto para o cliente. O
cdigo da pgina ser o seguinte, s o cdigo em negrito deve ser acrescentado pgina (o
cdigo html j est pronto no arquivo que o seu instrutor forneceu):

<td width=20% valign=top><!--#include file="login.asp"--></td>


<td width=80% align=center> <font face=verdana size=2>
<% AbreConexao
Dim Cod
Buscando o cdigo passado pela string de pesquisa e convertendo em
inteiro
Cod = int(Request.QueryString("codigo"))
Sql ="SELECT * FROM Produtos, Categorias
Sql = Sql & WHERE Produtos.CodCategoria = Categorias.CodCategoria
Sql = Sql & AND codProduto = "& cod
Set Rs = conexao.execute(Sql)
%>
<center>
<table border=1 width=60% cellpadding=2>
<tr>
<td><font face=verdana size=2><b> Produto: </b></font> </td>
<td><font face=verdana size=2> <%=Rs("nomeProduto")%> </font> </td>
</tr>
<tr>
<td><font face=verdana size=2><b> Categoria:</font></b> </td>
<td><font face=verdana size=2><%=RS("NomeCategoria")%> </font></td>
</tr>
<tr>
<td><font face=verdana size=2><b> Preo: </font></b> </td>
<td><font face=verdana size=2>
<%if Rs("PrecoDesconto") = 0 or Isnull(RS("PrecoDesconto")) then
Response.Write formatnumber(RS("Preco"),2)
else
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:
104

ACTIVE SERVER PAGES


Response.Write formatnumber(RS("PrecoDesconto"),2)
end if %></font></td></tr>
<tr>
<td><font face=verdana size=2>Quantidade:</font></td>
<td><font face=verdana size=2><input type=text name=Quantidade size=5>
</font></td></tr>
<tr>
<td colspan= 2 align=center>
<p><input
border="0"
src="images/comprar.gif"
name="I1"
type="image"></p></td>
</tr></font>
<%
FechaConexao
%>
</table></center>
Teste o arquivo digitando o login de um cliente que voc cadastrou e a senha.
Clique no link Pesquisa/Compra e digite uma parte do nome de um dos produtos que voc
cadastrou ou selecione uma categoria e mande pesquisar. No resultado da pesquisa clique em um
dos produtos e voc ser direcionado para a pgina compra que mostrar o nome do produto, a
categoria e o preo e a caixa para digitar a quantidade. Esse o resultado esperado do cdigo
anterior. Agora ser necessrio confirmar a digitao da quantidade e gravar a compra no
carrinho.

PREPARANDO O FORMULRIO PARA A GRAVAO DO


PRODUTO COMPRADO
nesta pgina?

Mas o boto comprar por enquanto no est fazendo nada. Mas o que ele efetuar

Quando o cliente clicar no boto comprar, as informaes sobre o cdigo do


produto, o preo e a quantidade devem ser armazenados dentro da tabela carrinho. Depois o
cliente deve ser direcionado para a pgina que mostra os produtos comprados at o momento. A
prpria pgina compra efetuar este processo.
Para que a prpria pgina execute este processo precisamos primeiro criar o
formulrio que efetuar as aes e os campos ocultos que recebero os valores dos campos.
Antes do <TR> que cria o campo da quantidade insira o seguinte cdigo:

<form method=post action=compra.asp >


<input type=hidden name=Comprando value=Sim>
<input type=hidden name=CodProduto value="<%=cod%>">
O campo Comprando identifica se o cliente clicou no boto comprar. O campo
CodProduto armazena o cdigo do produto comprado, que est na varivel que ns criamos no
incio do arquivo para receber a string de pesquisa. Salve o arquivo.
Precisamos armazenar tambm o preo do produto, a quantidade j est sendo
armazenada em um campo do formulrio. Ao mostrarmos o preo podemos criar uma varivel
que armazena o preo e depois jogar essa varivel para o campo oculto. Ento no IF que define
se ser o mostrado o preo ou preo com desconto faa as modificaes que esto em negrito:
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:
105

ACTIVE SERVER PAGES

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:
106

ACTIVE SERVER PAGES


<%
if Rs("PrecoDesconto") = 0 or Isnull(RS("PrecoDesconto")) then
Response.Write formatnumber(RS("Preco"),2)
preco = RS("Preco")
else
Response.Write formatnumber(RS("PrecoDesconto"),2)
preco = RS("PrecoDesconto")
end if %>
Depois vamos criar mais um campo oculto depois do campo CodProduto. Insira a
seguinte linha depois do INPUT do CodProduto.

<input type=hidden name=Preco value="<%= preco %>">


Como vamos direcionar o cliente para um arquivo que mostra todos os produtos
comprados, precisamos trabalhar com a propriedade Buffer (mostra a pgina depois que tudo foi
executado). Insira o cdigo abaixo depois da diretiva include para o arquivo restrito.

<% Response.Buffer = true %>

INSERINDO O PRODUTO NO CARRINHO


Agora podemos criar o cdigo que testar se o cliente clicou no boto comprar e se
esse teste for verdadeiro vamos acrescentar o produto na tabela carrinho e chamar a pgina que
mostra os produtos comprados at o momento.
Insira o cdigo a seguir no incio do arquivo, antes da declarao de varivel com a
instruo DIM e logo depois do abreconexao.

dim sql, rs, Quantidade, codProduto, CodCliente, Preco


'Testa se o cliente clicou no boto comprar
if Request.Form("Comprando") = "Sim" then
'Armazena os valores passados pelo mtod POST em variveis
Quantidade = int(Request.Form("Quantidade"))
CodProduto = int(Request.Form("CodProduto"))
Preco = csng(Request.Form("Preco"))
'Busca o cdigo do cliente que est armazenado em uma
varivel de sesso
CodCliente = int(Session("CodCliente"))
'Seleciona o produto e testa se o estoque est suficiente
para eefetuar a compra
Sql = "SELECT * FROM Produtos WHERE codProduto = " & CodProduto
Set RS = conexao.execute(Sql)
if Quantidade > Rs("Estoque") then
Response.Write "Impossvel realizar a compra, pois o estoque atual
do livro " & Rs("estoque") & "<br>"
else
'Se o estoque suficiente, insere o produto no carrinho
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:
107

ACTIVE SERVER PAGES


Sql = "INSERT INTO Carrinho

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:
108

ACTIVE SERVER PAGES


Sql = Sql & (codProduto,codCliente,quantidade,preco) "
Sql = Sql & "VALUES (" & codProduto & "," & codCliente & ", "
Sql = sql & Quantidade & "," & Preco & ")"
conexao.execute(Sql)
'Direciona o cliente para a pgina que mostra os produtos
comprados at o momento
Response.Redirect ("comprados.asp")
end if
else
'Se o cliente no clicou no boto pesquisar, apenas alista o produto
selecionado na pesquisa
No final do arquivo, antes do comando FECHACONEXAO acrescente o comando END
IF que fecha o IF que testa se o cliente clicou no boto comprar ou no. Para testar, atualize a
pgina compra, digite uma quantidade e clique no boto comprar, ser mostrado um erros que o
arquivo comprados.asp no existe.

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:
109

ACTIVE SERVER PAGES


CRIANDO A PGINA DE PRODUTOS COMPRADOS
A pgina de produtos comprados mostra ao cliente todos os produtos que ele
selecionou at o momento. Tambm d a oportunidade de excluir o produto do carrinho, voltar
para fazer uma nova pesquisa e finalizar a compra.
Esta pgina da ao cliente a oportunidade de ir acompanhando as suas compras e
definindo o que deseja fazer, continuar comprando ou finalizar a compra.
Essa pgina deve mostrar o item, o nome do produto, a categoria, o preo, a
quantidade comprada e o total daquele produto. Na ltima linha da tabela devemos mostrar o
total do pedido. A tabela j est montada no cdigo que voc abriu.
Os dados que sero mostrados nesta tela vm da tabela carrinho. O que identifica
os produtos que o cliente est comprado o campo Codcliente, ento devemos selecionar todos
os registros da tabela carrinho referente ao cdigo do cliente armazenado na varivel de sesso.
Todo o cdigo em negrito abaixo deve ser acrescentado ao cdigo que voc abriu:

<td valign= top width=20%> <!--#include file="login.asp"-->


<td width=80%>
<%
AbreConexao
Dim Sql, RS
Sql = "SELECT nomeProduto, Quantidade, Carrinho.preco,
Sql = Sql & Carrinho.codCarrinho,
Sql = Sql & NomeCategoria FROM Carrinho, Produtos, Categorias
Sql = Sql & WHERE Produtos.CodCategoria = Categorias.CodCategoria"
Sql = Sql & " AND Produtos.codProduto = Carrinho.CodProduto
Sql = sql & AND Carrinho.codCliente = " & Session("codCliente")
set Rs = conexao.Execute(Sql)
%>
<font face=verdana size=2>
<b> Produto(s) escolhido(s) at o momento:</b></font><br><br>
<table border=1 width=100% cellpadding=1>
<tr>
<th align=center><font face=verdana size=2> Item </font></th>
<th align=center><font face="verdana" size="2">Produto</font></th>
<th align=center><font face="verdana" size="2">Categoria</font></th>
<th align=center><font face=verdana size=2> Quantidade </font></th>
<th
align=center><font
face=verdana
size=2>
Preo<br>
Unitrio
</font></th>
<th align=center><font face=verdana size=2> Total </font></th>
</tr>
<%
Dim total,totalGeral
while not Rs.eof %>
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:
110

ACTIVE SERVER PAGES


<tr>
<td align=center><input type=checkbox name="C"

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:
111

ACTIVE SERVER PAGES


value="<%=Rs("codCarrinho")%>"> </td>
<td><font face=verdana size=2><%=RS("nomeProduto")%> </font></td>
<td align=right><font face=verdana size=2><%=RS("nomeCategoria")%>
</font></td>
<td align=right><font face=verdana size=2><%=RS("quantidade")%>
</font></td>
<td align=right><font face=verdana size=2>R$
<% = FormatNumber(Rs("preco"),2)%></font></td>
<% total = Rs("quantidade") * Rs("Preco")%>
<td align=right><font face=verdana size=2>R$
<%= FormatNumber(total,2)%> </font></td></tr>
<%totalGeral = totalGeral + total
Rs.MoveNext
wend
%>
<tr>
<td
colspan=5
align=right><font
face=verdana
size=2>Total
Geral
</font></td>
<td align=right><font face=verdana size=2>R$
<%= FormatNumber(totalGeral,2)%> </font></td></tr>
<tr>
<td align=center>
<p><input border="0" src="images/excluir.gif" name="I1" width="65"
height="21" type="image"> &nbsp;</p> </td>
<td colspan=5 align=center>
<p><a href = pesquisa.asp><img border="0" src="images/continuar.gif"
width="70" height="23"></a>&nbsp;&nbsp;&nbsp;
<a href = finaliza.asp><img border="0" src="images/finalizar.gif"
width="68" height="25" > </a></p> </td></tr>
</table></form>
<%
fechaConexao %></table>
No Select deste arquivo repetimos o procedimento de relacionarmos as tabelas
usando suas chaves primrias e as estrangeiras para que tivssemos integridade nos dados
exibidos.
Teste digite o login de um cliente que voc cadastrou e a senha, faa uma pesquisa
e efetue a compra, repita este processo algumas vezes.

EXCLUINDO ITENS DO CARRINHO


Nessa tela temos o boto Excluir que servir para o cliente quando selecionar um
item exclu-lo da lista.
Na linha de comando <td align=center><input type=checkbox name="C"
value="<%=Rs("codCarrinho")%>"> criamos um checkbox de nome C onde o valor que ele
armazena o cdigo do carrinho. Imagine que o cliente poder excluir mais de um item ao
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:
112

ACTIVE SERVER PAGES


mesmo tempo. Como o ASP reconhecer qual dos itens deve ser apagado, se todos tem o mesmo
nome?

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:
113

ACTIVE SERVER PAGES


Primeiro ser necessrio criar um contador para cada produto que for mostrado na
tela de comprados. Acrescente a seguinte linha de comando logo depois de While not rs.eof:

Num = Num + 1
Nessa linha estamos criando um contador que ser incrementado a cada registro
que for sendo mostrado para o cliente. Com esse contador podemos tambm identificar qual o
checkbox foi marcado pelo cliente, porque, como sabemos, um campo de formulrio do tipo
checkbox s passa a existir se estiver marcado.
Ento no name do input type=checkbox faa a seguinte alterao:

name="C<%=Num%>"
Nesse caso cada checkbox receber o nome C seguido do contedo da varivel
Num. Salve o arquivo.
Tambm precisamos criar um formulrio que indica que aquele campo pode ser
utilizado na programao. Logo depois dos comandos

<b> Produto(s) escolhido(s) at o momento:</b></font><br><br>


<table border=1 width=100% cellpadding=1>
Acrescente as seguintes linhas:

<form method=post action="comprados.asp">


<input type=hidden name=excluindo value=sim>
Essas duas linha indicam que quando o cliente clicar no boto excluir o arquivo
comprados ser executado novamente, e o campo oculto que identifica que o formulrio foi
enviado o que recebe o nome de excluindo. Tambm precisamos fechar esse formulrio. Antes
do comando <%fechaConexao %> no final do arquivo acrescente o comando </form>. Salve
o arquivo.
Mas como o programa conseguir rastrear todos os checkbox que foram criados
dinamicamente? A varivel Num armazena este nmero, mas quando o cliente clicar no boto
Excluir o arquivo comprados ser recarregado e as variveis conseqentemente inicializadas.
Ento, precisamos armazenar este valor em um outro campo oculto do formulrio.
Acrescente a seguinte linha antes do comando </form>:

<input type=hidden name=QtItens value="<%=Num%>">


Como j encontramos a quantidade de itens gerados dinamicamente e j temos os
nomes dos checkbox criados, podemos testar se o boto excluir foi pressionado testando a
existncia do campo oculto Excluindo e se ele existir fazer o procedimento que percorrer os
checkbox e o que existir, ou seja, o que foi marcado ser excludo da tabela carrinho.
arquivo:

Acrescente o seguinte cdigo logo depois do comando Abreconexao no incio do

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:
114

ACTIVE SERVER PAGES


if Request.Form("excluindo") = "sim" then
Dim N,I, Nomec
N = cint(Request.Form("QtItens"))
for I=1 to N
Nomec = "C"&I
if Request.Form(Nomec) <> false then
Sql = "DELETE * FROM Carrinho WHERE codCarrinho ="
Sql = Sql & cint(Request.Form(Nomec))
conexao.execute(Sql)
end if
next
end if
Depois de testarmos o valor do campo excluindo criamos trs variveis a N que
servir para armazenar a quantidade de checkbox gerados, a varivel I que serve como o
incrementador do loop For e a varivel NomeC que remonta o nome do checkbox que a letra C
mais o valor do nmero.
O loop ser feito at o total de itens que armazenamos na varivel N. o nome do
checkbox remontado dentro do loop. Testamos se este nome existe, ou se diferente de false,
porque ele s ser True se o cliente marcar um dos itens. Quando o nome existe fazemos um
DELETE na tabela Carrinho onde o cdigo do carrinho for o mesmo armazenado no value do
campo checkbox.
Depois que o cliente conferiu o carrinho ele desejar finalizar sua compra.

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:
115

ACTIVE SERVER PAGES


CRIANDO A PGINA FINALIZA
Essa a pgina que efetua todo o processo de compra, criando um pedido,
armazenando os itens do pedido, atualizando o estoque, apagando os itens do carrinho e
mostrando os valores das compras do dia.
Essa pgina faz todo o processamento da compra j efetuada pelo cliente,
provendo as informaes necessrias para uma consulta pelo pessoal de vendas da livraria e
qualquer outro tipo de relatrio que seja necessrio ser feito em cima das vendas feitas pela
Internet.
Essa pgina deve mostrar o nmero do pedido, o nome do produto, a categoria, o
preo, a quantidade comprada e o total daquele produto. Na ltima linha da tabela devemos
mostrar o total das compras do dia e a mensagem informando que o usurio receber um e-mail
com a confirmao da compra.
A tabela j est montada no cdigo que voc abriu. O cdigo que deve ser inserido
nessa pgina far as seguintes aes:
1.

Criar o pedido na tabela de pedidos.

2.

Armazenar o cdigo que foi gerado pelo Access.

3.

Selecionar os produtos que esto na tabela carrinho.

4.

Carregar os valores do primeiro registro nas variveis.

5.

Iniciar o loop at que encontre o fim do conjunto de registros.

6.

Inserir na tabela de produtospedidos os itens comprados.

7.

Mover o ponteiro para o incio do conjunto de registros logo depois do fim do


loop.

8.

Carregar os valores do primeiro registro nas variveis.

9.

Iniciar o loop at que encontre o fim do conjunto de registros.

10. Atualizar o estoque dos produtos comprados.


11. Totalizar a venda.
12. Limpar o carrinho.
Insira o seguinte cdigo logo depois do comando AbreConexao no incio do arquivo
(fornecido pelo instrutor):

<%
AbreConexao
dim Sql, Rs, CodProduto, CodCliente, Quantidade, Preco, dia, mes, ano,
hora, minuto, segundos
'Busca o cdigo do cliente
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:
116

ACTIVE SERVER PAGES


CodCliente = Session("codCliente")
'Montando a data para ser armazenada
Dia = day(Now)
Mes = month(Now)
Ano = year(Now)
Hora = Hour(now)
Minuto = Minute(Now)
Segundos = Second(Now)
Data = dia & "/" & mes & "/" & ano & " " & Hora & ":" & Minuto & ":" &
Segundos
'Atualizando a tabela de Pedidos
Sql = "INSERT INTO Pedidos (codCliente,dataPedido) "
Sql = Sql & "VALUES (" & CodCliente & ",'" & data & "')"
conexao.execute(sql)
'Seleciona o nmero do ltimo pedido gerado para inserir os itens
do pedido
Sql = "SELECT MAX(CodPedido) as ultPedido FROM Pedidos"
set Pedido = conexao.execute(sql)
'Seleo no Carrinho para inserir os produtos na tabela de Produtos
Pedidos
Sql = "SELECT * FROM Carrinho WHERE codCliente = "& codCliente
Set Rs = conexao.Execute(Sql)
'Carrega as variveis para o primeiro INSERT do loop
CodProduto = Rs("CodProduto")
Quantidade = RS("Quantidade")
Preco = RS("Preco")
While not rs.Eof
'Atualizando a tabela ProdutosPedidos
Sql = "INSERT INTO ProdutosPedidos
Sql = Sql & (codPedido,codProduto,quantidade,Preco) "
Sql = Sql & "VALUES (" & Pedido("ultPedido") & "," & codProduto & ","
Sql = Sql & quantidade & "," & Preco & ")"
conexao.execute(sql)
rs.movenext
if not rs.EOF then ' Testa se ainda no est no final do RecordSet
'Carrega as variveis para o prximo INSERT
CodProduto = Rs("CodProduto")
Quantidade = RS("Quantidade")
Preco = RS("Preco")
end if
wend
'Move o ponteiro para o primeiro registro
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:
117

ACTIVE SERVER PAGES


rs.MoveFirst
'Carrega as variveis para o primeiro UPDATE
CodProduto = Rs("CodProduto")
Quantidade = RS("Quantidade")
Preco = RS("Preco")
While not Rs.eof
'Atualizando o estoque de Produtos
response.write "Atualizando estoque"
Sql = "UPDATE Produtos SET estoque = estoque -" & quantidade
Sql = Sql & " WHERE codProduto = " & codProduto
conexao.execute(Sql)
rs.movenext
if not rs.EOF then ' Testa se ainda no est no final do RecordSet
'Carrega as variveis para o prximo INSERT
CodProduto = Rs("CodProduto")
Quantidade = RS("Quantidade")
Preco = RS("Preco")
end if
wend
'Totalizando a Venda
Sql = "SELECT SUM(quantidade*preco) AS total FROM Carrinho
Sql = Sql & WHERE codCliente = " & Session("codCliente")
Set Rs = conexao.execute(Sql)
'Limpando o Carrinho
sql = "DELETE FROM Carrinho WHERE codCliente =" & Session("codCliente")
conexao.execute(Sql)
%>
Agora precisamos selecionar os dados do Pedido e do ProdutosPedidos, Categorias
e Clientes para montar a tabela e a mensagem de confirmao. Ento entre a primeira linha da
tabela e a segunda acrescente o seguinte cdigo:

<%
Dim
ComandoSQL
ComandoSQL
ComandoSQL
ComandoSQL
ComandoSQL
ComandoSQL
ComandoSQL
ComandoSQL

total,totalGeral,Num
= "SELECT P.nomeProduto, C.nomecategoria, PP.quantidade ,
= ComandoSQL & PP.Preco, PE.CodPedido
= ComandoSQL & " FROM Produtos P, Pedidos Pe,Categorias C,
= ComandoSQL & " ProdutosPedidos PP, Clientes CL
= ComandoSQL & WHERE Pe.CodCliente = " & codCliente
= ComandoSQL & " AND Pe.codPedido = PP.CodPedido "
= ComandoSQL & " AND PP.CodProduto = P.CodProduto
= ComandoSQL & AND P.CodCategoria = C.CodCategoria "

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:
118

ACTIVE SERVER PAGES


ComandoSQL = ComandoSQL & " AND Pe.CodCliente = CL.Codcliente "
ComandoSQL = ComandoSQL & " AND day(dataPedido) = '" & day(now) &"'"
ComandoSQL = ComandoSQL & " AND Month(dataPedido) = '"& month(now) &"'"
ComandoSQL = ComandoSQL & " AND year(dataPedido) = '" & year(now) & "'"
set RsPedidos = conexao.execute(ComandoSQL)
while not RsPedidos.eof
%>
Agora na segunda linha da tabela precisam ser mostrados os campos selecionados.
O que estiver em negrito altere em seu arquivo:

<tr>
<td><font face=verdana size=2><%=RSPedidos("CodPedido")%> </font></td>
<td><font face=verdana size=2><%=RSPedidos("nomeProduto")%>
</font></td>
<td align=right><font face=verdana size=2>
<%=RSPedidos("nomeCategoria")%> </font></td>
<td align=right><font face=verdana size=2><%=RSPedidos("quantidade")%>
</font></td>
<td align=right><font face=verdana size=2>R$
<% = FormatNumber(RsPedidos("preco"),2)%></font></td>
<% total = RsPedidos("quantidade") * RsPedidos("Preco")%>
<td align=right><font face=verdana size=2>R$
<%= FormatNumber(total,2)%> </font></td></tr>
<%totalGeral = totalGeral + total
if not rsPedidos.eof then
RsPedidos.MoveNext
end if
wend
%>
<tr>
<td colspan=5 align=right><font face=verdana size=2>Total Geral
</font></td>
<td align=right><font face=verdana size=2>R$
<%= FormatNumber(totalGeral,2)%> </font></td>
</table>
<%
fechaConexao %>
Salve o arquivo. Mas no corpo da mensagem precisamos mostrar tambm algumas
informaes que foram selecionadas sobre o cliente. No final do arquivo temos o texto que ser
mostrado para o cliente. O que estiver de negrito altere em seu arquivo.

Verifique as informaes que iro no e-mail: <br><br>


Nome: <%=session("nomeCliente")%><br>
E-mail: <%=session("email")%><br>
Total Compra: R$ <%=formatNumber(TotalGeral,2)%><br>
Obrigado pelas compras e aproveite seus livros.<br></p>
<i>Livraria ClaraLuz</i>
Rua dos Otoni, 881 - 9 Andar
Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:
119

ACTIVE SERVER PAGES

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:
120

ACTIVE SERVER PAGES


Salve o arquivo. Para testar acesse o site e efetue uma compra.

ENVIANDO O E-MAIL DE CONFIRMAO


Para enviarmos o e-mail de confirmao usaremos o componente Persists do ASP.
Este componente j est embutido nos servidores web. Como poderemos enviar e-mail em
qualquer ponto do nosso aplicativo vamos criar a funo que envia e-mail dentro do arquivo
conecta. Assim, quando voc precisar de enviar e-mail basta incluir esse arquivo com a diretiva
include no cdigo que voc estiver criando.
Abra o arquivo conecta.asp, digite o cdigo abaixo logo depois do end function.

Function EnviaEmail(nome, email, total)


set mail = server.CreateObject("Persits.MailSender")
Dim corpo1, corpo2, corpo3, corpo4
corpo1 = "Prezado(a)"
corpo2 = ", <br><br>Sua compra foi efetuada. Para receber seus livros
em casa, pague a quantia de:"
corpo3 = ". Deposite este valor no banco XYZ. agncia 0337, conta
corrente 112244-1.
corpo4 = <br><br>Cordialmente, <br><br>Livraria ClaraLuz"
mail.host = "mail.provedor.com.br" 'Servidor de envio de e-mail
mail.from = "leitura@livrariaclaraluz.com.br" 'Endereo de e-mail do
remetente
mail.fromName = "Leitura ClaraLuz" 'Nome do Remetente
mail.IsHTML = true 'Tipo de e-mail html ou texto
mail.addAddress email, nome 'mtodo para receber o email e o nome do
destinatrio
mail.subject = "Compra Efetuada" 'Assunto do e-mail
mail.body = corpo1 & nome & corpo2 & total & corpo3 & corpo4
mail.send 'Metdo para enviar
enviaemail = true
end function
Essa funo recebe trs parmetros o nome do cliente, o e-mail dele e o valor da
compra, esses parmetros sero passados pela chamada que for feita dentro do programa que
utilizar essa funo.
Depois que recebemos os valores criamos um instncia do componente Persists
com o objeto MailSender, que um do componentes que envia os e-mails no ASP. Ento, criamos
quatro variveis que receberam o corpo do e-mail e alguns dos parmetros que foram passados
para a funo.
Assim usamos algumas propriedades e mtodos do objeto que so:
Host define qual o servidor de mensagens ser usado para enviar o e-mail.

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:
121

ACTIVE SERVER PAGES


mail.

From define quem est enviando o e-mail, ser o DE quando o cliente receber o eFromName define o nome que ser mostrado no campo DE da mensagem.
IsHTML define o formato da mensagem para o padro HTML.

AddAddress o mtodo do objeto que recebe o endereo de e-mail do


destinatrio e o seu nome.
Subject define o assunto da mensagem.
Body define o corpo de texto da mensagem.
Send o mtodo que envia a mensagem.
E como estamos trabalhando com uma funo ela deve retornar um valor, neste
caso programamos que ela retorne verdadeiro.
Agora precisamos fazer a chamada da funo dentro do arquivo finaliza. Se o
arquivo no estiver aberto, abra-o e logo depois dos comandos que limpam o carrinho e antes de
fechar a tag ASP, acrescente o seguinte cdigo:

' Enviando o e-mail de confirmao


EnviaEmail Session("nomeCliente"), Session("email"), Rs("total")
%>
configurado.

O e-mail no ser enviado, porque precisamos de um servidor de e-mail

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:
122

ACTIVE SERVER PAGES


CONCLUSO
Esperamos que o contedo desta apostila tenha servido de suporte para as suas
aulas. Lembre-se que nada substitui uma boa aula de seu professor.
A informtica sofre mudanas bruscas muito rapidamente, procure no futuro
uma biblioteca auxiliar e fique atento ao lanamento de novos aplicativos e verses.
A Zargon Computao estar sempre ao seu dispor para solucionar dvidas
quando necessrio.

Atenciosamente,

Diretoria de Treinamento
Zargon Tecnologia em Informtica

Rua dos Otoni, 881 - 9 Andar


Belo Horizonte - MG - 30150-270
www.zargon.com.br
(31) 3273-2822

Pg.:
123