Jump to content

Como filtrar data em branco no Lazarus


InfoMan
 Share

Recommended Posts

Boa Noite para Todos!

Estou criando um programa que gera vários relatórios (LazReport) a partir de arquivos DBF exportados de um outro programa. Como tenho que lidar obrigatoriamente com DBF uso o componente TDBF do Lazarus. O problema é que preciso filtrar todas as datas que estiverem em branco no banco de dados para então exibir o relatório de todos os registros que estão com a data em branco.

Já tentei de todas as formas possíveis que conhecia e pesquisei na internet, mas nada funciona. Consigo filtrar os dados por datas e períodos tranquilamente, mas não consigo filtrar os registros que estão com a data em branco. Por favor, me ajudem, pois se não conseguir fazer isso (e tenho certeza que tem jeito) perderei todo o programa que fiz, pois este relatório é essencial ao sistema.

As datas em branco são mostradas como "12:00:00 AM" em outro programa que uso para ler o banco de dados.

O componente TDB tem uma propriedade filter que permite usar o filtro desejado. É nela que estou tendo filtrar o banco de dados e não consigo.

Estou usando Lazarus 0.9.31 (de 03/03/2012) no Windows 7 de 32 bits.

Muito obrigado a todos que responderem.

Link to comment
Share on other sites

Em Delphi (no qual o Lazarus é baseado) faria isto:

procedure TForm1.Tabela1OnFilterRecord(DataSet: TDataSet; var Accept : Boolean)
begin
     Accept := Tabela1CampoData.AsFloat <> 0;
     { ou }
     Accept := not Tabela1CampoData.IsNull;
end;

Tabela1 seria o TDBF e OnFilterRecord é um evento para filtrar registos em código. Basta meter o parâmetro Accept a False para o registo ser ignorado.

Link to comment
Share on other sites

Muitíssimo obrigado pela ajuda. Deu certo, finalmente. Valeu mesmo.

Fiz assim:

if not dados.FieldByName('DT_ENCERRA').IsNull then Accept := False;

onde dados é o nome do componente DBF e DT_ENCERRA é o nome do campo que precisava testar.

Mais uma vez, muito obrigado pela ajuda.

Link to comment
Share on other sites

if not dados.FieldByName('DT_ENCERRA').IsNull then Accept := False;

Isto é o mesmo que colocar:

Accept := dados.FieldByName('DT_ENCERRA').IsNull;

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.