1

現在、オートナンバーを使用して別のテーブルに挿入できるように、少しデータを挿入したテーブルからオートナンバーの値を取得しようとしています。

2 つのテーブルがあります。1 つは顧客情報 (CustMaster) を格納し、もう 1 つは RMA 情報 (RMAMaster) を格納します。これらの両方のテーブルの CustNbr フィールドは、リレーションシップを介してリンクされています。CustMaster テーブルにデータを挿入すると、CustNbr フィールドが 1 ずつ増加するオートナンバー型になります。RMAMaster テーブルにデータを挿入すると、RMANbr フィールドがオートナンバーとして 1 ずつ増加します。

ユーザーが新しい顧客の情報を入力するフォームがあります (顧客が「新規」の場合、つまりデータベースにない場合)、「RMA の生成」という適切な名前のボタンをクリックすると、新しい顧客が CustMaster テーブルに保存されます (会社名、住所、都市、都道府県、郵便番号、国) を作成し、RMA 情報を RMAMaster テーブルに保存します (作成日、RMA を作成した人のイニシャル、メモ、および CustMaster テーブルからの CustNbr)。

顧客が新規の場合、作成した CustMaster エントリから AutoNumber CustNbr を取得し、それを RMAMaster テーブルに挿入して 2 つをリンクする必要がありますが、それをうまく行う方法がわかりません。次のコードを試しましたが、成功しませんでした:

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」クエリを見つけましたが、その回答には、それを私の状況にうまく適用する方法に関する実際のコンテキストはありませんでした。

私の "Generate RMA" の OnClick イベントで上記のコードを使用すると、"Object Required" というエラーが発生し、エラーの場所に関する参照はありません。データは CustMaster テーブルに保存されますが、新しいデータは RMAMaster テーブルに表示されません。

Windows XP マシンで Access 2003 を使用しています。ActiveX Data Objects ライブラリの前に DAO オブジェクト ライブラリをリストするデフォルトから参照を変更していません。

私が行方不明になっている可能性のあるもの、またはどこにあるかについて、誰か助けてもらえますか? うまくいけば、私はいくつかの意味を成しています。

前もって感謝します。

4

2 に答える 2

1

最後に挿入された ID を取得するには 3 つの方法があります

1)SELECT IDENT_CURRENT('Table_Name') 最後の ID を取得します

2)Table_Nameの値に挿入('ABC'...); @@アイデンティティを選択

3)SELECT SCOPE_IDENTITY() -- 最後に最後に挿入されたテーブルに最後に挿入された行の ID を与える

于 2013-07-23T18:33:29.787 に答える
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 に答える