【发布时间】:2017-12-04 11:24:54
【问题描述】:
我有这个问题:
SELECT * FROM Vente WHERE
(DatePart ("d", Vente.DateDebut)=01) and
(DatePart ("m", Vente.DateDebut)=06) and
(DatePart ("yyyy", Vente.DateDebut)=2017);
此查询在 MS Access 2010 中运行良好,但是当我尝试从 TFDQuery 组件执行它时,它给了我一个错误:
[FireDAC][Phys][ODBC][Microsoft][Pilote ODBC Microsoft Access] 参数太少。 3 预计 ...
有什么问题?我该如何解决?
更新:
这似乎是 DatePart () 函数中的问题,因为我也尝试过这个:
SELECT DatePart ("d", Vente.DateDebut) FROM Vente
它给了我同样的错误,只是“3 Expected ...”变成了“1 Expected ...”。
【问题讨论】:
-
我没有发现任何问题。是物理驱动程序抛出该异常吗?顺便提一句。要通过常量日期值过滤更好地使用表达式like this,您也可以在
WHERE子句中使用它。我的意思是,类似WHERE DateValue(Vente.DateDebut) = {d 2017-06-01}。或者对于所有受支持的 DBMS 更好,WHERE {CONVERT(Vente.DateDebut, DATE)} = {d 2017-06-01} -
您能否检查一下返回查询对象的
Text属性的内容?这是发送到 DBMS 的命令。我猜你会得到同样的命令。如果是这样,也许驱动程序不接受"转义并期望'。 -
@Victoria 我试试你的,但它给出了一个 synthax 错误,当我写
showmessage(FDVente.SQL.Text);时,命令就在问题中 -
我的意思是
FDVente.Text。对于提议的子句,您必须启用宏扩展属性(默认情况下)。当然,这样的查询在 DBMS 管理工具中是不可执行的。但这是统一的代价。 -
你在这个话题上有什么进展吗?我仍然想知道可能是什么问题。查询似乎很好,所以我唯一能想到的就是使用的驱动程序的转义
"char。另外,我想知道为什么这些宏不起作用。
标签: delphi ms-access ms-access-2010 delphi-10-seattle firedac