CanonTG Posted April 3, 2014 Report Share Posted April 3, 2014 Boas, Quero filtrar os dados dos clientes na minha dbgrid, quando é s+o um cliente da bem quando são mais só aparece um. Query1.SQL.Clear; Query1.SQL.Text := 'select nCliente from oportunidadesclientes ' +'where nOportunidade='''+datasource1.dataset.fieldbyname('nOportunidade').AsString+''' '; Query1.Open; // showMessage('n linhas--->'+IntToStr(Query1.RecordCount)); while not(Query1.Eof) do begin ADOTable2.Filter := 'nCliente = '+QuotedStr(Query1.FieldByName('nCliente').AsString); ADOTable2.Filtered := true; Query1.Next; end; Link to comment Share on other sites More sharing options...
Kline777 Posted April 3, 2014 Report Share Posted April 3, 2014 Cada vez que corres o ultimo for estás a assumir APENAS o ultimo cliente que devolveste. Tens de fazer um filtro do tipo Ncliente=1 or Ncliente=2 or.... Ou seja, tens de construir o filtro para abarcar todos os registos da Query 1 e nao apenas o ultimo Link to comment Share on other sites More sharing options...
CanonTG Posted April 3, 2014 Author Report Share Posted April 3, 2014 Sim eu percebi a lógica mas não sei muito bem como fazer em programação. Não posso filtrar dento do ciclo Link to comment Share on other sites More sharing options...
nunopicado Posted April 3, 2014 Report Share Posted April 3, 2014 E não metas o filtro dentro do while. Declara uma variável string, dentro do while vais construindo o filtro, e só quando concluires o filtro é que o atribuis à ADOQuery. Algo assim: var Filtro:String; . . . Query1.SQL.Clear; Query1.SQL.Text := 'select nCliente from oportunidadesclientes ' +'where nOportunidade='''+datasource1.dataset.fieldbyname('nOportunidade').AsString+''' '; Query1.Open; // showMessage('n linhas--->'+IntToStr(Query1.RecordCount)); s:=''; while not(Query1.Eof) do begin if s<>'' then s:=s+' or '; s:=s+'nCliente = '+QuotedStr(Query1.FieldByName('nCliente').AsString); Query1.Next; end; ADOTable2.Filter := Filtro; ADOTable2.Filtered := true; 1 Report "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum. Link to comment Share on other sites More sharing options...
Kline777 Posted April 3, 2014 Report Share Posted April 3, 2014 Por acaso aqui as vezes em vez de s:=''; while not(Query1.Eof) do begin if s<>'' then s:=s+' or '; s:=s+'nCliente = '+QuotedStr(Query1.FieldByName('nCliente').AsString); Query1.Next; end; faço s:='1=2 '; //Uma condiçao sempre negativa while not(Query1.Eof) do begin s:=s+' or nCliente = '+QuotedStr(Query1.FieldByName('nCliente').AsString); Query1.Next; end; É um bocado badalhoca mas sempre se poupam uns ifs 😛 1 Report Link to comment Share on other sites More sharing options...
nunopicado Posted April 3, 2014 Report Share Posted April 3, 2014 heheheh Eu às vezes faço isso mas nas instruções SQL! 😄 "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum. Link to comment Share on other sites More sharing options...
CanonTG Posted April 4, 2014 Author Report Share Posted April 4, 2014 (edited) Obrigado 🙂 Edited April 4, 2014 by CanonTG Link to comment Share on other sites More sharing options...
nunopicado Posted April 4, 2014 Report Share Posted April 4, 2014 O s foi falha minha... 🙂 Declarei Filtro e usei s. Deixa lá, é o vinho! "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum. Link to comment Share on other sites More sharing options...
CanonTG Posted April 4, 2014 Author Report Share Posted April 4, 2014 Pois eu depois reparei que era esse o problema 😛 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now