У меня проблема с запуском пользовательской функции в базе данных Access. В настоящее время существует процесс для импорта новых данных и назначения внешнего ключа (ENTRY_ID) -1 для всех новых строк. Отдельный процесс выполняется для замены -1 на следующее число в последовательной последовательности.
Это функция:
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'
Похоже, что функция запущена только один раз для всей группы. Я могу заставить его запускаться несколько раз, подавая данные из полученного набора данных, но затем, если я прокручиваю данные, он будет запускать функцию каждый раз, когда строка перерисовывается на экране.
Это мой многословный способ спросить, есть ли лучший способ добиться того, чего я добиваюсь. Я предполагаю, что должно быть, потому что это кажется слишком сложным.