ViniciusJau Posted January 15, 2005 Report Share Posted January 15, 2005 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 ??? Quote Link to comment Share on other sites More sharing options...
0 cyberalexxx Posted January 15, 2005 Report Share Posted January 15, 2005 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 dadosA 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 | AutoNumbernome_combo1 | TextTabela Combo2:id_combo2 | AutoNumberid_combo1 | Numbernome_combo2 | TextA 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 ComboSQLStmt = "SELECT id_combo1, nome_combo1 FROM combo1"'Executamos a declaração na Base de Dadosrs.Open SQLStmt, conn, 2, 1'vamos construir o HMTL da primeira comboResponse.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 cidadeswhile not rs.EOF'construímos cada cidade na comboResponse.Write"<OPTION "'se a escolha anterior for igual à do momento, deixamo-la escolhidaif CInt(Request.Form("combo1"))= rs(0) thenResponse.Write"selected "end ifResponse.Write"value='"&rs(0)&"'>"&rs(1)&"</OPTION>"rs.MoveNextwendResponse.Write"</SELECT><br><br><br>"Response.Write"<INPUT type='Submit' value='OK'><br><br><br>"rs.closeEnd SubSub Combo2()' aqui construímos a combo referente às freguesiasid_combo1 = Request.Form("combo1")'se não houver escolha na combo das cidades, é como termos 0if id_combo1 = "" thenid_combo1 = 0end if'vamos fazer a procura de freguesias referentes ao'id da cidade escolhidaSQLStmt = "SELECT id_combo2, nome_combo2 FROM combo2 "SQLStmt = SQLStmt & "WHERE id_combo1=" & id_combo1'executamos o recordsetrs.Open SQLStmt, conn, 2, 1'construímos a combo das freguesiasResponse.Write"<font face='Verdana,Arial' size='2'>"Response.Write<b>combo secundária </b></font>"Response.Write"<SELECT name='combo2'>"while not rs.EOFResponse.Write"<OPTION "'aqui também se controla se houve escolha antes,'para não perdermos a sua visualizaçãoif CInt(Request.Form("combo2"))= rs(0) thenResponse.Write"selected "end ifResponse.Write"value='"&rs(0)&"'>"&rs(1)&"</OPTION>"rs.MoveNextwendResponse.Write"</SELECT>"rs.close ' fechar o recordsetEnd Sub' criação de uma conexão DSNLessconn = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="conn = conn & Server.Mappath("combos.mdb") & ";"' inicialização do bjecto do recordsetSet rs = Server.CreateObject("ADODB.Recordset")' criação do formulário que vai suportar ambas as combosResponse.Write"<FORM name='form1' action='combos.asp'"Response.Write" method='POST'>"' vamos chamar a combo 1Call Combo1()' e vamos também chamar a combo 2Call Combo2()' finalizamos o formulário com a Tag para o efeitoResponse.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 Quote Link to comment Share on other sites More sharing options...
0 ViniciusJau Posted January 15, 2005 Author Report Share Posted January 15, 2005 ....mas se tivermos muitos dados isso torna-se muito pesadoem javascript eu consigo fazer.. mais o problema é esse.. muitos registros... heheeu queria pois na verdade é uma consulta utilizando banco de dados e menus acho que esse arqtigo ai vai me ajudar !!!!!! Quote Link to comment Share on other sites More sharing options...
0 felipefrancesco Posted January 15, 2005 Report Share Posted January 15, 2005 Olha...postei uma solução no fórum de JavaScript, olha ai:http://scriptbrasil.com.br/forum/index.php...topic=38960&hl= Quote Link to comment Share on other sites More sharing options...
0 ViniciusJau Posted January 17, 2005 Author Report Share Posted January 17, 2005 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 recordsetrs.Open SQLStmt, conn, 2, 1mais aconteceu um negocio estranho, pois eu mandei pro servidor , ele ele ficou asim: http://www.apaejau.org.br/combo.asphehe estou dando uma mexida nesse aqui em js !! Quote Link to comment Share on other sites More sharing options...
0 dark0 Posted January 17, 2005 Report Share Posted January 17, 2005 esse erro não especificado aí, acontece na linha que executa o sql, né?posta o sql aí.. Quote Link to comment Share on other sites More sharing options...
0 ViniciusJau Posted January 17, 2005 Author Report Share Posted January 17, 2005 esse erro não especificado aí, acontece na linha que executa o sql, né?posta o sql aí.. ixi viajei ... 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, 1mais porque que testando local ele deu um erro diferente de qunado eu rodo ele no servidor ?? Quote Link to comment Share on other sites More sharing options...
0 dark0 Posted January 17, 2005 Report Share Posted January 17, 2005 Isso pode ser problemas na conexao ao banco.no caminho do bancopermissoescomponentesDepende 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.. Quote Link to comment Share on other sites More sharing options...
0 ViniciusJau Posted January 17, 2005 Author Report Share Posted January 17, 2005 humm legal... hehevou rever minahs conexões aqui entaum !!! Quote Link to comment Share on other sites More sharing options...
Question
ViniciusJau
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:
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
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.