Fórum ClientDataSet - Limitar filtros de acordo com a query #366184

15/11/2008

0

DBEXPRESS (queryProvider+clientDataSet) - DELPHI 7 - FIREBIRD
Tenho uma tabela onde acesso através de uma query usando filtros definidos pelo usuario. Nome da Tabela: GPINFO
Nesta tabela possui vários campos de outras tabelas, que são foreign key
Gostaria de saber como fazer para que fossem mostrados, destas tabelas, somente os registros existentes na Query da tabela GPINFO.
Por exemplo: Tem uma tabela de vendedores que é foreign key da tabela GPINFO. Quero que só fique visivel, na tabela vendedores, os vendedores que estão sendo mostrados na tabela GPINFO.
Agradeço quem ajudar (ou tentar).


Crpavao

Crpavao

Responder

Posts

15/11/2008

Paulo

GPINFO
codinfo
codvend

VENDEDOR
codvend
nome

select v.codvend,v.nome from vendedor v inner join gpinfo g
on(g.codvend = v.codvend)


Acho que é isso ou não entendi nada.


Responder

Gostei + 0

16/11/2008

Crpavao

Obrigado, amigo. Mas, infelizmente vc não entendeu.
Já tenho uma query executada e quero extrair desta query somente os vendedores pertenecentes aos seus dados, deu prá sacar?


Responder

Gostei + 0

17/11/2008

Brunodsr

Use a propriedade filter do DataSet e em seguida set o Filtered para true


Responder

Gostei + 0

17/11/2008

Paulo

Pavão, acho que é o que te passei. Veja bem o que te passei. Uma query que traz os vendedores que têm passagem por dentro da tabela gpinfo. É só olhar bem a query que te passei. Eu fiz apenas um exemplo hipotético, aí é só colocar dentro da sua realidade. Caso suas tabelas são grandes, eu costumo usar LEFT OUTER JOIN e depois filtrar com WHERE somente aquilo que eu quero. Os LEFT´s são mais rápidos(Bem mais) que os INNER´s. Tive query aqui bem indexadas e consistidas que levava 10 a 15min com INNER e uns 10s com LEFT(Oracle e FB).


Responder

Gostei + 0

17/11/2008

Crpavao

Paulo, tá dificil eu passar o que eu quero.
Veja bem: Esta tabela GPINFO possui, originalmente, TODOS os vendedores que estão na tabela VENDEDOR.
Bom, mas aí executo uma query com vários filtros (menos filtrando por VENDEDOR).
Com isto tenho uma consulta com uma parte do GPINFO. É neste momento que quero saber quais vendedores estão nesta consulta GPINFO, sacou?
Só que quero selecionar estes vendedores de forma rápida, sem ter que ler toda esta query para saber quais são estes vendedores.
E agradeço pelo esforço, hein?


Responder

Gostei + 0

18/11/2008

Tonidavi2004

[b:de7a1b6c15]Pavão[/b:de7a1b6c15], faça o seguinte, o cdsGPINFOFiltrado tem alguns vendedores, então, o cdsInfoVendedor que vc quer mostrar as informações destes vendedores, carregue-o assim:
var
  i: integer;
  sql: string;
begin
  i   := 0;
  sql := EmptyStr;
  cdsGPINFOFiltrado.First;
  while not cdsGPINFOFiltrado.Eof do
  begin
    Inc(i);
    if (i = cdsGPINFOFiltrado.RecordCount) then
      sql := sql + IntToStr(cdsGPINFOFiltrado.FieldByName(´codvend´).AsInteger)
    else
      sql := sql + IntToStr(cdsGPINFOFiltrado.FieldByName(´codvend´).AsInteger)+ ´,´;
  end;

  cdsInfoVendedor.CommandText := Format(´select v.codvend, v.nome from vendedor ´+
                                        ´where v.codvend in (¬s)´, [sql]);
  cdsInfoVendedor.Open;
end;

Não esqueça de setar a propriedade [b:de7a1b6c15]Options[/b:de7a1b6c15] do [b:de7a1b6c15][i:de7a1b6c15]TDataSetProvider[/i:de7a1b6c15] poAllowCommandText[/b:de7a1b6c15] := True;


Responder

Gostei + 0

18/11/2008

Crpavao

Obrigado pela ajuda, amigo, mas gostaria de ter algum outro recurso do ClientDataSet que retornasse esta lista de vendedores sem que eu tenha que fazer na munheca, como vc nos mostrou.
Agradeço pacas a sua força!


Responder

Gostei + 0

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

Aceitar