Erro - DBLookupComboBox limpando vários combos !!

Delphi

18/04/2015

Pessoal,

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

Marcos P

Curtidas 0

Respostas

Marcos P

Marcos P

18/04/2015

Alguém ?
GOSTEI 0
Marcos P

Marcos P

18/04/2015

Galera,

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
Marcos P

Marcos P

18/04/2015

Mesmo problema em outro form !!!

Alguém tem alguma ideia da causa e de como corrigir isso ?
GOSTEI 0
Thiago Santana

Thiago Santana

18/04/2015

Marcos no Delphi 5 funciona normalmente como você citou!
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
Marcos P

Marcos P

18/04/2015

Thiago,

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
Thiago Santana

Thiago Santana

18/04/2015

Posta o seu código que faz o carregamento desses Combos!
Para facilitar por favor.
GOSTEI 0
Marcos P

Marcos P

18/04/2015

Segue o código do "OnClick" dos combos...

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
POSTAR