FILTRAGEM DE TABELA ENTRE DATAS

Delphi

11/04/2018

Alguém pode me ajudar com este código, na filtragem de tabela por data. Não uso QUERY .
Os componentes que uso são dois TDataTime.date.

tbl_local.filter := 'Data BETWEEN' + data_ini.date +' AND ' + data_fim.date; 


Só que a filtragem não ocorre. Nada acontece. Também sei que é necessário formatar os campos para Formato Mysql=> yyy/mm/yy.
Alguém pode me ajudar. Já estou perdendo muito tempo e não sei como resolver.
Adailso Cosme

Adailso Cosme

Curtidas 0

Respostas

Natanael Ferreira

Natanael Ferreira

11/04/2018

Faça um teste com o código abaixo:

  tbl_local.Filtered := False;
  tbl_local.filter := 'Data BETWEEN ' + QuotedStr(FormatDateTime('mm/dd/yyyy', data_ini)) +
                      ' AND ' + QuotedStr(FormatDateTime('mm/dd/yyyy', data_fim));
  tbl_local.Filtered := True;
GOSTEI 0
Adailso Cosme

Adailso Cosme

11/04/2018

Não deu certo!

tbl_local.Filtered := False;
tbl_local.filter := 'Data BETWEEN ' + QuotedStr(FormatDateTime('mm/dd/yyyy', data_ini)) +
' AND ' + QuotedStr(FormatDateTime('mm/dd/yyyy', data_fim));
tbl_local.Filtered := True;

Não deu certo!

bl_local.Filtered := False;
tbl_local.filter := 'Data BETWEEN ' + QuotedStr(FormatDateTime('mm/dd/yyyy', data_ini.date)) +
' AND ' + QuotedStr(FormatDateTime('mm/dd/yyyy', data_fim.date));
tbl_local.Filtered := True;

Pode me ajudar mais?
GOSTEI 0
Natanael Ferreira

Natanael Ferreira

11/04/2018

Não uso MySql mas creio que o formato de data utilizado é o yyyy-mm-dd.

Verifique qual é o formato das datas do banco.

Se o formato for este yyyy-mm-dd, teste o código abaixo:

tbl_local.Filtered := False;
tbl_local.filter := 'Data BETWEEN ' + QuotedStr(FormatDateTime('yyyy-mm-dd', data_ini)) +
                    ' AND ' + QuotedStr(FormatDateTime('yyyy-mm-dd', data_fim));
tbl_local.Filtered := True;
GOSTEI 0
Adailso Cosme

Adailso Cosme

11/04/2018

There is no overloaded version of ''FormatDateTime'' that can be called with these arguments
GOSTEI 0
Adailso Cosme

Adailso Cosme

11/04/2018

tbl_local.Filtered := False;
tbl_local.filter := 'Data BETWEEN ' + QuotedStr(FormatDateTime('yyyy-mm-dd', data_ini.date)) +
' AND ' + QuotedStr(FormatDateTime('yyyy-mm-dd', data_fim.date));

Acrescentei o .date....
Agora o MySql esta apresentando erro de expressão.
GOSTEI 0
Adailso Cosme

Adailso Cosme

11/04/2018

Já tentei assim:

procedure Tfrm_relatorio.filtrarClick(Sender: TObject);
var
filtro:string;
begin
Filtro := 'Select * From tbl_local';
Filtro := Filtro+' and Data >= :pData1 and Data <= :pData2';
dm.tbl_local.SQL.Clear;
dm.tbl_local.SQL.ADD(Filtro);
dm.tbl_local.ParamByName('pData1').AsString := FormatDateTime('yyyy-mm-dd',Data_ini.Date);
dm.tbl_local.ParamByName('pData2').AsString := FormatDateTime('yyyy-mm-dd',data_fim.Date);
dm.tbl_local.Open;
end;

Nada acontece. A grid mostra tudo!!
GOSTEI 0
Adailso Cosme

Adailso Cosme

11/04/2018

Definitivamente, desisto de fazer filtro entre datas, numa Ttable.
A query funciona perfeitamente, porém na impressão do FastReport fica uma bagunça.
Ja a Ttable as integidades permanecem.

Obrigado a todos!!
Mas desisto!!
A filtragem entre datas numa Ttable, no delphi, é muito limitada.
GOSTEI 0
Adailso Cosme

Adailso Cosme

11/04/2018

Não uso MySql mas creio que o formato de data utilizado é o yyyy-mm-dd.

Verifique qual é o formato das datas do banco.

Se o formato for este yyyy-mm-dd, teste o código abaixo:

tbl_local.Filtered := False;
tbl_local.filter := 'Data BETWEEN ' + QuotedStr(FormatDateTime('yyyy-mm-dd', data_ini)) +
                    ' AND ' + QuotedStr(FormatDateTime('yyyy-mm-dd', data_fim));
tbl_local.Filtered := True;
GOSTEI 0
Adailso Cosme

Adailso Cosme

11/04/2018

Definitivamente, desisto de fazer filtro entre datas, numa Ttable.
A query funciona perfeitamente, porém na impressão do FastReport fica uma bagunça.
Ja a Ttable as integidades permanecem.

Obrigado a todos!!
Mas desisto!!
A filtragem entre datas numa Ttable, no delphi, é muito limitada.
GOSTEI 0
POSTAR