ClientDataSet - Limitar filtros de acordo com a query

Delphi

15/11/2008

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

Curtidas 0

Respostas

Paulo

Paulo

15/11/2008

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.


GOSTEI 0
Crpavao

Crpavao

15/11/2008

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?


GOSTEI 0
Brunodsr

Brunodsr

15/11/2008

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


GOSTEI 0
Paulo

Paulo

15/11/2008

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


GOSTEI 0
Crpavao

Crpavao

15/11/2008

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?


GOSTEI 0
Tonidavi2004

Tonidavi2004

15/11/2008

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


GOSTEI 0
Crpavao

Crpavao

15/11/2008

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!


GOSTEI 0
POSTAR