2013-08-27 57 views
0

我在Access中有三个表:一个链接到Excel,一个链接到MySQL,一个名为LastQuery的本地表具有单个行和一列。我在一个带有计时器的窗体中使用VBA查询来从Excel表中选择数据并将其插入到MySQL表中。与此同时,我更新了插入到LastQuery的最后一条记录的dtmInsertedTime(在标题为last的行中),以便下一次表单计时器打勾时,它将从下一条记录继续并继续,直到它插入到每条记录记录。我的代码很简单,但我收到错误,无法按照我所描述的那样工作。这里是我的代码:从一个链接表插入行到另一个

Private Sub Form_Timer() 
CurrentDb.Execute "INSERT INTO tblevent (vchrFacility, intWorkCell, intStn, intEventCode) SELECT vchrFacility, intWorkCell, intStn, intEventCode from excelTblEvent where dtmInsertedTime > LastQuery.Last" 
CurrentDb.Execute "UPDATE LastQuery, excelTblEvent SET LastQuery.Last = excelTblEvent.dtmInsertedTime" 
End Sub 

编辑:

我不能做它没有你们。我的代码不正是我想要它做的,没有任何问题:

Option Compare Database 
Private Sub Form_Timer() 
CurrentDb.Execute "INSERT INTO tblevent (vchrFacility, intWorkCell, intStn, intEventCode) SELECT vchrFacility, intWorkCell, intStn, intEventCode FROM excelTblEvent WHERE dtmInsertedTime > DLookup('Last', 'LastQuery')" 
CurrentDb.Execute "UPDATE LastQuery, excelTblEvent SET LastQuery.Last = excelTblEvent.dtmInsertedTime" 
End Sub 
+1

您收到哪些错误? –

+0

我每次修改代码时都会收到一个不同的错误。对于上面的代码,我得到了运行时错误3061(参数太少,预期1)。我的研究显示它是由于查询中的一个错误,所以我摆脱了查询的哪个部分,并且出现了运行时错误3155(ODBC - 在链接表上插入失败) – Th1nker

回答

0

访问'数据库引擎会抱怨INSERT声明。检查语句的SELECT部分:

SELECT vchrFacility, intWorkCell, intStn, intEventCode 
from excelTblEvent 
where dtmInsertedTime > LastQuery.Last 

WHERE子句引用一个数据源,LastQuery,这是不是FROM子句中提到。这是行不通的。我们需要更多地了解LastQuery,但作为一个胡乱猜测也许这可能工作...

WHERE dtmInsertedTime > DLookup("Last", "LastQuery") 

如果Access埋怨UPDATE声明,在查询设计器重新编译。当你在那里工作后,调整你的VBA代码以使用相同的工作SQL。

+1

这似乎安静了很多错误。表单加载没有错误,但似乎没有做任何事情,尽管我添加了新记录。我会接受你的建议,并与查询设计师一起工作,直到它变得功能正常。谢谢。 – Th1nker

+0

表单计时器事件可能会非常棘手。在设计器中查询正常工作后,请先在另一个过程中测试VBA代码,例如命令按钮的单击事件。设置一个中断点,并用F8逐行扫描代码,以查看每个步骤中(或不在)发生的事情。 – HansUp

+0

感谢您的帮助,我得到了完全按照我的意愿工作的代码。我的OP编辑显示我的最终代码。 – Th1nker

0

从Database.Execute方法帮助部分的说明说,

适用于ODBCDirect工作区没有在Microsoft Office Access 2007支持。如果您想要访问外部数据源而不使用Microsoft Access数据库引擎,请使用ADO。

您可能得走这条路线。

+0

啊,我想这是学习ADO的时间!感谢您的帮助=) – Th1nker

相关问题