DbGrid e recordcount ignorar alguns registros
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:
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:
mas não funcionou.
Também tentei usar
mas retornou zero.
Alguém pode dar uma forcinha?
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
Curtidas 0
Respostas
Joel Rodrigues
19/03/2013
Opa, tudo em paz?
Qual banco você está usando?
Só pra garantir, no seguinte trecho:
faça a seguinte correção:
Ah, veja também as questões das aspas, se são duplas ou simples no banco que você está usando.
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.
GOSTEI 0
Edilson Santiago
19/03/2013
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.
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.
GOSTEI 0
Joel Rodrigues
19/03/2013
Testou com aspas simples?
GOSTEI 0
Perivaldo Martins
19/03/2013
Tente dessa forma.
Se é apenas para mostrar a quantidade de membros, digamos ativos, você pode tornar essa instrução mais rápida, modificando ela para:
Boa sorte e bons códigos!
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!
GOSTEI 0
Perivaldo Martins
19/03/2013
Ficou faltando fechar como uma aspas simples o trecho.
Boa sorte e bons códigos!
AdoQuery1.SQL.Add('WHERE (STATUS <> "DESLIGADO") AND (STATUS <> "NÃO MEMBRO")');
Boa sorte e bons códigos!
GOSTEI 0
Bruno Leandro
19/03/2013
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'')');
De:
AdoQuery1.SQL.Add('WHERE (STATUS <> "DESLIGADO") AND (STATUS <> "NÃO MEMBRO"));
Para:
AdoQuery1.SQL.Add('WHERE (STATUS <> ''DESLIGADO'') AND (STATUS <> ''NÃO MEMBRO'')');
GOSTEI 0