Exemplo dele no Brinkster (apresenta instabilidade pelo host em alguns momentos)
http://www32.brinkst...dteam/combo.asp
Essa Sub que automatiza o processo, requer duas instruções SQL e a conexão com o banco de dados como parâmetro. Deve se usar da seguinte forma:
strSQL1 = "SELECT CODIGO, CAMPO FROM Tabela1" strSQL2 = "SELECT CODIGO RELACIONADO, CODIGO, CAMPO FROM Tabela2" GuardaValoresJS strSQL1, strSQL2, CONEXAO
Deve se seguir essa ordem, e apenas essa quantidade de campos na query SQL, para poder se relacionar entre as tabelas.
Para os usuarios SQL Server, o seguinte script foi testado:
CREATE TABLE dbo.tbEstados ( CodEstado int NOT NULL , Estado nvarchar (50) NULL ) ON [PRIMARY] CREATE TABLE dbo.tbCidades ( CodEstado int NOT NULL , CodCidade int NOT NULL , Cidade nvarchar (50) NULL ) ON [PRIMARY] INSERT INTO tbEstados VALUES (1, 'São Paulo') INSERT INTO tbEstados VALUES (2, 'Minas Gerais') INSERT INTO tbEstados VALUES (3, 'Paraná') INSERT INTO tbCidades VALUES (1, 1, 'São Paulo') INSERT INTO tbCidades VALUES (1, 2, 'São Bernardo do Campo') INSERT INTO tbCidades VALUES (1, 3, 'Santo André') INSERT INTO tbCidades VALUES (1, 4, 'São Caetano do Sul') INSERT INTO tbCidades VALUES (1, 5, 'Diadema') INSERT INTO tbCidades VALUES (1, 6, 'Santos') INSERT INTO tbCidades VALUES (2, 7, 'Varginha') INSERT INTO tbCidades VALUES (2, 8, 'Poços de Caldas') INSERT INTO tbCidades VALUES (2, 9, 'Belo Horizonte') INSERT INTO tbCidades VALUES (3, 10, 'Curitiba') INSERT INTO tbCidades VALUES (3, 11, 'Londrina') INSERT INTO tbCidades VALUES (3, 12, 'Almirante Tamandaré')
É importante que vc utilize a função JavaScript na pagina pois ela fará os eventos dinamicos (load e change). A rotina vai gerar um arquivo que conterá todas os registros ordenados de forma ao JavaScript entenda, pois bem, o nome do arquivo pode ser alterado nessa linha (pode se incluir paths virtuais):
Linha 2: Const strFile = "combos.js"
JAMAIS tenha o arquivo existente com codigos, pois a sub irá limpar e preencher com o conteúdo do Banco de Dados.
A pasta precisa ter permissão para gravar o arquivo (por exemplo no caso do Brinkster puis na pasta DB):
Linha 2: Const strFile = "/MinhaConta/db/combos.js"
Para ajustar os textos padrão dos combos, temos:
Linha 59: sTitle1 = "Selecione um Estado..." Linha 60: sTitle2 = "Selecione uma Cidade..."
<% Const strFile = "combos.js" Sub GuardaValoresJS (sqlCboPai, sqlCboFilho, objConnection) 'mail/msn: fmosca@ajato.com.br Set objFSO = Server.CreateObject("Scripting.FileSystemObject") Set objRs = Server.CreateObject("ADODB.Recordset") strPath = Server.MapPath(strFile) If Not objFSO.FileExists(strPath) Then Set objStream = objFSO.CreateTextFile(strPath, True) Else Set objStream = objFSO.OpenTextFile(strPath, 2) End If objRs.Open sqlCboPai, objConnection If Not objRs.Eof Then arrPai = objRs.GetRows() End If objRs.Close objRs.Open sqlCboFilho, objConnection If Not objRs.Eof Then arrFilho = objRs.GetRows() End If objRs.Close With objStream .WriteLine "arrPai = new Array(" & UBound(arrPai, 2) & ");" .WriteLine "arrFilho = new Array(" & UBound(arrFilho, 2) & ");" & vbCrLf For i = 0 To UBound(arrPai, 2) .WriteLine "arrPai[" & i & "] = new Array('" & arrPai(0, i) & "', '" & Replace(arrPai(1, i),"'", "\'") & "');" Next .WriteLine "" For i = 0 To UBound(arrFilho, 2) .WriteLine "arrFilho[" & i & "] = new Array('" & arrFilho(0, i) & "', '" & arrFilho(1, i) & "', '" & Replace(arrFilho(2, i), "'", "\'") & "');" Next End With objStream.Close Set objStream = Nothing Set objFSO = Nothing Set objRs = Nothing End Sub 'strConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db.mdb") strConnString = "Provider=SQLOLEDB; Server=(local); Initial Catalog=Northwind; User Id=sa; Password=" Set objConn = Server.CreateObject("ADODB.Connection") objConn.Open strConnString strSQL1 = "SELECT CodEstado, Estado FROM tbEstados ORDER BY Estado" strSQL2 = "SELECT CodEstado, CodCidade, Cidade FROM tbCidades ORDER BY Cidade" GuardaValoresJS strSql1, strSql2, objConn sTitle1 = "Selecione um Estado..." sTitle2 = "Selecione uma Cidade..." objConn.Close Set objConn = Nothing %> <html> <head> <script language="JavaScript" src="<%=strFile%>"></script> <script language="JavaScript"> function PopulaFilho() { document.frmDados.cboCidade.options.length = 0; document.frmDados.cboCidade.options.add(new Option('<%=sTitle2%>')); for (i=0; i<arrFilho.length; i++) { if (arrFilho[i][0] == document.frmDados.cboEstado.value) document.frmDados.cboCidade.options.add(new Option(arrFilho[i][2], arrFilho[i][1])); } } function PopulaPai() { document.frmDados.cboEstado.options.length = 0; document.frmDados.cboEstado.options.add(new Option('<%=sTitle1%>')); document.frmDados.cboCidade.options.add(new Option('<%=sTitle2%>')); for (i=0; i<arrPai.length; i++) document.frmDados.cboEstado.options.add(new Option(arrPai[i][1], arrPai[i][0])); } </script> <style> .cboStyle { font-family: verdana; font-size: 11px; width: 250px; background-color: #f0f0f0; } </style> </head> <body onLoad="PopulaPai()" style="font-family:verdana; font-size:12px; font-weight:bold"> <form name="frmDados"> Estados:<br><select name="cboEstado" onChange="PopulaFilho();" class="cboStyle"></select><br><br> Cidades:<br><select name="cboCidade" class="cboStyle"></select> </form> </body> </html>
Agradeço a grande ajuda de pchardnet e Without a Nick.

E façam o que quiserem com o codigo, só não tira o credito, de resto.. a vontade.

-----------------------------------------------------------------------------------------------
Para uma maior organização desta seção, todas as duvidas relacionadas a este tutorial devem ser tiradas na seguinte sala:
http://forum.wmonlin...p?showforum=113