将数据保存到表中,然后检索自动编号以保存到另一个表

时间:2013-07-23 16:28:59

标签: sql vba ms-access

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

我有两个表:一个存储客户信息(CustMaster)和一个存储RMA信息(RMAMaster)。这两个表中的CustNbr字段通过Relationships链接。当我将数据插入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

我从How to retrieve autonumbered field via ADODB找到了“SELECT @@ Identity”查询,但在该答案中没有关于如何将其成功应用于我的情况的真实背景。

在我的“生成RMA”的OnClick事件中使用上面的代码给出了一个错误“Object Required”,但没有引用错误的位置。数据将保存到CustMaster表中,但RMAMaster表中不会显示新数据。

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

任何人都可以协助我可能会遗失或在哪里?希望我有道理。

提前谢谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

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

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

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