Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sqlite 在TFDTable.Filter表达式中使用时未找到DATETIME函数_Sqlite_Delphi_Firedac - Fatal编程技术网

Sqlite 在TFDTable.Filter表达式中使用时未找到DATETIME函数

Sqlite 在TFDTable.Filter表达式中使用时未找到DATETIME函数,sqlite,delphi,firedac,Sqlite,Delphi,Firedac,我正在使用FireDAC和SQLite驱动程序。(德尔福东京10.2.3) 在查询表达式中使用DATETIME效果很好: with Query1 do begin Close; SQL.Text := 'select DATETIME(start_time) from times where ' + 'DATETIME(start_time) >= DATETIME("2019-02-01 00:00:00")'; Open; ....

我正在使用FireDAC和SQLite驱动程序。(德尔福东京10.2.3)

在查询表达式中使用
DATETIME
效果很好:

  with Query1 do
  begin
    Close;
    SQL.Text := 'select DATETIME(start_time) from times where ' +
      'DATETIME(start_time) >= DATETIME("2019-02-01 00:00:00")';
    Open;
    ....
  end;  
但是,如果我尝试将类似的表达式指定给TFDTable.Filter:

tblTimes.Filter := 'DATETIME(start_time) >= DATETIME("2019-02-01 00:00:00")';
tblTimes.Filtered := True;
它会导致以下错误:

[FireDAC][Stan][Eval]-100。找不到列或函数[DATETIME]。提示:如果名称是函数名,则将FireDAC.Stan.ExprFuncs添加到uses子句

注意:FireDAC.Stan.ExprFuncs已在uses子句中

怎么了?这样的表达式可以在Filter子句中使用吗(在D7中使用aducom组件对我来说效果很好)?

试试这个:

tblTimes.Filter := 'start_time >= {dt 2019-02-01 00:00:00}';
tblTimes.Filtered := True;
请阅读以下内容:

在大多数情况下,查询的筛选是在本地用Delphi代码完成的,而不是在数据库引擎中完成的。如果它支持的有限过滤不够,您可以使用OnFilterRecord在您自己的代码中进行过滤。ref:DATETIME()是SQLite函数,因此可以在查询sql中使用。在FD Dataset.Filter中,只能使用FD宏函数,DATETIME()不是内置的宏函数。@Branko存在例外情况-例如,对于实时数据窗口模式下的TFDTable,筛选器表达式将在WHERE子句中传递给数据库引擎(如我在上面链接的文章底部附近所述)@布莱恩:谢谢你的信息。如果您愿意回答,我将接受。使用LDW必须是一个很好的理由,如果您不熟悉LDW的所有限制和建议,请不要使用LDW。一般来说,避免使用FDTable,而是使用FDQuery。不确定这对我有什么帮助。我需要对
start\u time
应用一个函数以获得所需的结果。我假设
start\u time
是TDataSet中的列。什么数据类型是
start\u time
列?它被声明为DATETIMEOK,所以我的答案正是您需要的。不,您不必使用任何函数。对于FireDAC,标记为“{dt}”的值被视为日期时间值。只需尝试并分享您的结果:)不需要通过
OnFilterRecord
事件进行过滤,因为在FireDAC中进行过滤的可能性非常大。此外,它需要一个事件处理程序,而不是将筛选器表达式传递给
DataSet.filter