Fórum Como filtrar campo vazio com uma ADOTable? #452947
22/08/2013
0
Ao meu problema, criei uma aplicação em Delphi com o Banco de Dados e fiz todas as ligações usando ADOTable e exibindo os dados em um DBGrid.
Alguns cadastros devem estar com o campo NProjeto vazio, pois significa que este cadastro ainda não foi finalizado. Quando finaliza, esse campo recebe finalizado.
Quero colocar um CheckBox escrito: 'Listar Vazias' e ao clicar, mostrar todos os cadastros que possuem o campo NProjeto vazio. Ainda não consegui fazer isso.
Tentei com SQL mas não gostei do resultado e ainda não filtrou direito.
Quero fazer com filtro de ADOTable mesmo, estou fazendo da seguinte maneira:
If(CheckBox1.State=cbChecked) Then
Begin
AdoTable1.Filter:='NProjeto like '+QuotedStr(Edit12.Text);
AdoTable1.Filtered:=True;
Label23.Caption:=InttoStr(AdoTable1.RecordCount)+(' Registros');
End
Else
Begin
AdoTable1.Filtered:=False;
Label23.Caption:=InttoStr(AdoTable1.RecordCount)+(' Registros');
End;Esse Edit12 eu coloquei recebendo texto vazio e está invisivel.
Não dá certo desse jeito, ele só filtra se eu preencher algo, salvar, deixar em branco e salvar novamente; se eu deixar ele em branco na hora do cadastro, ele não é filtrado.
Por favor, me ajudem! Sou iniciante em Delphi e estou criando o maior software que já fiz.
Obrigado!
Matheus Gomes
Curtir tópico
+ 0Posts
22/08/2013
Deivison Melo
Começe a trabalhar com o SQL de sua query montado em tempo de execução, passando
a utilizar ele no código delphi ao invés da property: SQL ou text (seja qual for
os componentes que esteja utilizando).
Exemplo:
var
strSQL: string;
begin
with Query do
begin
strSQL :='';
strSQL := 'select empresas.codigo_empresa as codigo, ' +
'empresas.razao_social_empresa as nome from empresas where 1 = 1 ';
If(CheckBox1.State=cbChecked) THEN
strSQL := strSQL + ' and valor is null';
else
strSQL := strSQL + ' and valor is not null';
Close;
CommandText := strSQL;
Open;
end;
Já fiz muito isso...
Não sei se era assim que vc queria...
Caso não seja sinaliza por favor!
Atenciosamente,
Emanoel Deivison
Recife - PE
Gostei + 0
24/08/2013
Matheus Gomes
Teria uma outra maneira de fazer isso ?
Gostei + 0
25/08/2013
Matheus Gomes
Tópico encerrado.
Gostei + 0
27/08/2013
Joel Rodrigues
A solução do seu problema pode ajudar outros futuramente.
Gostei + 0
04/09/2013
Matheus Gomes
Fiz da seguinte forma:
procedure TFormControle.CheckBox1Click(Sender: TObject);
begin
If(CheckBox1.State=cbChecked) Then
Begin
AdoTable1.Filter:='NProjeto like '+QuotedStr(Edit12.Text);
AdoTable1.Filtered:=True;
Label23.Caption:=InttoStr(AdoTable1.RecordCount)+(' Registros');
End
Else
Begin
AdoTable1.Filtered:=False;
AdoTable1.Last;
Label23.Caption:=InttoStr(AdoTable1.RecordCount)+(' Registros');
End;
end;Na hora que salvo o cadastro, coloco o campo NProjeto recebendo " - " e depois recebendo vazio, pois só assim ele reconhece o campo como vazio.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)