0

我在 Access 中有三个表:一个链接到 Excel,一个链接到 MySQL,以及一个名为 LastQuery 的本地表,具有单行和单列。我在带有计时器的表单中使用 VBA 查询从 Excel 表中选择数据并将其插入 MySQL 表中。同时,我更新了dtmInsertedTime我插入到 LastQuery 的最后一条记录(到标题为 的行中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
4

2 回答 2

0

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

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

该子句引用了该子句中未提及WHERE的数据源。那是行不通的。我们需要了解更多关于的信息,但作为一个疯狂的猜测,也许这可能会奏效......LastQueryFROMLastQuery

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

如果 Access 抱怨该UPDATE语句,请在查询设计器中重新构建它。在你让它在那里工作之后,调整你的 VBA 代码以使用相同的工作 SQL。

于 2013-08-27T14:52:55.417 回答
0

Database.Execute Method 帮助部分的注释说,

Microsoft Office Access 2007 不支持 ODBCDirect 工作区。如果您想在不使用 Microsoft Access 数据库引擎的情况下访问外部数据源,请使用 ADO。

你可能不得不走这条路。

于 2013-08-27T14:19:24.567 回答