I – Configurando o banco de dados
Neste tutorial, vamos criar uma página de consultas
avançadas por vários critérios com o tema “futebol”, onde poderemos fazer
buscas pelo jogador ou time ou posição que coincidam com parte de uma palavra.
1. O primeiro passo é criar 3 tabelas: tbjogador (id_jogad,
nome_jogad, clube, posicao), tbclubes (id_clube, nome_clube), tbpos (id_pos,
pos). Neste tuto, para facilitar, usaremos apenas as posições: goleiro (id 1),
lateral (id 2), meio de campo (id 3) e atacante (4). Os campos com “id” seguido
por sublinhado (“id_*”) serão chaves primárias; na tabela tbjogador, as colunas
“clube” e “posicao” deverão ser do tipo número; as demais são do tipo texto.
Insira alguns registros.
2. O próximo passo é criar os relacionamentos (no Access
2007, Ferramentas de bancos de dados – Relações). Adicione as 3 tabelas,
arraste o id do clube p/ a coluna “id_clube” da tabela “jogador” e, a seguir,
arraste id_pos da tbpos para a coluna posicao da tabela jogador; confirme em
“Criar”.
3. Vamos fazer agora duas consultas no Access mesmo p/
confirmar se os relacionamentos estão ok. Abra 1 nova consulta (Criar – Design
da consulta) e adicione as 3 tabelas, alterne para o modo SQL (botão direito
sobre a aba “Consulta 1”)
e veja que já está pronto um “esqueleto” de uma consulta juntando as três
tabelas. Nesta 1ª consulta, vamos relacionar os jogadores do time 1 que sejam
goleiros (posição “1”);
para isso, a consulta que estará assim:
SELECT
FROM tbpos INNER JOIN (tbclubes INNER JOIN tbjogador ON
tbclubes.id_clube = tbjogador.clube) ON tbpos.id_pos = tbjogador.posicao;
Deixe assim:
SELECT *
FROM tbpos INNER JOIN (tbclubes INNER JOIN tbjogador ON
tbclubes.id_clube = tbjogador.clube) ON tbpos.id_pos = tbjogador.posicao where
id_pos=1;
4. Execute e retorne para o modo SQL. Salve a consulta, se
quiser, ou teste outras posições. A seguir, vamos relacionar os jogadores de um
time determinado; também é muito simples; troque a consulta acima pela seguinte:
SELECT *
FROM tbpos INNER JOIN (tbclubes INNER JOIN tbjogador ON
tbclubes.id_clube = tbjogador.clube) ON tbpos.id_pos = tbjogador.posicao where
id_clube=3;
Novamente, se desejar, alterne o id do clube à vontade.
II - Consultas com “like”
5. Agora, como dito antes, nossa página não fará essas
consultas por termos exatos; e sim faremos a busca por parte de palavras. Caso
queira testar esse tipo de consulta no Access, crie uma nova consulta, adicione
as tabelas como explicado acima e teste essa instrução:
SELECT tbjogador.nome_jogad, *
FROM tbclubes INNER JOIN (tbpos INNER JOIN tbjogador ON
tbpos.id_pos = tbjogador.posicao) ON tbclubes.id_clube = tbjogador.clube
WHERE
(((tbjogador.nome_jogad) Like "*XXX*"));
6. Substitua os três “X” acima por parte de uma palavra
(pode ser uma letra, duas, três..) caso exista algum nome de jogador com a(s)
letra(s) indicada(s), a consulta retornará corretamente. Caso deseje, substitua
o critério pelo nome de um clube ou pela posição. Outro exemplo: caso queira
consultar quais jogadores são “goleiro”, construa a consulta assim:
SELECT tbpos.pos, *
FROM tbclubes INNER JOIN (tbpos INNER JOIN tbjogador ON
tbpos.id_pos = tbjogador.posicao) ON tbclubes.id_clube = tbjogador.clube
WHERE
(((tbpos.pos) Like "*g*"));
III - A página ASP
7. Crie uma nova pg ASP; na 1ª linha, insira esse comando:
<%@LANGUAGE="VBSCRIPT"
CODEPAGE="1252"%>
8. A
seguir, um formulário simples em HTML:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1" />
<title>BuscaFutebol teste</title>
</head>
<body>
<p>Pesquise por parte do nome do jogador, do clube ou posição:</p>
<form name="form1"
method="post" action="">
<label>Nome:
<input type="text"
name="cxpalavra">
</label>
<select name="combocriterio">
<option
value="nome_jogad">Jogador</option>
<option
value="nome_clube">Clube</option>
<option
value="pos">Posição</option>
</select>
<br />
<br />
<label>
<input type="submit" name="Submit"
value="pesquisar">
</label>
</form>
9. Agora os comandos em ASP para capturar as palavras do
formulário:
1.
<%
2. dim palavra, criterio
3.
palavra=request.form("cxpalavra")
4.
criterio=request.form("combocriterio")
5. response.write
palavra&" - "
6. response.write
criterio&"<br />"
7. %>
10. Feche o código HTML:
</body>
</html>
11. Teste essa página no navegador. Caso tudo esteja ok você
verá que os termos digitados na caixa de busca e no menu “select” serão
exibidos. Caso prefira, pode comentar ou apagar as linhas 5 e 6, acima (as que
começam com “response.write”).
12. Agora vamos estabelecer uma conexão ao banco de dados,
definir a nossa pesquisa e um conjunto de registros que correspondam à ela.
Para isso acrescente, na linha que começa com a palavra “dim”, acima, duas
variáveis; a 1ª vamos utilizar para a conexão e a 2ª para o conjunto de
registros; neste tuto, essas variáveis se chamarão “conex” e “rs”, sem aspas; a
linha ficará assim:
dim palavra, criterio, conex, rs, consulta
13. A
seguir, após as linhas 3 e 4, acima, insira o seguinte código:
set
conex=Server.CreateObject("ADODB.Connection")
conex.Open
"driver={Microsoft Access Driver
(*.mdb)};dbq=C:\inetpub\wwwroot\testeASP\XXX.mdb"
Set rs =
Server.CreateObject("ADODB.Recordset")
if(palavra
<> "") then
consulta="SELECT
tbjogador.nome_jogad, tbclubes.nome_clube, tbpos.pos FROM tbpos INNER JOIN
(tbclubes INNER JOIN tbjogador ON tbclubes.id_clube = tbjogador.clube) ON
tbpos.id_pos = tbjogador.posicao where "&criterio&" like
'%"& palavra &"%' order by nome_jogad"
rs.Open
consulta, conex
Do while
not rs.EOF
response.write rs.Fields("nome_jogad")&"
- "
response.write
rs.Fields("nome_clube")&" - "
response.write
rs.Fields("pos")&"<br />"
rs.MoveNext
loop
14. Substitua os "XXX" acima pelo nome do seu
arquivo e verifique o caminho; a seguir, acrescente as seguintes linhas para
fechar a conexão:
rs.Close()
Set rs = Nothing
15. E as linhas a seguir para fechar o “IF” acima:
else
response.write " "
end if
16. Teste no navegador; sua busca avançada já estará
funcionando corretamente.