*** Resolvido ** Campos "dinâmicos" com condições SQL

Preciso no forumulário, criar campos “dinâmicos” de acordo com condições. Exemplo:

Um campo tipo radio, apresenta as opções de um banco de dados de cidades. Ao selecionar uma cidade, os outros campos do tipo radio, que estavam ocultos aparecem de acordo com a cidade escolhida, tendo ela que ser igual a cidade da outra tabela.

Melhor exemplificado: Se selecionar uma cidade, apresenta as faculdades e cursos daquela cidade, para escolher somente uma daquelas para fazer sua inscrição.

Eu já criei os blocos para esconder os campos. No evento onLoad coloquei:

sc_set_global(CIDADE_ESCOLHIDA);
sc_block_display(‘cidade_do_curso’, ‘off’);

E criei um evento Ajax chamado COD_CIDADE_CURSO_onClick, que escrevi o código a seguir:

if ({COD_CIDADE_CURSO} == [CIDADE_ESCOLHIDA]) {
sc_block_display(‘cidade_do_curso’, ‘on’);
} else {
sc_block_display(‘cidade_do_curso’, ‘off’);
}

Mas como fazer esta condição exemplificada no começo da questão?

Boa Tarde,

Todas as informações (cidade, faculdade e curso) estão em tabelas no banco de dados?
Se sim, você poderia trabalhar com o “Processamento Ajax” entre os campos, onde ele irá fazer a recarga automática de cada um dos campos relacionados de acordo com a seleção, sem precisar necessariamente trabalhar com blocos.

Seria a mesma idéia deste exemplo

http://www.scriptcase.com.br/sistemas/v5/exemplos_pt_br/grid31/grid31.php

http://www.scriptcase.com.br/site/samples/tutoriais/search/grid31.php

Espero ter ajudado.

Rodrigo Lins.

Este exemplo é no GRID, e no formulário?

Bom, vou colocar um passo a passo do que fiz para formulário:

  1. Criei um novo bloco chamado “Cidade_do_Curso”.
  2. Movi os campos que quero para este bloco. Os campos são a grande maioria RadioBox.
  3. No evento onLoad inseri:

sc_set_global(CIDADE_ESCOLHIDA);
sc_block_display(‘cidade_do_curso’, ‘off’);

Para sempre que entrar no formulário esconder o bloco e a variável Global é uma variável do campo COD_CIDADE_CURSO que, onde modifica os campos, pedi para “Gravar Variável” e coloquei este nome.

  1. Criei um evento AJAX chamado de COD_CIDADE_CURSO_onClick. Com o código a seguir:

sc_set_global(CIDADE_ESCOLHIDA);
[CIDADE_ESCOLHIDA] = {COD_CIDADE_CURSO};

/* Macro sc_lookup */

sc_lookup(RESULTADO, "
SELECT
cc.COD_CURSO, cc.DESCRICAO, cc.COD_TURNO, cc.COD_FACULDADE, cc.COD_CIDADE, cc.COD_PROCESSO_SELETIVO, cc.EXIBIRNOSITE, cc.SEGUNDA_OPCAO, cid.COD_CIDADE, cid.CIDADE, cid.COD_PROCESSO_SELETIVO, f.COD_FACULDADE, f.DESCRICAO, f.COD_PROCESSO_SELETIVO, t.COD_TURNO, t.DESCRICAO, t.COD_PROCESSO_SELETIVO
FROM
cargo_curso AS cc INNER JOIN cidade AS cid ON cid.COD_CIDADE = cc.COD_CIDADE INNER JOIN faculdade AS f ON cc.COD_FACULDADE = f.COD_FACULDADE INNER JOIN turnos AS t ON cc.COD_TURNO = t.COD_TURNO
WHERE cc.EXIBIRNOSITE = ‘1’
");

/* Erro no lookup /
if (FALSE === {RESULTADO}) {
sc_error_message(“Ocorreu um erro no acesso ao banco de dados.
”);
}
elseif (empty({RESULTADO})) { /
EOF */
sc_error_message(“Nenhum valor foi retornado pelo banco.
”);
}
else {

/* Inclua aqui sua rotina de processamento */

}

if ({COD_CIDADE_CURSO} == RESULTADO) {
sc_block_display(‘cidade_do_curso’, ‘on’);
} else {
sc_block_display(‘cidade_do_curso’, ‘off’);
}

  1. E devolta ao campo COD_CIDADE_CURSO, em “Processamento Ajax”, habilitei os campos a serem mostrados de acordo com as opções.

Mas não faz o que quero, o que posso estar fazendo de errado?

*** RESOLVIDO ***

Não sei porque complico tanto. O negócio é mais fácil que imaginei.

Não precisa de evento Ajax, basta no comando select do campo que deve mudar colocar o SQL

SELECT COD_CURSO, DESCRICAO
FROM cargo_curso
WHERE COD_CURSO = ‘{COD_CIDADE_CURSO}’
ORDER BY DESCRICAO

E Habilitar o ajax no campo que vai mudar… simples.

Bom Dia,

Só para complementar, o exemplo que coloquei (o link) de fato é dentro de uma aplicação de consulta, porém, foi feito o procedimento no Filtro e o funcionamento será o mesmo para as aplicações de formulário, filtro e controle.

É normal, as vezes pensamos em soluções mais complicadas do que seria necessário (acontece comigo as vezes)…

Rodrigo Lins.