Parte 1
Parte 2 Parte 3
Parte
4 
Nosso
Objetivo : Construir uma pequena aplicação ASP com acesso a uma base de
dados Access
Vamos
agora tentar implementar os nossos caso de uso, começando por
ListarEmpresas
Precisamos
de um ListaAreas aonde ao clicar no nome de uma determinada área recuperemos a
lista de empresas.
ListaAreas.asp
Observem com carinho, muito
carinho mesmo os COMENTÀRIOS ao logo do código, eles tornam o programa
auto-explicativo.
Comentários são as linhas que
se iniciam ou que contenham a aspas simples ‘ . Da aspa simples em diante
até o final da linha não é um comando é comentário e o interpretador ignora.
<HTML>
<HEAD>
<TITLE>graficas</TITLE>
<META
HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
</HEAD>
<BODY BGCOLOR=#FFFFFF>
<%
'aqui
começa ASP
/VB
'cria objeto ASP de conexão
Set objConn =
server.createobject("ADODB.Connection")
'cria
string de conexão específica para um determinado banco de dados
strConn = "DBQ=" &
server.mappath("graficasonline.mdb") & ";Driver={Microsoft
Access Driver (*.mdb)}"
'conecta ao banco de dados
objConn.open strConn,3,3
'cria o recordset para executar uma consulta e retornar com os
dados obtidos
Set rs=
Server.CreateObject("ADODB.Recordset")
'
texto do comando sql a ser executado
sql = "SELECT AreaID, Area
FROM Areas ORDER BY Area"
' executa a consulta
rs.Open empresas,
strConn, 3, 3
'enquanto houver registros
do while not rs.eof
'
imprime no navegador
response.write rs("area") &
"<br>"
' procura o próximo
rs.movenext
loop
'importante
.. fechar conexao e destruir objetos
set rs= nothing
objConn.close
set objConn = nothing
%>
</BODY>
</HTML>
Quando
executamos o script no BabyWebServer, voilá a nossa lista de áreas.

O
nosso problema, ou melhor nosso código começa a ficar mais sujo a medida que precisamos
usar comandos da linguagem HTML para criar os links, impor o formato de uma
tabela ou inserir figuras por exemplo.
Vou
fazer isso em vários etapas correndo o risco de ser cansativo, mas acho melhor.
Vou
começar colocando uma imagem no topo da página que será o nosso cabeçalho, em
HTML imagens são incluídas com o TAG IMG
Vejam
a pequena modificação apenas no início do arquivo

E
o efeito no site

Legal
não ? e saiu barato.
Agora
vou incluir um recurso dos mais utilizados em sites ASP, usar tabelas para ter
mais controle sobre o visual das páginas.
Em
tempo já cito que um controle de qualidade profissional sobre o estilo e
a aparências de páginas web é obtido com o uso de CSS, cascading styles sheets,
pesquisem o assunto é de muito valia.
Mas
vamos aqui percorrendo essa caminho mais tortuoso mas ainda muito usado, sem
contar que desenvolvedores web irão ainda esbarrar por muitos e muitos anos com
sistemas legados em ASP e na hora de migrar ou acoplar com sistemas existentes
um bom contato com as técnicas das “antigas” vai ser de grande utilidade.
Tabelas
em HTML são criadas com o TAG <table> </table>
Cada
linda da tabela é um ROW <tr> </tr>
E
as colunas são células criadas com o TAC <td> </td>
Assim
uma tabela com 3 linhas e 3 colunas seria criada como
<table>
<tr>
<td> </td> <td> </td> <td> </td>
</tr>
<tr>
<td> </td> <td> </td> <td> </td>
</tr>
<tr>
<td> </td> <td> </td> <td> </td>
</tr>
</table>
Ao
tentar usar esses tags em nosso site asp temos 2 grandes opções, interromper as
partes asp usando <% e %> e colocando o HTML fora dessas regiões ou
usando o comando response.write para escrever todos os tags na página. A
segunda opção da uma melhor sensação de estarmo num único ambiente mas dá muito
mais trabalho, a primeira produz um código mais confuso mas facilita a edição
das tags em programas como o DreamWeaver e é a preferida em ambientes
aonde é necessária a integração entre webdesigners e webdevelopers e é nessa
direção que eu vou.
<HTML>
<HEAD>
<TITLE>graficas</TITLE>
<META
HTTP-EQUIV="Content-Type" CONTENT="text/html;
charset=iso-8859-1">
</HEAD>
<BODY BGCOLOR=#FFFFFF>
<table border=1 align="center">
<tr><td>
<img
src="images/graficaonline_01.gif">
</td>
</tr>
<%
'aqui começa ASP
'cria objeto ASP de conexão
Set objConn =
server.createobject("ADODB.Connection")
'cria string de conexão
específica para um determinado banco de dados
strConn = "DBQ=" & server.mappath("graficasonline.mdb")
& ";Driver={Microsoft Access Driver (*.mdb)}"
'conecta
ao banco de dados
objConn.open strConn,3,3
'cria o recordset para executar uma consulta e retornar com os dados obtidos
Set rs=
Server.CreateObject("ADODB.Recordset")
' texto
do comando sql a ser executado
sql = "SELECT AreaID, Area FROM Area ORDER
BY Area"
'
executa a consulta
rs.Open sql, strConn, 3, 3
'enquanto houver registros
do while not rs.eof
%>
<tr>
<td>
<!-- exibindo um valor do ambiente VBScripp/Asp dentro do HTML -->
<%= rs("area") %>
</td>
</tr>
<%
' procura o próximo
rs.movenext
loop
%>
</table>
<%
'importante
.. fechar conexao e destruir objetos
set rs= nothing
objConn.close
set objConn = nothing
%>
</BODY>
</HTML>
Que
ao executar produz

Detalhes
a observar :
- O uso do abre e fecha
script <% %> tudo que está
entre esses símbolos está no escopo do VBScript/ASP, o que esta fora
é HTML/JavaScript/CSS etc, mas não é ASP.
- O uso do símbolo
<%= %> , vejam têm um sinal de = , para exibir valor que
vem do ambiente ASP dentro de uma área HTML.
- Na linha <!-- exibindo um
valor do ambiente VBScripp/Asp dentro do HTML --> ,o uso do abre e
fecha COMENTÀRIO de HTML que é diferente do comentário VBScript
<!-- -- >
Agora
para finalizar vamos incluir o link sobre o nome da área de modo que ao clicar
sobre ele sejamos levados a listar as empresas daquela área.
E
já adianto que vai ser uma misturada de comandos -)
Para
fazer um link precisamos usar o TAG <A> </A>
Que
tem o seguinte formato
<A
HREF=” ENDERECO DO LINK ” > NOME QUE APARECE PARA SER CLICADO </A>
O
que será exibido na página é : NOME QUE APARECE PARA SER CLICADO mas o link para onde iremos
estará definido em ” ENDERECO DO LINK ”
No
nosso caso o que queremos é que seja mostrado o nome da ÁREA mas que ao clicar
sejamos levados a página LISTAEMPRESAS.asp
O
nosso comando deve então ficar algo como
<A
HREF=”ListaEmpresas.asp” >Agência de Publicidade</A>
Entrentanto
o nosso sitema é dinâmico e nome das áreas são trazidas do banco pelo recordeser
de no rs, no comando rs(“Area”)
Melhorando
um pouco mais
<A HREF=”ListaEmpresas.asp” > <%=
rs(“Area”) %> </A>
Mas
isso ainda não é o suficiente pois a página ListaEmpresas.asp terá que listar apenas
as empresas que sejam da mesma área que rs(“Area”), mas aonde está
armazenado o ID da área ? em rs(“AreaID“) que foi carregado
junto da área via o SQL :
sql = "SELECT AreaID, Area FROM Areas ORDER BY Area"
Então
precisamos arrumar um mode de passer para a rotina ListaEmpresas.asp o AreaID
da Área que for clicada. Faremos isso através de um recurso do HTML, a
querystring. A querystring é um parâmetro que podemos acrescentar ao
nosso endereço, a nossa URL. Veja o exemplo
www.meusite.com.br/listaEmpresa.asp?area=15
tudo
o que vem depois da interrogação faz parte da querystring, estamos passando a
variavel area cujo valor é 15, depois verermos iremos recuperar esse valor
Então
o nosso comando completo deverá ser
<A
HREF='ListaEmpresas.asp?area=<%= rs("areaID") %>' >
<%= rs("Area") %> </A>
Feio? Não, feio sou eu, é
horroroso -), mas é assim mesmo, não adianta reclamar.
IMPORTANTE
>>>> Observem que tivemos usar ASPAS
SIMPLES no HREF para não misturar com as ASPAS DUPLAS do rs (“”) .
Criei
uma listaAreas2.asp
<HTML>
<HEAD>
<TITLE>graficas</TITLE>
<META
HTTP-EQUIV="Content-Type" CONTENT="text/html;
charset=iso-8859-1">
</HEAD>
<BODY BGCOLOR=#FFFFFF>
<table border=1 align="center">
<tr><td>
<img src="images/graficaonline_01.gif">
</td>
</tr>
<%
'aqui começa ASP
'cria objeto ASP de conexão
Set objConn =
server.createobject("ADODB.Connection")
'cria string de conexão
específica para um determinado banco de dados
strConn = "DBQ=" &
server.mappath("graficasonline.mdb") & ";Driver={Microsoft
Access Driver (*.mdb)}"
'conecta
ao banco de dados
objConn.open strConn,3,3
'cria o recordset para executar uma consulta e retornar com os dados obtidos
Set rs= Server.CreateObject("ADODB.Recordset")
' texto
do comando sql a ser executado
sql = "SELECT AreaID, Area FROM Area ORDER
BY Area"
'
executa a consulta
rs.Open sql, strConn, 3, 3
'enquanto houver registros
do while not rs.eof
%>
<tr>
<td>
<!-- exibindo um valor do ambiente VBScripp/Asp dentro do HTML -->
<A HREF='ListaEmpresas.asp?area=<%=
rs("areaID") %>' > <%= rs("Area") %> </A>
</td>
</tr>
<%
' procura o próximo
rs.movenext
loop
%>
</table>
<%
'importante
.. fechar conexao e destruir objetos
set rs= nothing
objConn.close
set objConn = nothing
%>
</BODY>
</HTML>
O
efeito é

Observem
o que é exibido quando o mouse passa sobre o link.
Se
clicarem, ocorrerá um erro, já que não fizemos o ListaEmpresas.asp ainda.
Com
o todo o nosso know-how adquirido nos execícios anteriores ListaEmpresas.asp
vai ser bem fácil de fazer é praticamente a mesma coisa com exceção de :
1. Temos que saber como recuperar o valor da
área passado pelo link no ListaArea.asp
2. E temos que nos virar para usar esse valor
no meio do SELECT que irá recuperar as empresas que são dessa área.
Para
capturar o valor passado usaremos um objeto do ASP chamado REQUEST,
especificamente o método Querystring desse objeto e formato é
Request.QueryString(“area”)
De
forma prudente e para gerar menos chamadas ao objeto vamos logo desde o início
armarzanar esse valor passado numa variavel que escolhi chamar areaid
assim :
Areaid = Request.QueryString(“area”)
Se
e ListaEmpresa foi chamado no formato
www.meusite.com.br/listaEmpresa.asp?area=15
então
é certo que em AreaID estará o valor 15,
como
então recuperamos todas as empresas da área = 15 ?
basta
construir um SQL com uma clásula WHERE que inclua esse valor passado pela
querystring
Aqui
está a primeira versão de ListaEmpresa.asp, estou retirand o cabeçalho inicial
para tentar enquadrar o central é um única página.
<table border=1 align="center">
<tr><td>
<img
src="images/graficaonline_01.gif">
</td>
</tr>
<%
' recupera o valor da areaID
Areaid =
Cint(Request.QueryString("area"))
'cria objeto ASP de conexão
Set objConn = server.createobject("ADODB.Connection")
'cria string de conexão
específica para um determinado banco de dados
strConn = "DBQ=" &
server.mappath("graficasonline.mdb") & ";Driver={Microsoft
Access Driver (*.mdb)}"
'conecta
ao banco de dados
objConn.open strConn,3,3
'cria o recordset para executar uma consulta e retornar com os dados obtidos
Set rs=
Server.CreateObject("ADODB.Recordset")
' texto
do comando sql a ser executado
sql = "SELECT EmpresaID, Empresa,Estado FROM Empresa WHERE AreaID = "
&_
AreaId & " ORDER BY Empresa"
' executa a consulta
rs.Open sql, strConn, 3, 3
'testa
se foi ao final do arquivo sem encontrar nada e para
if ( rs.eof ) then
%>
<tr>
<td>
Não existem empresas cadastradas nesse área! <p>
<a href="ListaAreas2.asp">retornar</a>
</td>
</tr>
</table>
<%
response.end
end if
'enquanto
houver registros
do while not rs.eof
%>
<tr>
<td>
<!-- exibindo um valor do ambiente VBScripp/Asp dentro do HTML -->
<%= rs("EmpresaID") %> <%= rs("empresa")
%> <%= rs("estado") %> </A>
</td>
</tr>
<%
' procura o próximo
rs.movenext
loop
%>
</table>
<%
'importante
.. fechar conexao e destruir objetos
set rs= nothing
objConn.close
set objConn = nothing
%>
O
mais importante aqui é
sql = "SELECT EmpresaID, Empresa,Estado FROM Empresa
WHERE AreaID = " & _
AreaId & " ORDER BY Empresa"
E
nessa linha duas coisas a destacar, primeiro o símbolo “_” no final da
linha, ele está lá para indicar que o comando que começa numa linha vai
continuar na próxima.
Segundo
o fato de que sql é uma string e uma string que é “concatenada” ou seja
ela é união de 3 partes que se juntam para forma uma única string, a primeira
parte é
"SELECT EmpresaID, Empresa,Estado FROM Empresa WHERE AreaID = "
Que é somada ao valor vindo de AreaID
Que por fim se soma a string " ORDER BY Empresa"
O símbolo
que garante essa concatenação é o “&”.
Então
supondo que na hora que você clica na página ListaArea em um link cujo AreaId =
15
Esse string
sql se tornará
SELECT
EmpresaID, Empresa,Estado FROM Empresa WHERE AreaID
= 15 ORDER BY Empresa;

Nosso
Objetivo : Construir uma pequena aplicação ASP com acesso a uma base de
dados Access
Parte 1
Parte 2 Parte 3
Parte
4