Access vba:如何在两个相关表中执行插入?

Posted

技术标签:

【中文标题】Access vba:如何在两个相关表中执行插入?【英文标题】:Access vba: how perform inserts in two related tables? 【发布时间】:2012-02-23 23:49:30 【问题描述】:

这很可能是一个基本问题 - 但我找不到任何关于此的主题,所以我求助于专家!

我有一个表单,我希望在相关表中插入行。父表有一个 Id,它是一个自动编号字段;我需要使用新创建的行的 Id 并将其作为外键插入子表中。我尝试了以下方法:

Dim x As Recordset
Dim newId As Integer

Set x = CurrentDb.OpenRecordset("select * from T")
With x
    .AddNew
    !OtherColumns = SomeValues
    .Update
    newId = .Fields("Id")
End With

因为 Id 是一个自动编号列,所以它被分配了下一个可用的编号 - 在这个 sub 结束后,表包含一个带有自动生成的 Id 的新行。 但变量 newId 不包含为添加的行生成的新 Id 值。相反,它包含记录集中第一行的 Id。

如何检索新 ID?

【问题讨论】:

【参考方案1】:

在您第一次查询之后,您可以运行第二次查询"Select @@Identity" 以获取当前连接中最后一个自动生成的号码,例如(未测试)

Dim rs2 As Recordset
Set rs2 = CurrentDb.OpenRecordset("Select @@Identity")
newId = rs2(0)

【讨论】:

还有一个问题:这是否总是返回在当前子调用中生成的 ID?我正在考虑一个具有多个用户的远程数据库 - 那么可能生成的最新身份可能是另一个用户的子调用中生成的另一个值,甚至可能是另一个表上的另一个值? 它应该返回当前连接中生成的最后一个 Id,所以如果它是多个客户端访问共享数据库你的好,只是不要在我想的 Web 服务器之类的东西上使用它。

以上是关于Access vba:如何在两个相关表中执行插入?的主要内容,如果未能解决你的问题,请参考以下文章

Access 2010 VBA 不保存对字段的更改

大型记录集 (VBA) 的 MS Access 插入慢

使用 vba 将 xls/csv 文件插入到 access 2007 表中

如何在 MS Access VBA 上将文本框注释值输入设置为表格数据插入

VBA Access将数据集中的所有列插入访问表

使用 MS Access VBA 在 .xlsx 文件中插入一行...如何避免损坏文件?