DbGrid e recordcount ignorar alguns registros

19/03/2013

1

Amigos, minha dúvida é a seguinte. Estou fazendo uma consulta, para exibir num DBGrid a lista de todos os membros cadastrados, e fazer também um recordcount.

Usei o código abaixo, e deu certinho:

procedure TForm4.ComboBox1Change(Sender: TObject);
begin
if (Combobox1.Text = 'Total de Membros') then
begin
Label1.Caption := 'Total de Membros Cadastrados';
AdoQuery1.Close;
AdoQuery1.SQL.Clear;
AdoQuery1.SQL.Add('Select *');
AdoQuery1.SQL.Add('From Dados');
AdoQuery1.SQL.Add('Order by Nome');
AdoQuery1.Open;
Label2.Caption := IntToStr(AdoQuery1.RecordCount);
end;


Porém, preciso acrescentar uma coisa: Se no campo "Status" do banco de dados tiver "Desligado" ou "Não Membro", quero que esse registro seja ignorado, tanto no DBGrid, quando no recordcount.

Ou seja, tenho 10 registros no BD, mas 1 deles o campo "status" ta gravado "Desligado" e outro registro, o campo "status" ta gravado "Não Membro".

Então, meu DBGrid deve mostrar 8 registros, em vez de todos os 10, e o label do recordcount marcar 8.

Fiz assim:

AdoQuery1.SQL.Add('Where Status <> "Desligado" and "Não Membro"');


mas não funcionou.

Também tentei usar

AdoQuery1.SQL.Add('Where Status not in ("Desligado","Não Membro")');


mas retornou zero.

Alguém pode dar uma forcinha?
Responder

Posts

19/03/2013

Joel Rodrigues

Opa, tudo em paz?
Qual banco você está usando?

Só pra garantir, no seguinte trecho:
Where Status <> "Desligado" and "Não Membro"

faça a seguinte correção:
Where Status <> "Desligado" and Status <> "Não Membro"


Ah, veja também as questões das aspas, se são duplas ou simples no banco que você está usando.
Responder
Opa, paz!

Uso banco Access, pq tenho poucos registros. Tentei dessa forma q vc postou, mas também retornou zero.

E não é problema de código, pois se retiro a linha "were" retorna normalmente todos os registros.
Responder

20/03/2013

Joel Rodrigues

Testou com aspas simples?
Responder
Tente dessa forma.
procedure TForm4.ComboBox1Change(Sender: TObject);
begin
if (Combobox1.Text = 'Total de Membros') then
begin
Label1.Caption := 'Total de Membros Cadastrados';
AdoQuery1.Close;
AdoQuery1.SQL.Clear;
AdoQuery1.SQL.Add('Select * ');
AdoQuery1.SQL.Add('From Dados ');
AdoQuery1.SQL.Add('WHERE (STATUS <> "DESLIGADO") AND (STATUS <> "NÃO MEMBRO"));
AdoQuery1.SQL.Add('Order by Nome');
AdoQuery1.Open;
Label2.Caption := IntToStr(AdoQuery1.RecordCount);
end;

Se é apenas para mostrar a quantidade de membros, digamos ativos, você pode tornar essa instrução mais rápida, modificando ela para:

procedure TForm4.ComboBox1Change(Sender: TObject);
begin
if (Combobox1.Text = 'Total de Membros') then
begin
Label1.Caption := 'Total de Membros Cadastrados';
AdoQuery1.Close;
AdoQuery1.SQL.Clear;
AdoQuery1.SQL.Add('Select COUNT(*) as Total ');
AdoQuery1.SQL.Add('From Dados ');
AdoQuery1.SQL.Add('WHERE (STATUS <> "DESLIGADO") AND (STATUS <> "NÃO MEMBRO"));
AdoQuery1.Open;
Label2.Caption := AdoQuery1.FieldByName('Total').AsString;
end;



Boa sorte e bons códigos!
Responder
Ficou faltando fechar como uma aspas simples o trecho.
AdoQuery1.SQL.Add('WHERE (STATUS <> "DESLIGADO") AND (STATUS <> "NÃO MEMBRO")');


Boa sorte e bons códigos!
Responder

22/03/2013

Bruno Leandro

Edilson, caso nao tenha funcionado eu utilizo de outra forma, aonde esta usando aspas dupla eu utilizo duas aspas simples

De:
AdoQuery1.SQL.Add('WHERE (STATUS <> "DESLIGADO") AND (STATUS <> "NÃO MEMBRO"));


Para:
AdoQuery1.SQL.Add('WHERE (STATUS <> ''DESLIGADO'') AND (STATUS <> ''NÃO MEMBRO'')');
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira