1

我目前正在尝试从已插入一些数据的表中检索 AutoNumbered 值,以便可以使用 AutoNumber 插入另一个表。

我有两张表:一张存储客户信息 (CustMaster),另一张存储 RMA 信息 (RMAMaster)。这两个表中的 CustNbr 字段通过关系链接。当我将数据插入 CustMaster 表时,CustNbr 字段是一个自动编号,递增 1。当我将数据插入 RMAMaster 表时,RMANbr 字段作为自动编号递增 1。

我有一个表单,用户在其中输入新客户的信息(如果客户是“新客户”,即不在数据库中),然后单击一个名为“Generate RMA”的按钮,它将新客户保存到 CustMaster 表中(公司名称、地址、城市、州、邮编、国家)并将 RMA 信息保存到 RMAMaster 表(生成日期、生成 RMA 的人的姓名首字母、任何注释和 CustMaster 表中的 CustNbr)。

如果客户是新客户,我必须从我创建的 CustMaster 条目中获取 AutoNumber CustNbr 并将其插入 RMAMaster 表以链接两者,但我不知道如何成功地做到这一点。我尝试了以下代码但没有成功:

DoCmd.RunSQL ("INSERT INTO [CustMaster] (fcompany,fmstreet,fcity,fstate,fzip,fcountry) VALUES ('" & Me.CustName & "','" & Me.CustAddr & "','" & Me.CustCity & "','" & Me.CustState & "','" & Me.CustZip & "','" & Me.CustCountry & "')") 'Insert the customer information into the CustMaster table
RetCustNbr = oConn.Execute("SELECT @@Identity")(0) ' (hopefully) grab the last autonumber from the CustMaster table so that we can insert it into the RMAMaster table
DoCmd.RunSQL ("INSERT INTO [RMAMaster] (Initials,DateIssued,CustNbr,ContactFirst,ContactLast,ContactEmail,Notes) VALUES ('" & Me.Initials & "','" & Today & "','" & RetCustNbr & "','" & Me.ContactFirst & "','" & Me.ContactLast & "','" & Me.ContactEmail & "','" & Me.RMANotes & "')") ' Insert data into the RMAMaster table
RetRMANbr = oConn.Execute("SELECT @@Identity")(0) ' (hopefully) grab the last AutoNumber RMANbr so that I can display it to the user
Me.RMANbr = RetRMANbr ' Set the Retrieved AutoNumber RMANbr from the table and query above and set a field on the form to it so that the user can see it and give it to the customer

我从如何通过 ADODB 检索自动编号字段中找到了“SELECT @@Identity”查询,但该答案中没有关于如何将其成功应用于我的情况的真正上下文。

在我的“生成 RMA”的 OnClick 事件中使用上面的代码会给我一个错误“需要对象”,但没有提及错误可能在哪里。数据会保存到 CustMaster 表中,但 RMAMaster 表中不会出现新数据。

我在 Windows XP 机器上使用 Access 2003。我没有更改我的任何默认引用,它在 ActiveX 数据对象库之前列出了 DAO 对象库。

任何人都可以帮助我可能会丢失什么,或者在哪里?希望我有点道理。

先感谢您。

4

2 回答 2

1

您可以SELECT @@IDENTITY使用如下代码调用 DAO:

Option Compare Database
Option Explicit

Sub test()
Dim cdb As DAO.Database, rst As DAO.Recordset, newID As Long
Set cdb = CurrentDb
cdb.Execute "INSERT INTO Users (Email) VALUES (""gord@example.com"")", dbFailOnError
Set rst = cdb.OpenRecordset("SELECT @@IDENTITY", dbOpenSnapshot)
newID = rst(0).Value
rst.Close
Set rst = Nothing
Set cdb = Nothing
Debug.Print newID
End Sub
于 2013-07-23T17:08:48.283 回答
1

有 3 种方法可以检索最后插入的 Id

1)SELECT IDENT_CURRENT('Table_Name') 检索最后一个身份

2) 插入 Table_Name 值('ABC'...); 选择@@身份

3)SELECT SCOPE_IDENTITY() -- 给出last Last插入表中最后插入行的ID

于 2013-07-23T18:33:29.787 回答