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

时间:2012-07-31 03:52:13

标签: sql ms-access access-vba entity-relationship

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

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

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

2 个答案:

答案 0 :(得分:3)

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

像这样:

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

答案 1 :(得分: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不允许双重关系”。所以我可能完全不合适。