Problema com Evento Ajax - OnChange

Meus Caros,

Derrepente estou com um problema novo num evento ajax (onChange), o sistema ficou muito lento para rodar a rotina do evento, onde eu busco um id de uma conta contábil e jogo em um outro campo do formulário, o que me espantou é que inicialmente achei que o select é que estava demorando, e não é, o que está causando a demora é a atribuição do valor retornado do select para o campo do formulário, eis o código:

sc_lookup(dataset,“select IDContaContabil from m2_contabil_contas WHERE Reduzido={IDRedCredito} AND IDExercicio=[idexercicio]”);
{IDContaCredito} = {dataset[0][0]};

Agora, alguém pode explicar o que está ocorrendo, por que essa demora ?

Só pra constar essa rotina demora uns 15 segundos, as vezes mais, para rodar, é muita coisa, o select só traz um registro, isso estava rodando em 2 segundo e olha lá.

Meus usuários estão reclamando horrores, e com toda razão, mas eu não sei como resolver isso, preciso de uma ajuda de vocês.

Grato.

Modo debug?

Haroldo, o de bug não mostra nada de erro, ou o por que da demora, simplesmente demora.

Comente o código é execute

Haroldo, foi isso que eu fiz meunamugo, e foi isso que me mostrou que o que está causando a demora não é o select mas sim a atribuição do valor retornado do select ao campo do formulário.

deixe o código comentado e coloque esse código;

{IDContaCredito} = 1;

Haroldo, também fiz esse teste meu amigo, e mesmo atribuindo qualquer outro valor ao campo, dentro do evento ajax a demora acontece.

vamos para ultima tentativa.

inspecione a pagina pelo google e verifique se há erros de javascript.

Bom dia, já tive um problema desse e parecia estar tudo certo porém não funcionava.
Faz um teste, joga a query em uma variável e passe ela no lookup e também verifica se volta empty:

$sqlS = “select IDContaContabil from m2_contabil_contas WHERE Reduzido={IDRedCredito} AND IDExercicio=[idexercicio]”;
sc_lookup(datasetS,$sqlS);
{IDContaCredito} = (empty({datasetS})) ? “” : {datasetS[0][0]};

Haroldo, verifiquei e não vi nenhum erro sendo apontado na inspeção da página.

Agora, uma coisa importante, o campo que está recebendo o valor retornado do select é do tipo select também, se eu jogar o valor para um outro campo qualquer a demora não ocorre.

O que eu faço nessa rotina é o seguinte:

É uma tela de lançamentos contábeis, e nela o usuário tem a opção de selecionar uma conta para o lançamento tanto por um código reduzido ou selecionando a conta do plano de contas contábeis. O campo onde o usuário informa o código reduzido não existe no banco de dados, foi criado apenas no form para que o usuário tem um modo rápido de acesso a conta, depois que o usuário digita o código reduzido eu disparo o evento ajax no onchange desse campo reduzido, e vou buscar o id da conta no plano de contas e jogo para o campo do tipo select mostrando a ele qual foi a conta informada/selecionada.

Isso sempre funcionou bem, de uma hora para outra, não sei por que, começou essa demora que é bastante grande, como disse, as vezes maior que 15 segundos.

O que será que está ocorrendo ? Como contornar esse problema ?

Rodrigo,

Eu já fiz esse teste e não resolveu, o valor é retornado sim e acaba indo para o campo de destino, o problema é a demora pra isso, especificamente a demora para que o campo destino receba efetivamente o valor retornado da query.

vc tem um campo select com lookup automatico?

Haroldo, sim meu caro, ele tem um lookup automatico sim.

tenta colocar um limit no select desse lookup.

Mas ideal e setar o atributo “select” para o id seletor desse campo. Acredito que ele executa e reconstroi toda a lista novamente por isso a demora.

Haroldo,

Eu não entendi essa sua sugestão de setar o atributo “select”, o que seria isso exatamente ?

Haroldo,

Eu confesso que não entendi a sua sugestão ideal, mas a título de informação, o campo select não demora pra carregar na inicialização do formulário, o form abri de pronto e o campo já está com o select carregado, a demora só ocorre dentro do evento ajax, já experimentei dentro do evento primeiro desativar o campo de destino e depois de atualizar o campo voltar a atualizar, mas não resolveu, eu não sei mais o que fazer, os meus usuários estão preferindo procurar a conta no campo com o select por que assim demora mesmo do que digitar o código reduzido e deixar o sistema buscar por ele.

o select (sql do lookup autmatico) do campo é refeito ao vc setar um valor para esse campo.

Da para ver a app rodando?

Olha o ERRO de setar o mesmo nome pra variável:

AND IDExercicio=[idexercicio]");

Tem que ser [glo_IDExercicio]

E no Campo SELECT que ele vai buscar, experimentar criar uma VIEW na base, só com básico e se puder usar um filtro nela melhor e usa a VIEW no SQL do SELECT.

Veja se não resolve.

Dica para variáveis no SC:
{Nome} // Do Próprio SC base de dados
$Nome_x // Local para usar na codificação PHP
[glo_Nome] // Global

Nunca faça isso: {Nome}, $nome, [nome] para o SC é a mesma coisa essas 3 variáveis e gera bugs de funcionamento, que aparente parece tudo certo, mas não funciona.

E por veja se a conexão com sua base esta usando o Método PDO.

Jailton,

Testei suas duas sugestões, a de mudar o nome da variável e a de criar uma view na base, nenhuma das duas resolveu o problema da demora, o problema persiste, e respondendo a sua outra pergunta a resposta é sim, o banco usa o metodo PDO.

Estou numa sinuca de bico, não sei mais o que fazer, vou ter que pensar uma forma de mudar essa sistematica que usei para contornar esse problema de mudar esse campo no evento ajax.

Dentro deste SELECT que recebe o valor ajax (onChange) coloca WHERE nele:
WHERE IDContaCredito={IDContaCredito}