Оператор вставки не работает с CurrentDB Выполнить в MS Access VBA - PullRequest
0 голосов
/ 15 марта 2020

Я дважды выполнил оператор вставки в коде. Первый раз оператор вставок работает, но второй раз оператор вставок не работает. Я буду сотрудничать со всеми. Код как ниже:

    Private Sub cmdOrder_Click()
    On Error Resume Next

    Dim dbs As DAO.Database, rst As DAO.Recordset, lstID As Integer
    Set dbs = CurrentDb

    If Nz(DCount("[Active]", "tblReview", "[EmpID] = [TempVars]![tmpUserID] And [Active]=-1"), 0) = 0 Then
        dbs.Execute "INSERT INTO tblReview(EmpID, Active, Created, Submitted)" & _
                "VALUES (" & [TempVars]![tmpUserID] & " ,-1, Date(), 0)"
        lstID = dbs.OpenRecordset("SELECT @@IDENTITY")(0)

        'If IsNull(DLookup("ReviewID", "tblReviewDetails", "[EmpID] = " & [TempVars]![tmpUserID] & " And [ReviewID] =" & lstID)) Then
            Set rst = dbs.OpenRecordset("SELECT ActionsAndBehaviors FROM tblReviewItmes WHERE MgtLevel=" & [TempVars]![tmpAccess])
            Do While Not rst.EOF
                dbs.Execute "INSERT INTO tblReviewDetails(ReviewID, ReviewItems, EmpID)" & _
                    "VALUES (lstID , rst!ActionsAndBehaviors, [TempVars]![tmpUserID])", dbFailOnError

                    'Debug.Print rst!ActionsAndBehaviors
                rst.MoveNext
            Loop
        'End If

        rst.Close
        Set rst = Nothing
        Set dbs = Nothing
    End If
End Sub

Ответы [ 2 ]

0 голосов
/ 16 марта 2020

Вторая команда вставки неверна?

dbs.Execute "INSERT INTO tblReviewDetails(ReviewID, ReviewItems, EmpID)" & _
                    "VALUES (lstID , rst!ActionsAndBehaviors, [TempVars]![tmpUserID])", dbFailOnError

должно быть

dbs.Execute "INSERT INTO tblReviewDetails(ReviewID, ReviewItems, EmpID)" & _
            "VALUES (" & lstID & " , " & rst!ActionsAndBehaviors ", " & [TempVars]![tmpUserID] & ")", dbFailOnError

, но, пожалуйста, используйте метод recordset. AddNew для добавления новых записей. Ваш метод очень подвержен дальнейшим ошибкам / SQL Injection

0 голосов
/ 16 марта 2020

Всегда добавляйте MoveFirst перед итерацией:

...
            Set rst = dbs.OpenRecordset("SELECT ActionsAndBehaviors FROM tblReviewItmes WHERE MgtLevel=" & [TempVars]![tmpAccess])
            rst.MoveLast
            rst.MoveFirst
            Do While Not rst.EOF
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...