我试图使用一个组合框来选择记录在一个应用程序为自己使用 Delphi 10。4
if cbResultDisplaySelect.ItemIndex = 1 then
begin
d1 := DateTimePicker1.Date;
d2 := DateTimePicker2.Date;
mmdata.labRstQry.Active := false;
mmdata.labRstQry.SQL.Clear;
mmdata.labRstQry.SQL.Add('select * from labs ');
mmdata.labRstQry.SQL.Add('where ldate Between ' + DateToStr(d1) + ' and ' + DatetoStr(d2));
mmdata.labRstQry.SQL.Add(' group by ldate, ltestname order by ltestname, ldate DESC');
mmdata.labRstQry.Active := true;
end else...
它总是返回一个空结果。
如果我在SqliteStudio中的SQL编辑器中编写此代码,它可以工作:
select * from labs where ldate BETWEEN '2022-09-01' and '2022-12-31';
我试过从datetimepicker格式化日期为'yyyy-MM-dd',它也不起作用。一定是我做错了或遗漏了一些很基本的东西
1条答案
按热度按时间egdjgwm81#
在查询中,您应该使用FormatDateTime('yyyymmdd ',d1)。DateToStr(d1)依赖于区域设置,您无法预测它将如何格式化您的日期。你的约会需要报价。
所以最后:QuotedStr(FormatDateTime('yyyymmdd ',d1))
你的代码会像这样:
如果使用QuotedStr和FormatDateTime,则会得到
最好学习如何编写带参数的查询。我还没有测试过,但是你的代码看起来像这样:
参数有时候会有点挑剔,比如不要在一个查询中使用同一个参数两次。