2015-09-19 92 views
2

我正在嘗試編寫一個函數來檢查庫存表中的最小值,然後生成併發送購買請求(如果該值低於最低級別)。如何獲取SQL插入生成的自動編號

如果符合條件,則運行如下所示的append sql語句。

DoCmd.RunSQL "INSERT INTO [table1]('field 1', 'field 2')" & _ 
      "VALUES ('value 1', 'value 2')" 

鏈接表我追加到使用自動編號字段作爲主鍵,我需要引用它的價值鏈接被請求的各種項目。我不知道如何存儲正在爲新記錄生成的自動編號。我覺得我錯過了一些非常簡單的事情,但是我的搜索都沒有帶來任何東西。

我希望能夠寫下如下所示的第二個聲明,其中包含自動編號值。

DoCmd.RunSQL "INSERT INTO [table2]('ID' , 'field 3')" & _ 
      "VALUES (" & TempVars!autonumber & ", 'value 3')" 
+1

測試此代碼這有很多工作要做與SQL Server比MS Access.so我將標記它如此。 –

+0

@ctall您是否在Access中使用SQL Server?或者標題中的SQL引用Access INS''INSERT'? – HansUp

+0

它是一個Access SQL'INSERT INTO' – ctall

回答

2

使用DAO.Database對象變量來執行您的INSERT,並且當您從SELECT @@identity中獲取值時此處的關鍵是對兩者都使用相同的Database變量。如果您嘗試從CurrentDb(而不是Database對象變量)獲得SELECT @@identity,則檢索的值將始終爲零。

我在Access 2010

Dim db As DAO.Database 
Dim strInsert As String 

Set db = CurrentDb 
strInsert = "INSERT INTO [table1]([field 1], [field 2])" & vbCrLf & _ 
    "VALUES ('value 1', 'value 2')" 
db.Execute strInsert, dbFailOnError 

TempVars.Add "itemNum", db.OpenRecordset("SELECT @@identity")(0).Value 
MsgBox "TempVars!itemNum: " & TempVars!itemNum 
+0

你是凡人HansUp中的上帝。這工作完美無瑕。感謝您的幫助。 – ctall

0

所以事實證明我使用了錯誤的搜索詞。

SELECT @@identity FROM table1應該工作得很好。

事實證明,儘管我仍然需要將@@ Identity作爲變量存儲,以便將來可以在循環中使用sql「insert into」。

下面的代碼片段是我拼湊在一起的,但它告訴我在此集合中找不到recSet!答案。

Dim recSet As DAO.Recordset 
    Set recSet = CurrentDb.OpenRecordset("SELECT @@identity") 

    TempVars.Add "itemNum", recSet!answer 

    recSet.Close 
    Set recSet = Nothing 

我有我的代碼更新到以下

Dim recSet As DAO.Recordset 
Set recSet = CurrentDb.OpenRecordset("SELECT @@identity") 

Dim test As Long 
test = recSet.Fields(0).Value 
Debug.Print test 

recSet.Close 
Set recSet = Nothing 

現在它返回一個值,但該值始終爲「0」。它似乎沒有抓住上一條記錄輸入時生成的自動編號。

+1

即使'SELECT @@ IDENTITY FROM TableName'運行時沒有錯誤,您不應該使用FROM子句,因爲它可能會引起誤解。 'SELECT @@ IDENTITY'作用於會話(連接),而FROM子句被忽略。如果你插入到TableA中,然後INSERT到TableB中,然後執行'SELECT @@ IDENTITY FROM TableA',你將實際得到TableB的AutoNumber值。 'SELECT @@ IDENTITY'總是返回爲當前連接創建的最近的AutoNumber值。 –

+0

超級有用的提示!如果我不得不自己弄清楚,那會導致我陷入循環。 – ctall

+0

我嘗試了你的建議方法,但運行時錯誤'32538':TempVars只能存儲數據。他們不能存儲對象。所以我假設這是試圖存儲爲記錄集而不是作爲值/字符串/變量/ whatnot。 – ctall