2011-12-16 72 views
0

我將數據從我的vb.net應用程序插入msaccess數據庫。我們如何獲得msaccess查詢中的最後一個插入記錄

我很困惑的獲取最後插入的記錄添加到表的方式。在MS-SQL中,我們獲得了@@ IDENTITY,但它在MSAccess中並不適用於我。

那麼應該如何獲取最後插入的記錄添加到表中?

+0

你是什麼意思沒有工作?如果您創建了一個對象並針對該對象執行查詢,則可以使用@@ identity。 http://stackoverflow.com/questions/2082427/how-to-retrieve-last-autoincremented-value-in-ms-access-like-identity-in-sql-s,http://stackoverflow.com/questions/ 5942781/select-identity-not-scoped-by-db-object等。 – Fionnuala 2011-12-16 15:56:37

回答

6

實施例:

Dim db As Database 
Set db = CurrentDb 

db.Execute "INSERT INTO Table1 (atext) Values('abc')", dbFailOnError 

Dim rs As dao.Recordset 

Set rs = db.OpenRecordset("select @@identity") 
Debug.Print rs(0) 

它要求有在桌子上自動增量鍵。

-1

擁有數字(甚至自動增加)主鍵總是一個好習慣。然後,您可以隨時選擇MAX,這是最新插入的記錄。

+0

hmm聽起來很有趣...但是如果兩個用戶在運行select語句之前同時插入記錄會怎樣... – KoolKabin 2011-12-16 14:35:42

+0

您不能依賴於自動遞增主鍵而只是唯一的,如果順序很重要,您需要構建您的擁有,然後你爲多個用戶進行各種有趣的工作。 – Fionnuala 2011-12-16 15:58:30

+0

@KoolKabin:存儲創建該記錄的用戶名,以便在「創建者」等於當前用戶的情況下獲得MAX。不理想,但更好。理想的解決方案是遷移到SQL Server Express(它是免費的)。 – HardCode 2011-12-16 16:59:58

0

Access比SQL Server更復雜,因爲訪問不支持在批處理或輸出參數中執行多個語句。

根據MSDN documentation,您需要爲RowUpdated事件添加處理程序。然而,在採取這一措施之前,我會嘗試在事務中包裝插入代碼,然後在事務中執行select @@ identity方法。可能不行,但值得一試。

0

據我所知,MS Access不具備獲取最後添加行的功能。

實際上,我創建了一個自動增量列(反正通常是主鍵)。然後我運行此查詢時,我渴望得到的最後一排表:

SELECT TOP 1 * FROM [Table] ORDER BY [IdColumn] DESC 

它只需以相反的順序ID列排序表中的行和採取的第一個(這是真的表中的最後一行)。

相關問題