Моя проблема возникает в среде Win10 / Access 2013 + Excel с VBA и SQL.
(Если имеет значение, это простой пользовательский файл «App.xlsm» вместе с «Bdd .accdb»). "цель которого в основном заключается в том, чтобы быть" создателем архива "с параметрами обновления.)
Я пытаюсь автоматически вставлять записи в таблицу.
Это должно выполняться в отношении таблицы [Heures], принимающей все ОТ [Personnes] .PK_KEY (nn) и один уникальный идентификатор FROM [Jours] .PK_KEY одинаковы для всех (n-1). И это каждый раз, когда новая запись INSERT INTO [Jours] (надежно). По некоторым причинам я не хотел TRIGGER SQL Query из «внутреннего» приложения (Excel), я бы лучше попытался сделайте его TRIGGER автоматически в .accdb. Если я не смогу заставить его работать, у меня останется первый действительно плохой вариант IMO.
До сих пор я пытался заставить его работать с:
- SQL TRIGGER , Не работает с Access.
-Доступ к макрокоманде данных AfterInsert. Вы не можете выполнить операцию вставки в условии для всех записей
- Доступ к макросу данных Access AfterInsert + DefLocalVar в качестве триггера VBA. БД заблокирован, когда я нахожусь в вызываемом модуле VBA.
Я расстраиваюсь, потому что я действительно мало знаю о Access, но у меня есть некоторые основы в SQL и VBA, которые не позволяют мне найти правильный обходной путь. На мой взгляд, со стандартным SQL TRIGGER + TRANSACTION.BEGIN / COMMIT это было бы сделано в 1 се c.
Код
***********************************************************************************************************************************************************
________________________M O D U L E G E S T I O N I N T E R F A C E V B A. ACCESS <-> SQL. ACCESS______________________________________________________'
'***********************************************************************************************************************************************************'
Option Compare Database
Option Explicit
Public myCollection_sender_FK As Object
Public sender_PK As String
'VBAFunction
***********************************************************************************************************************************************************'
Public Function VBAFunction(fVal As String) As String
Select Case (fVal)
'________
Case "commit"
Dim con As DAO.Database
Call TransactionDemo
Debug.Print "VBAFunction : " & Chr(34) & "worked" & Chr(34)
VBAFunction = "worked"
'________
Case Else
If sender_PK = ""[enter image description here][1] Then
sender_PK = fVal
Set myCollection_sender_FK = New Collection
Debug.Print "VBAFunction sender_PK: " & Chr(34) & sender_PK & Chr(34)
Else
myCollection_sender_FK.Add (CInt(fVal))
Debug.Print "VBAFunction myCollection_sender_FK: " & Chr(34) & myCollection_sender_FK.Count & Chr(34)
End If
VBAFunction = CInt(fVal)
'________
End Select][1]
'TransactionDemo`
'***********************************************************************************************************************************************************'
Public Sub TransactionDemo()
Dim myItem As Variant
Dim tmpF1 As Integer: tmpF1 = sender_PK
Dim tmpF2 As Integer
Dim strSQL As String
DAO.DBEngine.BeginTrans
On Error GoTo tran_Err
For Each myItem In myCollection_sender_FK
tmpF2 = myItem
strSQL = "" _
& "INSERT INTO [Heures] ([jid], [pid]) " _
& "VALUES (" & tmpF1 & ", " & tmpF2 & ");"
Debug.Print "strSQL: " & strSQL
CurrentDb.Execute strSQL, dbFailOnError
Next
DAO.DBEngine.CommitTrans
Exit Sub
tran_Err:
DAO.DBEngine.Rollback
MsgBox "Transaction failed. Error: " & Err.Description
End Sub
В режиме проектирования Под этой таблицей [Heures] (тот, который запускает автоматические вставки
Я создал такой макрос данных
Макрос данных вызвал эту ошибку с этим сообщением