【问题标题】:FDQuery parametres in Delphi 10 seattleDelphi 10 西雅图中的 FDQuery 参数
【发布时间】: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


【解决方案1】:

我最好的猜测是,驱动程序拒绝您的查询,因为您使用了 "(引号)字符串转义。例如 FireDAC MS Access 元数据类在内部使用 ' (撇号)转义字符串值。如果我是对的,您将无法使用在 FireDAC 应用程序和 MS Access 中可执行的字符串常量编写 SQL 查询,因为对于 FireDAC,您将编写这样的查询(撇号必须在 Delphi 代码中转义):

SELECT DatePart(''d'', Vente.DateDebut) FROM Vente

这是 MS Access 无法理解的。它需要引号,而这又是 FireDAC 不接受的:

SELECT DatePart("d", Vente.DateDebut) FROM Vente

我不知道有一种方法可以让您为 FireDAC 和 MS Access 编写带有字符串常量的命令。 这应该在 FireDAC 中有效(在 MS Access 中无效):

SELECT * FROM Vente WHERE
({EXTRACT(DAY, Vente.DateDebut)} = :Day) AND
({EXTRACT(MONTH, Vente.DateDebut)} = :Month) AND
({EXTRACT(YEAR, Vente.DateDebut)} = :Year)

在对 MS Access 进行预处理后,它应该会生成如下命令(注意撇号):

SELECT * FROM Vente WHERE
(DATEPART('d', Vente.DateDebut) = :Day) AND
(DATEPART('m', Vente.DateDebut) = :Month) AND
(DATEPART('yyyy', Vente.DateDebut) = :Year)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-09
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多