Jump to content

[Ajuda] DBGRID


CanonTG
 Share

Recommended Posts

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

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

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;
  • Vote 1

"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

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 😛

  • Vote 1
Link to comment
Share on other sites

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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.