首页 文章

使用VBA在Microsoft Access中自动更新/复制表

提问于
浏览
2

再次回来!因此,我正在尝试以编程方式在按下按钮后更新表(Table2) . 我希望Table2与另一个表(Table1)完全相似 . 我正在努力,因为Access不允许双重关系,我需要创建一个 . 因此,我将有两个包含所有联系信息的表格 .

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

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

2 回答

  • 3

    没有必要去解决所有这些问题 . 您 can 在MS Access中具有双重关系 . 只需将表格多次添加到关系设计窗口,就可以得到Table1,Table1_1,Table1_2等等,但它们都只是Table1的别名 . 您现在可以根据需要添加自联接和多个关系 .

    像这样:

    *People*
    PersonID        *People_1*
    ManagerID -- >   PersonID
    
  • 1

    听起来你可以从 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不允许双重关系” . 所以我可能完全不合适 .

相关问题