ClientDataSet - Limitar filtros de acordo com a query
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).
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
Curtidas 0
Respostas
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
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?
Já tenho uma query executada e quero extrair desta query somente os vendedores pertenecentes aos seus dados, deu prá sacar?
GOSTEI 0
Brunodsr
15/11/2008
Use a propriedade filter do DataSet e em seguida set o Filtered para true
GOSTEI 0
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
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?
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
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:
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;
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
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!
Agradeço pacas a sua força!
GOSTEI 0