[RESOLVIDO] Carregar comando sql do campo select dinamicamente

alguém teria uma forma de carregar o sql do campo select dinamicamente apartir de outro campo, ou seja refazer o sql do campo.

exemplo.

original: select id, descricao from table

alterar para select id, descricao from table where condicao and condicao

Vc pode usar o evento Ajax “EVENTS onChange” que ao carregar o valor de um campo ele recarrega um outro campo do tipo select

Acredito que só via jquery, o campo é do tipo select?

Dário isso já foi feito e não funcionou.

Haroldo, sim é do tipo select.
Teria como disponibilizar um exemplo?

[code]$_htmlcode=‘Selecione um Cidade’;
$_sql=“SELECT distinct(cd) from localidades where e=’{estado}’ order by cd”;
sc_select(rs,$_sql);
if ({rs}!==False){
$_selected=({cidade}==$rs->fields[0])?“Selected”:"";
while (!$rs->EOF){
$_htmlcode.=’<option value="’.$rs->fields[0].’" ‘.$_selected.’>’.$rs->fields[0].’’;
$rs->MoveNext();
}
$rs->Close();
}

sc_ajax_javascript(“ElementoHtml”,Array(“id_sc_field_cidade”,$_htmlcode));[/code]

Função javascript:

function ElementoHtml(id, htmlcode)

 $('#'+id).html(htmlcode);

TAGS:HAROLDO SELECT DINAMICO

Desculpe a ignor…, mas onde coloco os codigos?

na onchange do “outro campo”.
e no metodojavascript.

[b]Haroldo, acho que não entendi direito ou fiz algo de errado.

Bom no evento onchange(Eventos Ajax) do meu campo coloquei:[/b]

$_htmlcode=‘Selecione o Conteúdo’;
$_sql=“SELECT id_objetivo_contato, descr_objetivo
FROM clientes_objetivos_contatos
WHERE ATIVO=‘S’ AND tipo_objetivo <> 6”;

sc_select(rs,$_sql);

if ({rs}!==False){
$_selected=({objetivo_contato}==$rs->fields[0])?“Selected”:"";
while (!$rs->EOF){
$_htmlcode.=’<option value="’.$rs->fields[0].’" ‘.$_selected.’>’.$rs->fields[0].’’;
$rs->MoveNext();
}
$rs->Close();
}

sc_ajax_javascript(“objetivoContato”,Array(“id_sc_field_objetivo_contato”,$_htmlcode));

Criei um Metodo Javascript com o nome: objetivoContato e dentro :

$(’#’+id).html(htmlcode);

Esta Correto o que fiz?

Não esta carregando o campo.

opa…
Funcionou, descobri ao criar o metodo não criei os parametros.

agora uma outra coisa os dados que contém acentução nçao estão exibindo corretamente.

ex. Avaliação esta avaliao não exibiu o çã.

Resolvido

colocado $_htmlcode = utf8_encode($_htmlcode);

1 Curtida

Ótimo.
É isso aí.

[b]Criei uma biblioteca para fazer a chamada em qualquer formulário.

Obs.: criei com SC_LOOKUP, mas pode ser o SC_SELECT como Foi passado inicialmente pelo Haroldo.[/b]

<?php function CampoSelect($sql,$campo,$NomeMetodo){ /* Fernando Oliveira 03.08.12 $NomeMetodo = Criar na aplicação um metodo javascript e passar o nome do mesmo nesta variavel. obs. usar o icone f(x) para criar os parametros id e htmlcode para o metodo, Dentro do metodo colocar $('#'+id).html(htmlcode); $sql = Recebe o sql que será executado no campo. $campo = Recebe o nome do campo. Abaixo exemplo: OBS.: CHAMAR DENTRO DE UM EVENTO AJAX $sql = "SELECT id_objetivo_contato, descr_objetivo FROM clientes_objetivos_contatos WHERE ATIVO='S' AND tipo_objetivo < 2"; $campo = "objetivo_contato"; $NomeMetodo = "objetivoContato"; sc_include('campo_select.php'); // Não esquecer de marcar em programação a biblioteca. CampoSelect($sql,$campo,$NomeMetodo); */ $_htmlcode=' Selecione o Conteúdo '; sc_lookup(DataSet,$sql); $campo_ = "{".$campo."}"; if ({DataSet}!==False){ $_selected=($campo_=={DataSet[0][0]})?"Selected":""; $cont = count({DataSet}); for($x=0;$x<$cont;$x++){ $id = {DataSet[$x][0]}; $descricao = {DataSet[$x][1]}; $_htmlcode.=''.$descricao.''; } $_htmlcode = utf8_encode($_htmlcode); // Corrigi os campos que contem acentuação } $id_sc_field = "id_sc_field_".$campo; sc_ajax_javascript($NomeMetodo,Array($id_sc_field,$_htmlcode)); } ?>

Desculpe reabrir este topico, mas
estou precisando exatamente deste exemplo mensionado.

Mas, nao estou conseguindo aplicar o mesmo !?

*duvidas
1- o campo que preciso preencher vai ser tipo=select ?
2- ja tenho um lookup dentro dele, tenho que deixa em branco?
3- tem como acrescentar cor ao item selecionado ?

aqui o exemplo aplica-se ao campo do tipo select.
Não interessa se vai ter lookup manual ou automático, pois a intenção e alimenta-lo dinamicamente.

Na v5 funcionava direitinho, na v6 acho que é preciso incorporar a biblioteca jquery para funcionar, pois não vem mais por default (eu acho).

  • tópico antigo, mas vamos lá *

Usei a rotina que Haroldo sugeriu e o preenchimento do select fica perfeito. No entanto, dois pontos:

  1. Ao consultar registro gravado anteriormente, não vem seleciona a opção correspondente ao ID gravado no banco. Traz sempre a primeira opção do select.

  2. Ao selecionar uma opção onde o ID tem 2 dígitos, dá o erro abaixo:

Como corrigir?

Desde já, grata pela atenção.

$_selected=({cidade}==$rs->fields[0])?“Selected”:""; /// <<<< aqui esta tua resposta flavia, aqui é comparado si o campo {cidade} é igual ao resultado cidade então ele marca como “selected”

Willian, Willian, Willian. Perfeito! Passei essa linha pra dentro do while e resolveu o problema 1. de posicionar no item gravado no banco. Mais uma pra conta rsrs
Mto obrigada

Agora fico no aguardo de uma ajuda para solução do problema 2.

Exemplo na V8.1:

http://iw.servehttp.com:81/sc81/app/forum_sc/select_dinamico_cadastro_form

o SQL é trocado dinamicamente no campo do tipo Select.

Bom dia.

Estou testando a mesma solução sugerida pelo Haroldo, mas estou na versão 9 e não está funcionando, sabem me dizer se está com algum problema esta solução para a v9?

Att.

André.

Bom dia.

Consegui fazer funcionar, o grande problema é o campo que dispara o evento.

Se o campo for do tipo select, não funciona, coloquei ele como texto(auto-complete) com select2 e funcionou, dispara certinho o evento ajax.

Obrigado @InfinitusWeb , esse seu código, vi que já ajudou muita gente e a mim também. Obrigado.

Você manja muito de Javascript, você tem algum portal com seu conteúdo scriptcase + javascript? Vejo que existe bastante carência nesse lado de javascript.

Att.

André.

1 Curtida