2011-07-25 80 views
0

我試圖做類似的查詢如下:在MS Access中執行查詢時如何保留主鍵的自動編號?

Dim rs As RecordSet 
Dim NewPrimaryKey as Long 

Set rs = Currentdb.OpenRecordset("SELECT * FROM MyTable WHERE MyPrimaryKey Is Null;") 

With rs 
     .AddNew 
     NewPrimaryKey = !MyPrimaryKey 
     !DateValue = Now() 
     ... 
     .Update 
End With 

如何使用,我可以在MS Access 2003中使用JET引擎執行查詢自己做T任何指針將不勝感激。

+0

什麼是主鍵字段類型?它是自動編號嗎?請問http://stackoverflow.com/questions/1628267/autonumber-value-of-last-inserted-row-ms-access-vba幫助? – THEn

+0

目前尚不清楚你在做什麼。在您的代碼中,您將拉取「MyPrimaryKey」字段爲空的所有記錄。然後,您將您的新主鍵字段設置爲MyPrimaryKey的值,我相當肯定在每種情況下都是空值。這是你的意圖嗎? –

+0

對不起,延遲響應,你是正確的,直到將NewPrimaryKey設置爲空。雖然這看起來正在發生,但由於!MyPrimaryKey是一個自動編號,它會將自動遞增的!MyPrimaryKey值添加到NewPrimaryKey字段中。 –

回答

2

您可以使用兩條SQL語句來實現我想要的結果。首先是INSERT。然後「SELECT @@ Identity」獲取最後添加的自動編號值。使用兩個SQL語句爲數據庫連接使用對象變量。

Dim db As DAO.Database 
Dim NewPrimaryKey As Long 
Dim strInsert As String 

strInsert = "INSERT INTO MyTable ([DateValue])" & vbCrLf & _ 
    "VALUES (Now());" 
Set db = CurrentDb 
db.Execute strInsert, dbFailOnError 
NewPrimaryKey = db.OpenRecordset("SELECT @@Identity")(0) 
Debug.Print NewPrimaryKey 
Set db = Nothing 

我把方括號中的字段名DateValue括起來,因爲它是一個保留字。

編輯:如果您使用一條SQL語句插入多條記錄,則SELECT @@ Identity仍會爲您提供最後的自動編號。這是通過該連接實例進行插入的最後一個自動編號。而且你沒有得到一系列使用的自動編號;只有最後一個。

strInsert = "INSERT INTO MyTable3 ([some_text])" & vbCrLf & _ 
    "SELECT TOP 3 foo_text FROM tblFoo" & vbCrLf & _ 
    "WHERE foo_text Is Not Null ORDER BY foo_text;" 
+0

即使INSERT在多個記錄上執行,這也可以工作嗎?我可以看到它在單個實例中的工作方式,但無法看到它如何同時處理多條記錄。 –