Urgente. Ajuda com pesquisa em tempo de execução

Delphi

03/02/2014

Pessoal é o seguinte;

Tenho duas tabelas cliente e endereço relacionadas. Em um form eu tenho dois Edits. Um carrega o nome do cliente e outro o nome da rua, e um DBedit com o código do cliente, tudo em tempo de execução e conforme muda nome do cliente também muda o nome da rua para o correspondente.

Para fazer isso eu coloquei no evento Onchange do edit que carrega o nome o seguinte código e funciona perfeitamente.

var
ender : String;
begin
if DataSource1.State in [dsbrowse,dsedit] then
begin
with DataModule1.Querycliente do
begin
Close;
SQL.Clear;
SQL.Add('select * from cliente where id_cliente like' +QuotedStr(DBEdit1.text));
Open;
ender := FieldByName('id_end').AsString;
end;

with DataModule1.ADOQendereco do
begin
Close;
SQL.Clear;
SQL.Add('select * from endereco where id_end like'+QuotedStr(ender));
Open;
Edit2.Text := FieldByName('rua').AsString;
end;
end;
end;

Agora vem o meu problema. Em 5 formulários no programa, todos com esse código e tabelas diferentes, tudo funciona 100%, mas em apenas um formulário (sexto) esse código não funciona. Já fiz de tudo, inclusive para testar criei uma nova tabela, novos campos, inseri novos componentes (query e datasource), criei um novo projeto com um novo formulário e esse código simplesmente parou de funcionar até mesmo em outro "programa". Não entendi nada.

Na prática ele tem que navegar entre os registro através de um dbnavigator mesmo e conforme o nomedo cliente muda ele vai mudando os endereços.

Alguém sabe de um outra forma de se fazer isso?
Ricardo

Ricardo

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

03/02/2014

Ocorre algum erro?
Você já depurou para testar o fluxo do código?
GOSTEI 0
Ricardo

Ricardo

03/02/2014

Ocorre algum erro?
Você já depurou para testar o fluxo do código?


Não tem erro, simplesmente não funciona. Pelo o que eu notei ele por algum motivo não esta executando o evento onchange no momento da abertura do formulário, e deveria executar já que quando o form é criado não existe nenhum campo preenchido com dados da tabela, mas após o form abrir os campos recebem dados, ou seja, o onchange passa a valer. Ele passa a executar a função quando navega pelos registros através do dbnavigator, mas aí ele pega o ID anterior(o que já abriu no form).
GOSTEI 0
Douglas

Douglas

03/02/2014

Ocorre algum erro?
Você já depurou para testar o fluxo do código?


Não tem erro, simplesmente não funciona. Pelo o que eu notei ele por algum motivo não esta executando o evento onchange no momento da abertura do formulário, e deveria executar já que quando o form é criado não existe nenhum campo preenchido com dados da tabela, mas após o form abrir os campos recebem dados, ou seja, o onchange passa a valer. Ele passa a executar a função quando navega pelos registros através do dbnavigator, mas aí ele pega o ID anterior(o que já abriu no form).


Ricardo, uma observação. Na abertura do formulário o evento OnChange não será executado, isso esta de forma correta.
GOSTEI 0
Marcos Gandin

Marcos Gandin

03/02/2014

Coloca uma chamada ao método onChange no evento onCreate que funcionará.
Ou então, pra ficar melhor ainda, crie uma função que retorne os dados que está precisando, transfira o seu código que está no evento onChange e faça a chamada desta função em qualquer lugar do sistema, evitando que seu código se repita em outros pontos do sistema.
GOSTEI 0
Ricardo

Ricardo

03/02/2014

Ocorre algum erro?
Você já depurou para testar o fluxo do código?


Não tem erro, simplesmente não funciona. Pelo o que eu notei ele por algum motivo não esta executando o evento onchange no momento da abertura do formulário, e deveria executar já que quando o form é criado não existe nenhum campo preenchido com dados da tabela, mas após o form abrir os campos recebem dados, ou seja, o onchange passa a valer. Ele passa a executar a função quando navega pelos registros através do dbnavigator, mas aí ele pega o ID anterior(o que já abriu no form).


Ricardo, uma observação. Na abertura do formulário o evento OnChange não será executado, isso esta de forma correta.


Douglas, acontece que quando os formulários são abertos ele está chamando o evento onchange do DBedit automaticamente, não sei o motivo, mas está.
GOSTEI 0
Ricardo

Ricardo

03/02/2014

Coloca uma chamada ao método onChange no evento onCreate que funcionará.
Ou então, pra ficar melhor ainda, crie uma função que retorne os dados que está precisando, transfira o seu código que está no evento onChange e faça a chamada desta função em qualquer lugar do sistema, evitando que seu código se repita em outros pontos do sistema.


Como não estou podendo perder muito tempo com esse problema agora, eu "resolvi" pegando um formulário onde está tudo funcionando, renomeando a unit, e mudando a ligação com as tabelas e query etc. Funcionou normalmente.

Não sei a razão pela qual somente um formulário não está aceitando o código.
GOSTEI 0
Deivison Melo

Deivison Melo

03/02/2014

Finalizando o tópico!!
GOSTEI 0
POSTAR