Problemas com dbgrids

Delphi

28/05/2010

Olá a todos, criei um form e nele coloquei 2 dbgrids ligados, cada um, a uma query.
O primeiro traz informações sobre os seguros que o cliente tem, e o segundo traz informações
sobre as coberturas correspondentes a cada seguro. Ou seja, cada linha do primeiro dbgrid pode
conter várias linhas no segundo dbgrid. No entanto, o segundo dbgrid está trazendo todas coberturas
de todos os seguros de todos os clientes. Quer dizer, não está fazendo o filtro correto. O que devo
fazer para que qdo o usuário selecionar o seguro no primeiro dbgrid, o segundo mostre corretamente
as coberturas correspondente a esse seguro? Segue abaixo o código:     procedure TFrmSegCli.FormShow(Sender: TObject);
begin
  QrySegCli.Close;
  QrySegCli.SQL.Clear;
  QrySegCli.SQL.Add('Select * from (((((clientes left outer join seguros ');
  QrySegCli.SQL.Add('on clientes.codigo=seguros.cliente) ');
  QrySegCli.SQL.Add('left outer join ramos on ramos.codigo=seguros.ramo) ');
  QrySegCli.SQL.Add('left outer join seguradoras on seguradoras.codigo=seguros.seguradora) ');
  QrySegCli.SQL.Add('left outer join marcas on marcas.codigo=seguros.marca) ');
  QrySegCli.SQL.Add('left outer join produtores on produtores.codigo=seguros.produtor) order by modelo');
  QrySegCli.Open;   QrySegCob.Close;
  QrySegCob.SQL.Clear;
  QrySegCob.SQL.Add('Select c.nome, cb.descricao, sc.valor, sc.franq ');
  QrySegCob.SQL.Add('from clientes c, seguros s, seguroscob sc, coberturas cb ');
  QrySegCob.SQL.Add('where c.codigo=s.cliente and ');
  QrySegCob.SQL.Add('s.codigo=sc.seguro and ');
  QrySegCob.SQL.Add('sc.cobertura=cb.codigo order by cb.descricao');
  QrySegCob.Open;
end; procedure TFrmSegCli.QrySegCliFilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
begin
  if ((pos(DbTxtNomSeg.Caption, QrySegCli.FieldByName('nome').Value) <> 0)
     and (pos(DbTxtNomSeg.Caption, QrySegCob.FieldByName('nome').Value) <> 0)) then
    Accept := true
  else
    Accept := false;
end; procedure TFrmSegCli.DbgrdSegcliEnter(Sender: TObject);
begin
  QrySegCli.Filtered := False;
  QrySegCli.Filtered := True;
  QrySegCob.Filtered:= False;
  QrySegCob.Filtered := True;
end;
Simone Grandini

Simone Grandini

Curtidas 0

Respostas

Simone Grandini

Simone Grandini

28/05/2010

Resolvido. Inseri uma query para cada tabela, sendo que a query correspondente a tabela "Seguros" aponta, no select, para a tabela clientes através do campo "codcli". Já a query referente a tabela "Coberturas" aponta para a tabela "Seguros" por meio do select. Ficou assim:

QuerySeguros:

select * from seguros s, ramos r, seguradoras sg, produtores p
where s.cliente=:codcli and r.codigo=s.ramo and
sg.codigo=s.seguradora and p.codigo=s.produtor
order by s.modelo

QueryCoberturas

select * from seguroscob sc, coberturas cb
where sc.seguro=:codseg and sc.cobertura=cb.codigo
order by cb.descricao

GOSTEI 0
POSTAR