Fórum Erro - DBLookupComboBox limpando vários combos !! #517205

18/04/2015

0

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

Responder

Posts

20/04/2015

Marcos P

Alguém ?
Responder

Gostei + 0

20/04/2015

Marcos P

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 !
Responder

Gostei + 0

28/04/2015

Marcos P

Mesmo problema em outro form !!!

Alguém tem alguma ideia da causa e de como corrigir isso ?
Responder

Gostei + 0

30/04/2015

Thiago Santana

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?
Responder

Gostei + 0

30/04/2015

Marcos P

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.
Responder

Gostei + 0

30/04/2015

Thiago Santana

Posta o seu código que faz o carregamento desses Combos!
Para facilitar por favor.
Responder

Gostei + 0

30/04/2015

Marcos P

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;
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar