从一个 Access 数据库复制到另一个 (VBA)

Posted

技术标签:

【中文标题】从一个 Access 数据库复制到另一个 (VBA)【英文标题】:Copy from one Access database to another (VBA) 【发布时间】:2021-11-27 21:25:17 【问题描述】:

我需要帮助才能使用 VBA 将数据从一个 Access 数据库复制到另一个数据库。这些表具有相同的布局,并且都有一个自动编号的主键字段。

我尝试了以下方法:

strSQL = "INSERT INTO [tbl_items] SELECT * FROM  [tbl_items] IN 'C:\temp\itemsdb.mdb';"
CurrentDb.Execute (strSQL)

问题是,如果第一个数据库中的一个主键的值与第二个数据库中的一个相同,则不会复制该记录。 有什么想法吗?

【问题讨论】:

你想让数据库做什么?更新记录?为主键分配新值?还有什么?显然,不可能有两条主键相同的记录,这正是主键的用途。 我希望源数据库的主键值被忽略。由于目标中的 PK 是自动编号,因此应在此处(在目标中)设置键的值。因此,要回答您的问题,应为导入的记录分配一个新值。 那么,干脆不导入主键。列出您要在查询中导入的所有列,而不是使用包含主键的SELECT * 我想知道是否有更好的方法,而不是编写 60 个字段的选择来排除一个。 【参考方案1】:

您甚至不需要 VBA。试试这个方法。

    在“外部数据”选项卡的“导出”组中,单击“访问”。

    提示:您也可以通过右键单击导航窗格中的对象,然后单击导出 > 访问来启动导出过程。

    Access 打开“导出 - Access 数据库”对话框。

    在“导出 - 访问数据库”对话框的“文件名”框中,指定目标数据库的名称,然后单击“确定”。

    如果您不想覆盖目标数据库中同名的现有对象,请在“导出”对话框中更改新对象的名称。

    如果所选对象是表格,请指定是要导出表格的定义和数据,还是只导出定义。

    点击确定完成操作。

如果您确实需要 VBA 解决方案,请回帖,我会提供解决方案。在这种情况下,VBA 似乎有点过头了。

【讨论】:

【参考方案2】:

这是一个我想自动化的过程,因为它经常重复;所以我需要一个 VBA 解决方案。 我找到了我在下面分享的解决方案,以供将来参考。

 Public Sub AppendItems()
    Dim strSQL As String
    Dim fDialog As Object
    Dim pickedFile As Boolean
    
    Set fDialog = Application.FileDialog(3)
    
    With fDialog
     
        .AllowMultiSelect = False
        .Title = "Please select a file to import:"
        .Filters.Clear
        .Filters.Add "Access Databases", "*.MDB"
        
    End With
    
    pickedFile = fDialog.Show
    
    If pickedFile Then
        fPath = fDialog.SelectedItems.Item(1)
    End If
    
    strSQL = "INSERT INTO [tbl_DestinationTable] SELECT [field1], [field2], [etc] FROM [tbl_SourceTable] IN'" & fPath & "';"
    
    DoCmd.RunSQL (strSQL)
    
End Sub

【讨论】:

以上是关于从一个 Access 数据库复制到另一个 (VBA)的主要内容,如果未能解决你的问题,请参考以下文章

VBA - 仅将可见单元格从工作表复制到另一个工作表

VBA根据数据值将数据从主表复制并粘贴到另一个表中

如何将行从一个 Excel 工作表复制到另一个工作表并使用 VBA 创建重复项?

使用 VBA 代码从内部复制 Access 数据库

代码不起作用:使用 vba 将文件从一个目录复制到另一个目录

在 Excel 中将某些特定单元格从一个工作表复制到另一个工作表的 VBA 可能是啥?