GARANTIR DESCONTO

Fórum Como filtrar campo vazio com uma ADOTable? #452947

22/08/2013

0

Primeiro quero agradecer por todas as ajudas em tópicos que estou tendo.

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

Matheus Gomes

Responder

Posts

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
Responder

Gostei + 0

24/08/2013

Matheus Gomes

Cara, eu não queria fazer com Query porque o meu banco de dados possui muitos registros e a Query atrasa o trabalho.
Teria uma outra maneira de fazer isso ?
Responder

Gostei + 0

25/08/2013

Matheus Gomes

Achei uma solução simples aqui. Obrigado pela ajuda!

Tópico encerrado.
Responder

Gostei + 0

27/08/2013

Joel Rodrigues

Estou marcando o tópico como concluído, mas teria como compartilhar a solução encontrada?
A solução do seu problema pode ajudar outros futuramente.
Responder

Gostei + 0

04/09/2013

Matheus Gomes

Claro!
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.
Responder

Gostei + 0

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

Aceitar