Fórum Erro - DBLookupComboBox limpando vários combos !! #517205
18/04/2015
0
Até consegui localizar na WEB outras pessoas com o mesmo problema, mas ninguém apresentou um solução razoável...
Migração D5 > D2010.
Tenho um form com vários DBLookupComboBox, apontando para o mesmo ListSource/ListField/KeyField.
Quando seleciono um valor em um combo qualquer, TODOS os demais combos são limpos !!!
O mesmo código funciona perfeitamente quando compilado com Delphi 5.
Alguma ideia ?
Marcos P
Curtir tópico
+ 0Posts
20/04/2015
Marcos P
Gostei + 0
20/04/2015
Marcos P
Como solução de contorno acabei individualizando os DBLookupComboBox em DataSource + Queries exclusivas, o quê resolve o problema, mas acaba gerando custo adicional ao banco de dados !
Vou manter esse post "vivo" nos próximos dias, pois ainda tenho esperança de resolver esse negócio do jeito certo !
Gostei + 0
28/04/2015
Marcos P
Alguém tem alguma ideia da causa e de como corrigir isso ?
Gostei + 0
30/04/2015
Thiago Santana
Qual seria esse comportamento normal?
Tipo se ambos estão ligados na mesma fonte de dados, ao selecionar um os outros teriam que alterar os seus valores!
Não entendi muito bem sua dúvida!
Pode detalhar mais por favor?
Gostei + 0
30/04/2015
Marcos P
Repare, na imagem abaixo, que nas combo-box de "Serviço" ( baseadas do DBLookupComboBox ), consigo selecionar valores diferentes mesmo tendo a mesma configuração de ListSource / ListField / KeyField. Esse é o executável gerado com Delphi 5.
[img]http://arquivo.devmedia.com.br/forum/imagem/378439-20150430-181141.png[/img]
Essa mesma estrutura, com o Delphi 2010 não funciona... ao selecionar um combo ele limpa os outros.
É exatamente o mesmo problema descrito nesse link.
Gostei + 0
30/04/2015
Thiago Santana
Para facilitar por favor.
Gostei + 0
30/04/2015
Marcos P
procedure TfrmNovaFatura.cbSrvClick(Sender: TObject);
var
cbSrv, cbTipo: TDBLookupComboBox;
edVlr, edNroOS: TAlignEdit;
CodServ: Integer;
begin
cbSrv := TDBLookupComboBox(Sender);
cbTipo := TDBLookupComboBox(FindComponent('cbTipo' + IntToStr(cbSrv.Tag)));
edVlr := TAlignEdit(FindComponent('edVlr' + IntToStr(cbSrv.Tag)));
edNroOS := TAlignEdit(FindComponent('edNroOS' + IntToStr(cbSrv.Tag)));
CodServ := cbSrv.KeyValue;
case CodServ of
3:
begin
cbTipo.ListSource := nil;
cbTipo.ListField := 'Descricao;CodTipo';
cbTipo.KeyField := 'CodTipo';
cbTipo.ListSource := dsTipoParcela;
qrTipoParcela.First;
cbTipo.KeyValue := qrTipoParcelaCodTipo.Value;
end;
4:
begin
cbTipo.ListSource := nil;
cbTipo.ListField := 'Descricao;CodProg';
cbTipo.KeyField := 'CodProg';
cbTipo.ListSource := dsServicos;
qrServicos.First;
cbTipo.KeyValue := qrServicosCodProg.Value;
end;
30:
begin
cbTipo.ListSource := nil;
cbTipo.ListField := 'Descricao;CodEvento';
cbTipo.KeyField := 'CodEvento';
cbTipo.ListSource := dsEventos;
qrEventos.First;
cbTipo.KeyValue := qrEventosCodEvento.Value;
end;
else
begin
cbTipo.ListSource := nil;
cbTipo.ListField := '';
cbTipo.KeyField := '';
end;
end;
edVlr.Enabled := True;
edNroOS.Enabled := (CodServ = 3);
end;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)