2012-01-12 47 views
4

我在DAO中有一個連接到SQL Server 2008中的鏈接表的代碼。我需要在.AddNew上獲取新創建的自動編號。訪問:在DAO中獲取新創建的自動編號

Set db = CurrentDb 
Set rs = db.OpenRecordset("AuditTrail") 

rs.AddNew 
rs("ActionID") = actionAdd 
rs("dtDateTime") = Now() 
rs("FormName") = frmName 
rs("TableName") = tblName 
rs("RecordID") = actionAdd 
rs("Comment") = Nz(comment, "") 
rs("UserID") = UserIDName 
rs("UsernamePC") = VBA.Environ("USERDOMAIN") 
rs("DomainPC") = VBA.Environ("USERDOMAIN") 
rs("ComputerNamePC") = VBA.Environ("COMPUTERNAME") 
rs.Update 

rs.Close 

如果我rs.Close之前使用rs("AuditTrailID"),則返回1(第一項)。

+0

如果您在記錄集中包含自動編號,那麼您可以在調用更新後讀取該值嗎? – 2012-01-12 17:33:03

+0

記錄集指向lnked表,在這種情況下包括自動編號字段([AuditTrailID])。在rs.update命令後,它總是返回1。 – Rick 2012-01-12 17:55:03

+0

作爲最後的手段,您可以使用剛剛插入的記錄值查詢更新後的表的Id。我確信這就是你想盡量避免做... – 2012-01-12 18:40:10

回答

11

設置Bookmark屬性等於LastModified屬性返回到您剛剛添加的記錄。

編輯:作爲康拉德Frix指出,使用時打開記錄的dbSeeChanges選項:

Set db = CurrentDb 
Set rs = db.OpenRecordset(Name:="AuditTrail", Options:=dbSeeChanges) 

rs.AddNew 
rs("ActionID") = actionAdd 
' ... update additional fields 
rs.Update 
rs.Bookmark = rs.LastModified 
Debug.Print rs("ID") 
rs.Close 
+0

獲取錯誤:「記錄被刪除」。 – Rick 2012-01-12 17:48:17

+0

@RachelHettinger我測試了它,它對我來說工作得很好。所以即使OP有問題,它也可以用於SQL表。 – 2012-01-12 19:34:18

+0

@RachelHettinger我得到相同的錯誤信息。帶有dbSeeChanges選項集。 – Rick 2012-01-13 18:18:50

0

如果要插入到一個SQL Server數據庫,也不會觸發對數據庫是解決方案更好

+0

永遠不要設置觸發器。但是我仍然需要來自程序的一些信息來填充表格。 – Rick 2012-01-13 14:48:55

相關問題