当我使用 FireDac 过滤我的 sqlServer 数据库时出现 EConvertError
EConvertError when I Filter my sqlServer database with FireDac
我将 Delphi 10.2.3 Tokyo
与 FireDac
一起使用,并设置与 SqlServer(2016)
数据库的连接,当我在查询中设置过滤器 Date_Document
字段时,我得到"could not parse SQL timesamp string"异常。
顺便说一句:Date_Document
的数据类型是 datetime
。
procedure TfrmMain.fltDateEdt2Change(Sender: TObject);
var dat1,dat2:TSQLTimeStamp;
begin
if (fltDateEdt1.Text<>' / / ') and (fltDateEdt2.Text<>' / / ') then
begin
if fltDateEdt1.Date<fltDateEdt2.Date then
try
dat1:=DateTimeToSQLTimeStamp(fltDateEdt1.Date);
dat2:=DateTimeToSQLTimeStamp(fltDateEdt2.Date);
comps.qryMain.Filter:=format('%s>= %s AND %s<=%s', ['DATE_DOCUMENT',SQLTimeStampToStr('YYYY-MM-DD',dat1).QuotedString,'DATE_DOCUMENT',SQLTimeStampToStr('YYYY-MM-DD',dat2).QuotedString]);
comps.qryMain.Filtered:=true;
except
end;
end
else
begin
comps.qryMain.Filtered:=false;
comps.qryMain.Filter:='';
end;
end;
我会使用你提到的 escape sequences in such case. Like for example (assuming that DATE_DOCUMENT column is of DATETIME 数据类型):
comps.qryMain.Filter := Format('DATE_DOCUMENT >= {dt %s 00:00:00} AND DATE_DOCUMENT <= {dt %s 23:59:59}', [
FormatDateTime('yyyy-mm-dd', fltDateEdt1.Date),
FormatDateTime('yyyy-mm-dd', fltDateEdt2.Date)
]);
制作这样的过滤器字符串的目的是让 FireDAC 将描述的日期时间格式转换为 DBMS 的本机格式,只需将日期部分替换为指定格式的给定日期时间。
更好的是,我会为 OnFilterRecord 事件编写一个处理程序。
我将 Delphi 10.2.3 Tokyo
与 FireDac
一起使用,并设置与 SqlServer(2016)
数据库的连接,当我在查询中设置过滤器 Date_Document
字段时,我得到"could not parse SQL timesamp string"异常。
顺便说一句:Date_Document
的数据类型是 datetime
。
procedure TfrmMain.fltDateEdt2Change(Sender: TObject);
var dat1,dat2:TSQLTimeStamp;
begin
if (fltDateEdt1.Text<>' / / ') and (fltDateEdt2.Text<>' / / ') then
begin
if fltDateEdt1.Date<fltDateEdt2.Date then
try
dat1:=DateTimeToSQLTimeStamp(fltDateEdt1.Date);
dat2:=DateTimeToSQLTimeStamp(fltDateEdt2.Date);
comps.qryMain.Filter:=format('%s>= %s AND %s<=%s', ['DATE_DOCUMENT',SQLTimeStampToStr('YYYY-MM-DD',dat1).QuotedString,'DATE_DOCUMENT',SQLTimeStampToStr('YYYY-MM-DD',dat2).QuotedString]);
comps.qryMain.Filtered:=true;
except
end;
end
else
begin
comps.qryMain.Filtered:=false;
comps.qryMain.Filter:='';
end;
end;
我会使用你提到的 escape sequences in such case. Like for example (assuming that DATE_DOCUMENT column is of DATETIME 数据类型):
comps.qryMain.Filter := Format('DATE_DOCUMENT >= {dt %s 00:00:00} AND DATE_DOCUMENT <= {dt %s 23:59:59}', [
FormatDateTime('yyyy-mm-dd', fltDateEdt1.Date),
FormatDateTime('yyyy-mm-dd', fltDateEdt2.Date)
]);
制作这样的过滤器字符串的目的是让 FireDAC 将描述的日期时间格式转换为 DBMS 的本机格式,只需将日期部分替换为指定格式的给定日期时间。
更好的是,我会为 OnFilterRecord 事件编写一个处理程序。