【问题标题】:How can I append records (specific rows, with multiple (but not all) columns) from one table to another如何将记录(特定行,具有多个(但不是全部)列)从一个表附加到另一个表
【发布时间】:2012-07-15 04:24:46
【问题描述】:

每天有大约 5000 条记录上传到 tblRecordsCurrent,在接下来几天内的某个时间点,当这些记录处理完毕后,需要将它们移动到 tblRecordsHistorical。每条记录都有一个外键DataSetID,将其与上传的日期/时间(父表)联系起来。

如何在 vba 中将 tblRecordsCurrent 的单个 DataSet 从 tblRecordsCurrent 插入 tblRecordsHistorical。我无法插入所有列,因为两个表都包含持久列。

我无法输入整个INSERT INTO tblRecordsHistorical A, B, C, D, E, F...,因为它对于访问 vba 来说太长了。

有什么想法吗?

【问题讨论】:

  • 列的列表怎么会太长?请参阅office.microsoft.com/en-us/access-help/…,它表示它允许 64,000 个字符。您的问题是记录选择而不是列选择?
  • 对于VBA来说太长了,不是语句。 vba 中每行的限制并没有那么高。
  • 不,不是:) 你用过换行符吗?那里有一个限制,但是很容易绕过sSQL=SSQL & " More stuff"

标签: sql ms-access


【解决方案1】:

如果将查询保存在 Access 数据库中,则可以在 VBA 中执行以下方式:

DoCmd.OpenQuery "yourQueryName", acViewNormal, acEdit

或者

CurrentDb.OpenRecordset("yourQueryName")

或者

CurrentDb.Execute "qryAddLoginfoRow"

这允许您在不将查询存储在 VBA 代码中的情况下执行查询。但是您也可以通过VBA 中的查询来执行此操作:

INSERT INTO tblRecordsHistorical (col1, col2...) 
SELECT col1, col2...
FROM tblRecordsCurrent

编辑:

您可以通过将字符串连接在一起来创建一个长 SQL 字符串:

SQLString = "INSERT INTO tblRecordsHistorical (col1, col2...) " & _
            " SELECT ... " & _
            " FROM tblRecordsCurrent "

【讨论】:

  • 我了解如何在 VBA 中执行操作查询,但我需要能够即时指定条件。我已经使用查询生成器创建了 SQL 语句,然后尝试将其复制到 docmd.runsql 中,但它太长了。
  • 避免使用 DoCmd.RunSQL,它会导致你做错事,对连接执行,但这是一个问题。
  • 您是否尝试过将字符串连接在一起? SQLString = SQLString & "更多 SQL" Example of strings in VBA
  • @Remou 我只是将其作为示例。感谢您指出这一点。
  • 在几行上构建 SQL 语句是一种享受,如果你们中的一个可以将其作为可能的答案发布,我将接受它并 UPVOTE 你的两个 cmets...
猜你喜欢
  • 1970-01-01
  • 2018-08-06
  • 2015-04-04
  • 2020-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多