Вставить автоматически в связанную таблицу в среде Access2013 SQL (.accdb) с помощью VBA или (нового) макроса данных (конструктор) или? - PullRequest
0 голосов
/ 16 февраля 2020

Моя проблема возникает в среде 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] (тот, который запускает автоматические вставки
Я создал такой макрос данных
Макрос данных вызвал эту ошибку с этим сообщением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...