InfoMan Posted March 23, 2012 at 12:15 AM Report #445264 Posted March 23, 2012 at 12:15 AM 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.
bsccara Posted March 23, 2012 at 12:30 AM Report #445268 Posted March 23, 2012 at 12:30 AM 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.
InfoMan Posted March 23, 2012 at 01:18 AM Author Report #445274 Posted March 23, 2012 at 01:18 AM 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.
nunopicado Posted March 23, 2012 at 01:55 AM Report #445279 Posted March 23, 2012 at 01:55 AM 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.
InfoMan Posted March 23, 2012 at 02:44 AM Author Report #445283 Posted March 23, 2012 at 02:44 AM OK. Obrigado pela dica.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now