[ RESOLVIDO ] Carregamento Dinâmico de Select

Boa Noite Pessoal,

Tenho um formulario onde preciso colocar dois selects: o primeiro define o tipo do cadastro, A,B,C ou D, previamente cadastrados em outro formulário. Esse select esta ok. O detalhe é que, dependendo da opção A,B,C ou D, preciso popular o segundo select com um campo vindo de outras 4 tabelas diferentes.

Ex.:

Select 1 = A ------> Select 2 = nomes da Tabela A ()
Select 1 = B ------> Select 2 = nomes da Tabela B (
)
Select 1 = C ------> Select 2 = nomes da Tabela C ()
Select 1 = D ------> Select 2 = nomes da Tabela D (
)

Imagino que o código no evento onChange do select 1 para selecionar os dados das tabelas seria algo como:
(me corrijam se eu estiver errado)

[code]if ({select1} == ‘A’)
{
$check_sql = “SELECT nome FROM tabelaA WHERE tipo = ‘A’”;
}

if ({select1} == ‘B’)
{
$check_sql = “SELECT nome FROM tabelaB WHERE tipo = ‘B’”;
}

if ({select1} == ‘C’)
{
$check_sql = “SELECT nome FROM tabelaC WHERE tipo = ‘C’”;
}

if ({select1} == ‘D’)
{
$check_sql = “SELECT nome FROM tabelaD WHERE tipo = ‘D’”;
}
[/code]
O detalhe é, após os comandos $check_sql, preciso passar os resultados para o select2, ou seja, popular o mesmo.
É isso que estou precisando de ajuda.
Agradeço desde já.

Vamos lá primeiro você vai no seu campo select, no campo você procura “Processamento Ajax” você marca a opção “usar Ajax para carregar outros campos do tipo select, …” depois você escolhe o campo que será recarregado.

Após o primeiro procedimento você vai até o seu segundo select, e no lookup você adiciona uma clausula Where EXEMPLO_ID = {select1}

Entendeu?

Bom Dia Robert,

Sim entendi e já tentei fazer assim mas não deu certo, pois no primeiro select o que é selecionado é a tabela de origem e não um parametro a ser usado na mesma tabela do select 2. Esse select dois será preenchido com dados vindos de 4 tabelas diferentes, dependendo da selecionada no select 1.

Agradeço pela tentativa.

if ({select1} == 'A') 
{
 $check_sql = "SELECT nome FROM tabelaA WHERE tipo = 'A'";
}

Nesse código você não poderia fazer assim:

if ({select1} == 'A') 
{
 $check_sql = "SELECT nome FROM tabelaA WHERE tipo = 'A'";
sc_lookup(rs, $check_sql);
{select1} = {rs[0][0]};
sc_set_focus('select2');
}

Ai você cria um evento Ajax para o SELECT2, o evento onFocus, ai nesse evento você faz os tratamentos que deseja.

Espero ter ajudado.

Bom Dia, obrigado pela ajuda, mas nessa parte do código {select1} = {rs[0][0]}; eu estaria jogando o resultado da consulta dentro do select1? Não seria no select2 ?

O resultado seria uma cadeira de resultados com vários nomes. Fora do SC eu sei como fazer o while para preencher o SELECT com os VALUES específicos e as LABELS, mas aqui dentro fiquei em dúvida. NO select 2 acredito que teria que fazer isso: um while com base na quantidade de retorno do sql do select1, mas como obter quantos rs o select1 retornou? Sei que depois disso me referencio ao rs como uma matriz, linha x coluna, porém, quantas linhas e quantas colunas ele retornou?

Obrigado novamente.

Bom, consegui recuperar os dados da tabela escolhida da seguinte forma, no evento onCHANGE do SELECT1, chamado de tipoProprietario:

[code]if ({tipoProprietario} == ‘p’)
{
$check_sql = “SELECT nome FROM permissionarios”;
sc_select(dados, $check_sql);

if ({dados} === false)
{
$javascript_title = ‘Erro na pesquisa’;
$javascript_message = ‘Pesquisa de proprietário retornou FALSE’;
sc_ajax_message($javascript_message, $javascript_title);
}
else
{
while (!$dados->EOF){
$linha=$dados;
$javascript_title = ‘Resultado’;
$javascript_message = ‘’.$resultado;
sc_ajax_message($javascript_message, $javascript_title);
$dados->MoveNext();
}
$dados->Close();
}

sc_set_focus(‘nomeProprietario’);
}[/code]

Fiz aparecer os registros em uma message para teste. Agora não sei como me referenciar aos OPTIONS e VALUES do select2 chamado de nomeProprietario para então atribuir os valores retornados em $linha.

Agradeço demais a ajuda.

Juliano eu não tenho como testar mas testa uma coisa pra mim:

if ({select1} == 'A') 
{
 $check_sql = "SELECT nome FROM tabelaA WHERE tipo = 'A'";
sc_set_global($check_sql);
}

Ai você vai no select2 no lookup automático você coloca [check_sql].

Então você faz o processamento ajax, no onChange do select1 você recarrega o select2. Ai o Select 2 vai ter o sql que você quiser.

Confere ai se funciona.

Boa Tarde Robert,

não deu certo. Ele abre, ao executar a aplicação,uma página em branco apenas com uma label escrita check_sql: , um input e um botão com o nome do form.php.

Ao clicar nesse botão ele vai para o formulário mas não executa nada referente as consultas.

Você sabe como acessar as propriedades dos campos select via programação? Ex.: o VALUE do campo, o LABEL, pois assim, eu faria um looping de preenchimento passando esses valores, que já foram capturados corretamente pelo exemplo que passei na resposta anterior.
Eu não sei como referenciar o selec2 através da programação, nos padrões do SC. Procurei na ajuda e na base de conhecimentos, mas nada.

Obrigado.

Pessoal,

consegui resolver colocando o seguinte código no lookup do select2:

SELECT nome FROM {tipoProprietario} ORDER BY nome

onde tipoProprietario é o campo select1 que possui como VALUES das opções, os nomes das tabelas do banco de dados.

Assim, o select2 será sempre preenchido com os nomes que eu preciso, conforme a tabela selecionada no select1.

Obrigado a todos pelas orientações.

Boa.

Não funciona na versão 9

1 Curtida