2012-02-23 40 views
1

這可能是一個基本的問題 - 但我無法找到任何線索,所以我轉向專家!訪問vba:如何執行插入兩個相關的表?

我有一個表格中我希望插入相關表中的行的子。父表有一個自動編號字段的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是一個自動編號列,它被分配下一個可用的號碼全部正確的 - 這分結束後,該表中包含一個新行已經自動生成的ID。 但變量newId不包含爲添加的行生成的新Id值。相反,它包含記錄集中第一行的Id。

我該如何檢索新的ID?

回答

2

第一個查詢後,您可以運行第二個查詢"Select @@Identity"得到當前連接的最後一個自動生成的編號,例如(未經測試)

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

完美的作品 - 非常感謝! – Maestro13 2012-02-24 00:06:33

+0

但是還有一個問題:它會一直返回當前子呼叫中生成的Id嗎?我正在考慮一個具有多個用戶的遠程數據庫 - 那麼最近生成的身份可能是另一個用戶的子呼叫中生成的另一個值,甚至可能是另一個用戶的子呼叫中生成的另一個值? – Maestro13 2012-02-24 00:18:44

+0

它應該返回當前連接中生成的最後一個Id,因此如果它是多個客戶端訪問共享數據庫的話,那麼不要在我想的Web服務器上使用它。 – 2012-02-24 01:00:01