Jump to content
Fórum Script Brasil
  • 0

Select


ViniciusJau

Question

Se a pessoa seleciona em um campo menu de lista ( select ) o Estado .. os campos do outro menu Cidade se alteram.....

alguém tem diéia de como eu posso fazer isso ??

por exemplo:

<body>

<p>

  <select name="Estado">

    <option value="sao_paulo">SP</option>

    <option value="rio_de_janeiro">RJ</option>

    <option value="mato_grosso">MT</option>

  </select>

</p>

<p>

  <select name="Cidade">

  </select>

</p>

dai no campo cidade ele busca os valores no banco de dados... alguém tem algum exemplo ou sabe indicar algum tudo legal que fale sobre isso ???

Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 0

Da pra fazer em ASP, da uma olhada nesse artigo que achei nos meus favoritos que fala sobre relacionamento de combos:

Uso de 2 combos ligadas entre si

Escrevo este artigo, pois sei que todos aqueles que estão a começar precisam de algo parecido com aquilo que aqui escrevo. A idéia é ter 2 Combo boxes, em que a segunda é carregada com dados consoante a escolha feita na primeira Combo. Normalmente a solução mais rápida seria o uso de Javascript, mas se tivermos muitos dados isso torna-se muito pesado, porque o uso desde Scripting obriga o carregamento prévio de tudo o que estiver em base de dados, enquanto com a solução em ASP (esta que vou explicar) os dados só são puxados por pedido, e assim a performance final, para grandes soluções fica a beneficiar. O que falha claro, é o fato de ter de ser feito um refresh á página por cada vez que é feita uma nova escolha na primeira combo, mas que julgo ser suportável, pelo menos para mim é.

A base de dados

A base de dados que uso, é novamente em MS-Access, que serve como exemplo e julgo ser de mais fácil acesso, para quem programa nesta linguagem.

Uso 2 tabelas, muito simples com os seguintes esquemas:

Tabela Combo1:

id_combo1 | AutoNumber

nome_combo1 | Text

Tabela Combo2:

id_combo2 | AutoNumber

id_combo1 | Number

nome_combo2 | Text

A segunda tabela como é 'filha' da primeira, cada linha de informação tem de ter a referência do 'pai' da tabela Combo1. e assim quando escolhemos a informação da Combo1, podemos ir á segunda buscar a informação referente com o id da primeira.

Este único ficheiro para o efeito, tem então duas combo boxes, em que a segunda é 'enchida' com dados depois de escolhermos um dos campos da primeira. Claro que o programador pode usar a opção 'onchange' e fazer este passo automaticamente. Eu fiz assim porque julgo de mais fácil compreensão, e depois o programador pode fazer as alterações que julgue necessárias.

Arquivo Combo.ASP:

<%

Sub Combo1()' função que trabalha com a combo inicial

'vamos fazer a declaração de SQL para encher a Combo

SQLStmt = "SELECT id_combo1, nome_combo1 FROM combo1"

'Executamos a declaração na Base de Dados

rs.Open SQLStmt, conn, 2, 1

'vamos construir o HMTL da primeira combo

Response.Write"<font face='Verdana,Arial' size='2'>"

Response.Write"<b>combo inicial </b></font>"

Response.Write"<SELECT name='combo1'>"

'vamos percorrer o RecordSet referente ás cidades

while not rs.EOF

'construímos cada cidade na combo

Response.Write"<OPTION "

'se a escolha anterior for igual à do momento, deixamo-la escolhida

if CInt(Request.Form("combo1"))= rs(0) then

Response.Write"selected "

end if

Response.Write"value='"&rs(0)&"'>"&rs(1)&"</OPTION>"

rs.MoveNext

wend

Response.Write"</SELECT><br><br><br>"

Response.Write"<INPUT type='Submit' value='OK'><br><br><br>"

rs.close

End Sub

Sub Combo2()' aqui construímos a combo referente às freguesias

id_combo1 = Request.Form("combo1")

'se não houver escolha na combo das cidades, é como termos 0

if id_combo1 = "" then

id_combo1 = 0

end if

'vamos fazer a procura de freguesias referentes ao

'id da cidade escolhida

SQLStmt = "SELECT id_combo2, nome_combo2 FROM combo2 "

SQLStmt = SQLStmt & "WHERE id_combo1=" & id_combo1

'executamos o recordset

rs.Open SQLStmt, conn, 2, 1

'construímos a combo das freguesias

Response.Write"<font face='Verdana,Arial' size='2'>"

Response.Write<b>combo secundária </b></font>"

Response.Write"<SELECT name='combo2'>"

while not rs.EOF

Response.Write"<OPTION "

'aqui também se controla se houve escolha antes,

'para não perdermos a sua visualização

if CInt(Request.Form("combo2"))= rs(0) then

Response.Write"selected "

end if

Response.Write"value='"&rs(0)&"'>"&rs(1)&"</OPTION>"

rs.MoveNext

wend

Response.Write"</SELECT>"

rs.close ' fechar o recordset

End Sub

' criação de uma conexão DSNLess

conn = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="

conn = conn & Server.Mappath("combos.mdb") & ";"

' inicialização do bjecto do recordset

Set rs = Server.CreateObject("ADODB.Recordset")

' criação do formulário que vai suportar ambas as combos

Response.Write"<FORM name='form1' action='combos.asp'"

Response.Write" method='POST'>"

' vamos chamar a combo 1

Call Combo1()

' e vamos também chamar a combo 2

Call Combo2()

' finalizamos o formulário com a Tag para o efeito

Response.Write"</FORM>"

%>

Boa programação!

Autor: João Vieira - (developer@joaovieira.com)

Mais acho que o ideal seria fazer em Javascript da uma olhada na sessão de JS que você certamente vai achar alguma coisa

Link to comment
Share on other sites

  • 0

....mas se tivermos muitos dados isso torna-se muito pesado

em javascript eu consigo fazer.. mais o problema é esse.. muitos registros... hehe

eu queria pois na verdade é uma consulta utilizando banco de dados e menus

acho que esse arqtigo ai vai me ajudar !!!!!! wink.gif

Link to comment
Share on other sites

  • 0

legal... java com asp ficou legal também.. hehe o ruim é que eu já fiz meu banco no acess heheh..

tipo eu tentei usar esse codigo, executando local ele deu esse erro:

Provider error '80004005' 
Erro não especificado 
/combo/combo.asp, line 47 

a linha 47 é a que executa o recordset

rs.Open SQLStmt, conn, 2, 1

mais aconteceu um negocio estranho, pois eu mandei pro servidor , ele ele ficou asim: http://www.apaejau.org.br/combo.asp

hehe estou dando uma mexida nesse aqui em js !!

Link to comment
Share on other sites

  • 0

esse erro não especificado aí, acontece na linha que executa o sql, né?

posta o sql aí..

Link to comment
Share on other sites

  • 0

esse erro não especificado aí, acontece na linha que executa o sql, né?

posta o sql aí..

ixi viajei huh.gif ... seria essa parte aqui ??

<%
Sub Combo1()' função que trabalha com a combo inicial
'vamos fazer a declaração de SQL para encher a Combo
SQLStmt = "SELECT id_combo1, nome_combo1 FROM combo1"
'Executamos a declaração na Base de Dados
rs.Open SQLStmt, conn, 2, 1

mais porque que testando local ele deu um erro diferente de qunado eu rodo ele no servidor ??

Link to comment
Share on other sites

  • 0

Isso pode ser problemas na conexao ao banco.

no caminho do banco

permissoes

componentes

Depende muito..

Só que, quando dá erro não especificado, não tem como saber o que é..

Esse erro, sempre que eu tive, era problema na conexao..

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      651.8k
×
×
  • Create New...