2010-11-09 90 views
3

我熟悉MySQL函數LAST_INSERT_ID;是否有類似的功能,通過ODBC執行與MS Access數據庫相同的查詢?從Access獲取最後一個插入ID

在我的具體情況中,我使用PHP + PDO將行插入到Access數據庫中,並且希望知道每個插入操作的最後一個主鍵值。

如果此功能不可用,有沒有其他方法? (不更改數據庫)

謝謝。

回答

5

看來Access 2000或更高版本支持@@IDENTITY屬性。所以,你只需要一個INSERT後,選擇它的價值:

select @@IDENTITY from myTable 

請參閱MSDN鏈接:Retrieving Identity or Autonumber Values

簡而言之:

[...] Microsoft Access 2000或稍後會支持@@ IDENTITY屬性以在INSERT後檢索自動編號字段的值。使用RowUpdated事件,您可以確定是否發生了INSERT,檢索最新的@@ IDENTITY值,並將其放入DataSet中本地表的標識列中。

+1

FROM子句在這裏根本沒有意義。您只能找到數據庫連接的最後一個值。引用的MSDN文章不使用FROM子句:它僅僅是「SELECT @@ IDENTITY」。 – 2010-11-09 22:35:24

1

我從來沒有試圖用php訪問,但有兩個想法浮現在腦海中,第一個很簡單。這就是在插入後從表中簡單地選擇max(id),因爲它是自動遞增的,您將獲得應該是插入值的最高值。其次,你可以嘗試使用odbc_cursor(http://au2.php.net/manual/en/function.odbc-cursor.php)。

1

嘗試在插入後運行「SELECT @@ IDENTITY FROM MyTable」。

+0

不,這裏的FROM子句毫無意義。您只能找到數據庫連接的最後一個值。 – 2010-11-09 22:33:53

+0

感謝您的信息。我很多年來都沒有使用Access – Veign 2010-11-10 00:03:11

2

正如其他人所說,SELECT @@IDENTITY適用於Jet 4和ACE。

Access 2010引入了一個新的考慮因素,這是因爲新的ACE版本支持表級數據宏,這與觸發器相當。因此,一個表中的插入可能會觸發另一個表中的插入,因此@@ IDENTITY可能是第二個表的值,而不是頂級表的值。據我所知,在這種情況下,沒有等同於SQL Server的SCOPE_IDENTITY()。

我在其他Access論壇詢問過它,似乎沒有人知道。如果您使用具有表級數據宏的ACCDB,則需要注意一些事項。