我几天来一直在寻找解决方案但在任何地方找不到任何东西。我让Excel与Access数据库进行交互。以下查询适用于Access:
SELECT DISTINCT A.Timestamp, A.Identifier, A.Remarks, A.ActiveIndicator,
A.S4PDate, B.Timestamp, B.Identifier, B.Remarks, B.ActiveIndicator, B.S4PDate
FROM AAEPData AS A INNER JOIN AAEPData AS B ON A.Identifier = B.Identifier
WHERE (((A.Timestamp = '20131028' AND B.Timestamp = '20131014'))
AND ((datediff('d', A.S4PDate, B.S4PDate)) <> 0))
ORDER BY A.Identifier;
问题是如何将其转换为“VBA-SQL”。它应该看起来像这样,但我遇到了日期的部分问题。如何正确地在几天内移交间隔?这是我的VBA代码:
sql = "SELECT DISTINCT A.Identifier, A.Remarks, A.ActiveIndicator, A.S4PDate,"
sql = sql & " B.Identifier, B.Remarks, B.ActiveIndicator, B.S4PDate "
sql = sql & "FROM AAEPData AS A "
sql = sql & "INNER JOIN AAEPData AS B ON ((A.Identifier = B.Identifier))"
sql = sql & "WHERE (((A.Timestamp = '20131028' AND B.Timestamp = '20131014')) "
sql = sql & "AND (Datediff('d', A.S4PDate, B.S4PDate) <> 0))) "
sql = sql & "ORDER BY B.Identifier ASC;"
当我这样做时,它不会返回值,但也不会出错。我肯定会对我要查询的日期值S4PDate进行更改。有任何想法吗?非常感谢您的帮助。感谢。
答案 0 :(得分:2)
在SQL变量完成后,添加以下行:
Debug.Print sql
完整的SQL将出现在立即窗口中。将其粘贴并作为Access中普通查询(而不是VBA)的基础粘贴。查看查询是否运行。
我看到了一个缺陷 - 你需要在一行末尾有一个空格,如下所示:
"FROM AAEPData AS A INNER JOIN AAEPData AS B ON ((A.Identifier = B.Identifier)) "
如果在修复测试查询仍然失败后,请简化查询。省略DateDiff()
的使用。把它归结为运行的东西。然后重新构建,根据需要进行更正。这是normal trouble shooting procedure。