【问题标题】:Automatically updating/duplicating a table in Microsoft Access with VBA使用 VBA 自动更新/复制 Microsoft Access 中的表
【发布时间】:2012-07-31 03:52:13
【问题描述】:

又回来了!所以我目前正在尝试在按下按钮后以编程方式更新表格(Table2)。我希望 Table2 与另一个表(Table1)完全相似。我正在进行这项工作,因为 Access 不允许双重关系,我需要创建一个。因此,我将有两个包含所有联系信息的表格。

我尝试删除 Table2,然后创建另一个 Table1 副本并将其保存为 Table2。如果 Microsoft Access 没有抛出错误,这是可行的,因为我正在删除已建立关系的表。所以我然后尝试以编程方式删除然后创建适当的关系。然而,事实证明这是一项乏味的练习。对我来说有点太乏味了。

我的下一个想法是创建一个附加查询,它会自动查找两个表之间的差异并相应地更新 Table2。问题是我不知道如何为这样的追加查询构造 SQL 语句。还有一种更简单的方法可以使用我缺少的 VBA 来做到这一点吗?提前感谢您的帮助!

【问题讨论】:

  • 什么是“双重关系”??

标签: sql ms-access vba entity-relationship


【解决方案1】:

没有必要去解决所有这些麻烦。您可以在 MS Access 中拥有双重关系。只需将表添加到关系设计窗口中任意多次,就会得到 Table1、Table1_1、Table1_2 等,但它们都只是 Table1 的别名。您现在可以根据需要添加自联接和任意数量的关系。

像这样:

*People*
PersonID        *People_1*
ManagerID -- >   PersonID

【讨论】:

    【解决方案2】:

    听起来您可以从Table1 追加到Table2 而不会与任何关系发生冲突。如果是这样,您可以清空Table2,然后追加Table1 中的所有行。

    Dim cn As Object
    Set cn = CurrentProject.Connection
    cn.Execute "DELETE FROM Table2"
    

    如果 Table2 包含自动编号字段,请重置其种子值。

    cn.Execute "ALTER TABLE Table2" & vbCrLf & _
    "ALTER COLUMN autonum_fld COUNTER(1, 1)"
    

    然后做追加...

    cn.Execute _
    "INSERT INTO Table2 (autonum_fld, text_field, long_int_field)" & vbCrLf & _
    "SELECT autonum_fld, text_field, long_int_field" & vbCrLf & _
    "FROM Table1;"
    

    ...或者如果两个表结构相同,您甚至不必列出字段名称...

    cn.Execute "INSERT INTO Table2" & vbCrLf & _ 
    "SELECT *" & vbCrLf & _
    "FROM Table1;"
    

    最后...

    Set cn = Nothing
    

    AFAICT,这可以工作。但是,我不了解您的问题的背景细节,例如“Access 不允许双重关系”。所以我可能完全不合时宜。

    【讨论】:

      猜你喜欢
      • 2018-01-14
      • 2016-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-21
      相关资源
      最近更新 更多