DbGrid e recordcount ignorar alguns registros

19/03/2013

0

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?
Edilson Santiago

Edilson Santiago

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

19/03/2013

Edilson Santiago

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

20/03/2013

Perivaldo Martins

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

20/03/2013

Perivaldo Martins

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

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar