2011-06-27 37 views
4

我有一個Microsoft Access/JET中有一個自動編號字段,它被設置爲增量式,它可以作爲表的主鍵。我需要知道下一個插入記錄的主鍵值是什麼,但我需要知道之前插入的記錄。使用SELECT MAX([ID]) + 1 FROM [TableName];將不起作用,因爲記錄將從表格的末尾例行刪除。 (插入新記錄只是爲了找出價值是不是一種選擇或者。)檢索訪問表的下一個自動編號

我知道,這是很容易 MySQL的使用SHOW TABLE STATUS命令來完成。有沒有什麼能讓我使用ADO,DAO,VB6或其他可用工具來完成Access/JET的完全相同的事情?

+2

我想你並不需要事先知道這個數字。你爲什麼認爲你這樣做? –

+3

我覺得有趣的是,有些人更喜歡問你爲什麼需要某些東西而不是回答問題。 – HK1

+2

爲什麼有人浪費時間回答一個毫無意義的問題?也就是說,爲什麼我應該解釋如何做一些沒有人應該做的事情呢?代理人PK值不應該有任何意義,所以你不應該關心下一個值會是什麼。如果你關心,那麼你應該自己管理這個領域的值,而不是依靠數據庫引擎來分配它們。當然,當我發佈我的評論時,如何找出種子價值的答案已經發布,所以我沒有理由發佈答案! –

回答

6

您可以使用ADOX(Microsoft ADO Extensions for DDL and Security)來確定您的自動編號字段的當前值「Seed」的值。

Public Function NextAutonumber(ByVal pTable As String, _ 
     ByVal pAutonumField As String) As Long 

    Dim cat As Object 
    Set cat = CreateObject("ADOX.Catalog") 
    Set cat.ActiveConnection = CurrentProject.Connection 
    NextAutonumber = cat.Tables(pTable).Columns(pAutonumField).Properties("Seed") 
    Set cat = Nothing 
End Function 

注意:此方法可以給出錯誤的結果在一個多用戶的情況......如果另一個用戶可以在時間與您檢索下一個自動編號和你實際做你的潛行INSERTINSERT。如果這很關鍵,可以通過在INSERT之後檢查SELECT @@Identity來驗證您是否得到了您期望的值。

+0

什麼是** CurrentProject.Connection ** ?? –

1

與SQL Server的標識列或MySQL的AUTO_INCREMENT列相比,Access中的自動編號功能非常有限。 沒有辦法檢索到使用不準確的SQL的下一個可用數字。正如你所說,從那末刪除的記錄將使得最高的數字和下一個數字不匹配。(請參閱下面的編輯)。

我認爲你最好使用長數字段(而不是自動編號)並創建自己的自動遞增功能,以便在插入新記錄時使用。

編輯:
我看到HansUp實際上已經找到了一種方法做你問什麼。請看他的解決方案。

+0

這就是我最終做的。 –

1

我最初同意HK1的解決方案來做你自己的解決方案,但漢斯找到了更好的解決方案。

我打算建議通過在具有回滾的trasaction中插入一條記錄來查找ID。問題是,你會得到下一個數字(例如:62),但是當你實際添加新記錄時,你會在那之後得到ID(63)。修復將重置值到下一個可用數字。

只是好奇,爲什麼你需要知道這個數字?如果您有需要此值的記錄(紙張或其他),則應在實際輸入記錄後將其輸入該系統/文書工作中。

相關問題