将行从一个链接表插入到另一个链接表

Posted

技术标签:

【中文标题】将行从一个链接表插入到另一个链接表【英文标题】:Insert row from one linked table to another 【发布时间】:2013-08-27 13:30:18 【问题描述】:

我在 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

【问题讨论】:

您收到哪些错误? 每次修改代码时都会收到不同的错误。对于上面的代码,我得到一个运行时错误 3061(参数太少。预期为 1)。我的研究表明这是由于查询中的错误,所以我摆脱了查询的 where 部分,并遇到了运行时错误 3155(ODBC--在链接表上插入失败) 【参考方案1】:

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

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

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

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

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

【讨论】:

这似乎使错误平静了很多。表单加载没有错误,但尽管我添加了新记录,但似乎没有做任何事情。我会听取您的建议并与查询设计器一起工作,直到它可以正常工作。谢谢。 表单 Timer 事件可能很棘手。在设计器中使查询正常工作后,首先在另一个过程中测试您的 VBA 代码,例如命令按钮的单击事件。设置断点并按 F8 逐行逐行执行代码,以查看每一步发生(或未发生)的情况。 感谢您的帮助,我的代码完全符合我的要求。我的 OP 编辑​​显示了我的最终代码。 是的,恭喜。我建议您将解决方案从问题移到答案。当系统允许时,你可以接受那个答案而不是我的答案。【参考方案2】:

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

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

你可能不得不走这条路。

【讨论】:

啊,我想是时候学习 ADO 了!感谢您的帮助 =)

以上是关于将行从一个链接表插入到另一个链接表的主要内容,如果未能解决你的问题,请参考以下文章

将行从一个表插入到另一个表中,哪个 sql 更有效(外连接 vs 顺序扫描)

根据 Id [重复] 将行从一个表更新到另一个表

使用 INSERT 查询将行从一个表复制到另一个表 [关闭]

调用触发器时将行从一个表复制到另一个表

sql 将行从一个表复制到另一个表

将行从一个表复制到另一个表