gpt4 book ai didi

delphi - Delphi 10 西雅图中的 FDQuery 参数

转载 作者:行者123 更新时间:2023-12-02 05:31:22 25 4
gpt4 key购买 nike

我有这个查询:

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] Too few parameters. 3 Expected ...

有什么问题吗?我该如何解决这个问题?

更新:

这似乎是 DatePart () 函数中的问题,因为我也尝试了这个:

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

它给了我同样的错误,只是“3 Expected ...”变成了“1 Expected ...”。

最佳答案

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

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

这是 MS Access 无法理解的。它需要引号,而这对于 FireDAC 来说是 Not Acceptable :

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)

关于delphi - Delphi 10 西雅图中的 FDQuery 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44847507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com