MS Access VBA Me.Recordset.Findfirst Ошибка выполнения - PullRequest
0 голосов
/ 24 октября 2018

У меня проблема с одним из моих событий vba.

Во-первых, событие срабатывает после внесения изменения в поле, это поле принадлежит форме, которая показывает несколько записей данных из одной таблицы.эта форма находится внутри NavigationPane.

Моя база данных программируется в Access 2016 32bit и будет в основном использоваться нашими работниками на сервере с Access Runtime 2013

Теперь, когда я запускаю событиена моем компьютере все работает как задумано, но на серверной версии Runtime он показывает ошибку, которую я попытаюсь перевести на английский, потому что я в Германии: «Выполнение этой программы не может быть продолжено из-за ошибки времени выполнения»- «Эта программа не может продолжать работать и будет закрыта».

Я уже пытался просмотреть утку, но не смог найти то, что мне нужно, в основном из-за ключевого слова «Время выполнения», имеющего два разных значения в этом контексте.

Вот код:

Private Sub isEnd_AfterUpdate()
Dim isEnd As Date
Dim rs As Recordset
Dim strFind As String
Dim test As Variant

'On Error Resume Next

Set rs = Recordset

With rs
If Not .EOF Then
        isEnd = Me!isEnd
    If Me!isStart > 0 Then
        Me!isDur = (Me!isEnd - Me!isStart) * 24
    End If

    strFind = "IdMa = '" & Me!IdMa & "' and OrderRow = " & Me!OrderRow + 1
    'test = MsgBox(strFind & " - " & rs.Name & " - '" & isEnd & "'", vbOKOnly, "test")
    Me.Recordset.FindFirst (strFind)
    Me!isStart = isEnd
    Me.isEnd.SetFocus
End If
End With
End Sub

Вы можете игнорировать обработку ошибок и MsgBox, которые я пытался использовать дляОтладка.

База данных предназначена для планирования наших процессов, и в этом поле хранится время окончания завершенного процесса, и оно должно вводиться во время начала следующего процесса, чтобы сэкономить немного времени.

Edit1: я должен упомянуть, что я точно определил ошибку до строки:

Me.Recordset.Findfirst (strFind)

, но не могу понять, почему это проблема, точно такая же строка отлично используется в некоторых кнопках в той же форме.

1 Ответ

0 голосов
/ 25 октября 2018

Попробуйте использовать RecordsetClone и не дублируйте имена элементов управления:

Private Sub isEnd_AfterUpdate()

    Dim isEndDate As Date
    Dim rs As DAO.Recordset
    Dim strFind As String
    Dim test As Variant

    'On Error Resume Next

    Set rs = Me.RecordsetClone

    With rs
        If Not .EOF Then
            isEndDate = Me!isEnd
            If Me!isStart > 0 Then
                Me!isDur = (Me!isEnd - Me!isStart) * 24
            End If

            strFind = "IdMa = '" & Me!IdMa & "' and OrderRow = " & Me!OrderRow + 1
           'test = MsgBox(strFind & " - " & .Name & " - '" & isEnd & "'", vbOKOnly, "test")
            .FindFirst strFind
            ' and use the found record for something ..?

            Me!isStart.Value = isEndDate
            Me!isEnd.SetFocus
        End If
        .Close
    End With

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