Selects dependentes com ASP e banco de dados

Este é um sistema de “selects dependentes” (ou seja, que interagem um com outro), tomando de uma só vez os dados desde uma banco de dados Access.

Só será necessário 1 módulo ASP (selecs_dependentes.asp) e o banco de dados correspondente (ssdd.mdb).

Neste exemplo, se trabalhará com dois selects:

– Um de países
– Outro de províncias ou estados

Banco de dados ssdd.mdb
O banco de dados deverá conter duas tabelas relacionadas entre si.

TABELA CAMPOS
paises idPais (autonumérico) [chave principal]
pais (texto)
provincias pais (numero)
idProvincia (autonumérico) [chave principal]
provincia (texto)

Com uma relação entre tabelas como esta:

selects_dependentes.asp

A página ASP é bastante simples de entender. Trata-se de um script para construir os dois campos select a partir dos valores do banco de dados.

A primeira vez que carregar a página se mostrará unicamente o primeiro campo select com os valores que extrai da tabela de países. Incluímos ao campo select o evento Javascript onchange para que, no momento que mude a opção selecionada, se carregue a página passando por parâmetro o identificador do país selecionado.

A segunda vez que carregar a página -porque foi mudado o valor do primeiro select- receberá pela URL o identificador do país selecionado. Então mostra o segundo select com as opções relacionadas com o país que recebe por parâmetro, ou seja, se foi selecionado o país Argentina, se carregará unicamente as províncias desse país.

O código do exemplo ficaria desta maneira:

<form name=formulario>
PAÍS: <select name=idPais onChange=”location.href(‘selects_dependentes.asp?idPais=’ + formulario.idPais.options[formulario.idPais.selectedIndex].value)”>
<%
Set Conn = Server.CreateObject(“ADODB.Connection”)
Conn.Open(“DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=” & Server.MapPath(“ssdd.mdb”))

SQL_pais=”select * from paises order by pais asc”
set RS_pais=createobject(“ADODB.Recordset”)
RS_pais.open SQL_pais,conn
do while not RS_pais.eof
pais = RS_pais(“pais”)
idPais = RS_pais(“idPais”)
p = request.querystring(“pais”)
if p <> “” then

if p = pais then
response.write “<option value=”&idPais&”&pais=”&pais&” selected>”&pais&”</option>”
elseif p <> pais then
response.write “<option value=”&idPais&”&pais=”&pais&”>”&pais&”</option>”
end if
else
response.write “<option value=”&idPais&”&pais=”&pais&”>”&pais&”</option>”
end if

RS_pais.movenext
loop
RS_pais.close
%>
</select>
<% if request.querystring(“idPais”) <> “” then %>
PROVINCIA: <select name=localizacao>
<%
SQL_prov=”select * from provincias where pais=”&request.querystring(“idPais”)&” order by provincia asc”
set RS_prov=createobject(“ADODB.Recordset”)
RS_prov.open SQL_prov,conn
do while not RS_prov.eof

pais = request.querystring(“pais”)
provincia = RS_prov(“provincia”)
%>
<option value=”<%=provincia%><%=pais%>“><%=provincia%></option>
<%
RS_prov.movenext
loop
RS_prov.close
%>
</select><% end if %></form>

Deixe um comentário