【发布时间】:2014-07-10 20:35:04
【问题描述】:
我正在尝试在 access 2007 中编写 VBA,它通过一个表并使用适当的测试代码获取所有记录,并将它们添加到专门用于该测试代码的表中。第一个 sql 字符串应该通过特定于代码的表来查找输入的最新日期。第二个 sql 字符串应该找到在该日期的最晚时间输入的那个。第三个应该采用该日期和时间并从通用表中获取自上次更新以来输入的该测试代码的所有记录,并将它们移动到特定于代码的表中。
我实际上是使用查询向导生成前两个 sql 语句,但我一直收到错误:
RunSQL 操作需要一个由 SQL 语句组成的参数。
复制粘贴 SQL 语句后,我唯一更改的是添加了正确的引号之类的东西,所以我不确定为什么它不起作用。这也意味着我无法检查后面的代码,因为我无法通过第一部分。
我的问题是,如果我从向导中复制并粘贴它,怎么会出错?以下是我的代码部分。我正在使用消息框来阅读并检查 SQL 语句是否有问题。
dateSQL = "SELECT Max(tbl505.TESTDATE) AS MaxDATE " & _
"FROM tbl505 " & _
"HAVING (([tbl505].[Plant]='Freeport'));"
MsgBox (dateSQL)
DoCmd.RunSQL dateSQL
timeSQL = "SELECT Max(tbl505.TESTTIME) AS MaxTIME " & _
"FROM tbl505 " & _
"HAVING (([tbl505].[Plant]='Freeport')) AND (([tbl505].[TESTDATE]= #" & MaxDATE & "#;"
MsgBox (timeSQL)
DoCmd.RunSQL timeSQL
strSQL = "INSERT INTO tbl505 (ORDERNO,CODE,BATCHNO,TESTNO,TESTDATE,PRODDATE,TESTTIME) " & _
"SELECT ORDERNO,CODE,BATCHNO,TESTNO,TESTDATE,PRODDATE,TESTTIME " & _
"FROM DSResultFRP " & _
"WHERE DSResultFRP.[TESTDATE] >= #" & MaxDATE & "# AND DSResultFRP.[TESTDATE] > #" & MaxTIME & "# AND DSResultFRP.[TESTCODE] = '505'"
DoCmd.RunSQL strSQL
【问题讨论】:
-
您最好使用 CurrentDb.Execute 或更好的是 CurrentDb 的实例并添加 dbFailOnError。使用即时窗口 (ctrl+g) 和 debug.print 查看您的 SQL。前两个查询有什么意义,您似乎没有对它们做任何事情?
-
我正在尝试使用前两个来设置我在第三个中使用的最大日期和最大时间变量来对记录进行排序。可能有更好的方法来做到这一点,但我对使用 SQL 还是很陌生。
标签: sql ms-access vba ms-access-2007 wizard