通过Delphi ADO查询查询DBase Date字段时数据类型不匹配

时间:2014-11-28 14:36:15

标签: delphi ado dbase

我正在尝试解决动态生成SQL的过时报告工具中的错误,并且我遇到了一个问题,当生成的SQL从Dbase表中查询Date字段时,我遇到数据类型不匹配错误。 / p>

我设法在一个简单的测试应用程序中复制相同的问题,其中将以下查询加载到TADOQuery并激活。

SELECT *
FROM [QPERFSAL.DBF] QPERFSAL
WHERE  ( QPERFSAL.PERFDATE = '21/01/2014' )

它显然与日期格式有关,但我尝试了很多格式,但我仍然得到错误 例如dd / mm / yyyy,mm / dd / yyyy,yyyy / mm / dd等。

明显的解决方法是使用参数化查询,但由于这是由报告工具动态生成的,我不能使用参数:(

是否有我遗漏的东西,或者我可以在ADO连接中指定日期格式吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

VFP OleDB提供程序我相信还可以识别DATE()函数,您无需担心yyyy-mm-dd或mm-dd-yyyy或dd-mm-yyyy格式。它将构建为正确的日期格式列。

where QPERFSAL.PERFDATE = date( 2014, 1, 21 )

现在,如果“perfDate”列是日期/时间的列,那么您需要使用TTOD()(时间到期函数)基于日期/时间字段的仅日期部分进行比较

where TTOD( QPERFSAL.PERFDATE ) = date( 2014, 1, 21 )

答案 1 :(得分:0)

尝试使用如下:

SELECT *
FROM [QPERFSAL.DBF] QPERFSAL
WHERE  ( DTOC(QPERFSAL.PERFDATE) = '01/21/2014' )

答案 2 :(得分:0)

首先,感谢所有发布的建议。 唉,我尝试过但都没有成功:(

谢天谢地,我在搜索不相关的东西时找到了解决方案。

    SELECT *
    FROM [QPERFSAL.DBF] QPERFSAL
    WHERE PERFDATE = Format('2014/12/06',"YYYY/MM/DD") 

我不确定这会对本地化产生什么影响,但至少我可以让查询立即运行。