我遇到了在Access數據庫中運行自定義函數的問題。目前,有一個過程用於導入新數據,併爲所有新行分配一個外鍵(ENTRY_ID)爲-1。一個單獨的進程運行,以遞增順序將-1更改爲下一個數字。Access中的用戶自定義函數,只運行一次,而不是每行
這是函數:
Public Function GetNextEntry(table As String) As Double
Dim r As DAO.Recordset
Dim i As Double
Set r = CurrentDb.OpenRecordset("SELECT LAST_ENTRY_ID FROM LAST_ENTRY WHERE TABLE_NM='" & table & "';")
If r.EOF Then
GetNextEntry = -1
Exit Function
End If
i = r![LAST_ENTRY_ID] + 1
r.Edit
r![LAST_ENTRY_ID] = i
r.Update
GetNextEntry = i
Exit Function
GetNextEntry_ERROR:
GetNextEntry = -1
End Function
這是查詢的一個非常簡化的版本:
INSERT INTO DATA
SELECT GetNextEntry('DATA') AS ENTRY_ID, IMPORT.*
FROM IMPORT
我希望能找回什麼會像
ENTRY_ID, NAME, NUMBER
1, 'account 1', '1234567'
2, 'account 1', '1234567'
3, 'account 1', '1234567'
4, 'account 1', '1234567'
5, 'account 1', '1234567'
但我實際上得到
ENTRY_ID, NAME, NUMBER
1, 'account 1', '1234567'
1, 'account 1', '1234567'
1, 'account 1', '1234567'
1, 'account 1', '1234567'
1, 'account 1', '1234567'
看來,該函數如果只對整個組運行一次。通過從結果數據集提供數據,我可以強制它運行多次,但如果我滾動瀏覽數據,則每次將行重新繪製到屏幕時,它都會重新運行該函數。
這是我長期以來詢問是否有更好的方法來完成我所追求的方式。我認爲必須有,因爲這似乎過於複雜。
是否有某些原因您不僅僅使用自動編號字段? – mwolfe02