Ошибка выполнения 3246 при использовании Form.Requery - PullRequest
0 голосов
/ 07 июня 2018

В настоящее время я работаю с базой данных доступа, работающей как система очередей, которая имеет форму, показывающую клиентам, когда их номер вызывается и на каком счетчике.Чтобы только один компьютер отображал форму, а для использования базы данных нужны четыре компьютера, я создал подчиненную форму «CommandRequest» с текстовыми полями: команда, запрос и включение.Он имеет интервал таймера 2500. В событии On Timer я заставил его сделать следующее:

Private Sub Form_Timer()
Dim rst As Recordset
'Dim read As Object
'Set read = CreateObject("sapi.spvoice")
Set rst = CurrentDb.OpenRecordset(Name:="CR_List", Type:=RecordsetTypeEnum.dbOpenDynaset)

If command = 1 Then
Dim currdigitD, currletterposD, currnumD, currletterD, currfullD, currlenD, extrazerosD
DoCmd.SetWarnings False

currdigitD = DLookup("[current_digitD]", "current_digitD")
currletterposD = DLookup("[letter_positionD]", "current_letterD")
currnumD = DLookup("[current_numberD]", "current_numberD")
currletterD = DLookup("[current_letterD]", "current_letterD")

If currnumD < 9999 Then
' increase currnum
    DoCmd.OpenQuery "increase_current_numberD"

    currnumD = DLookup("[current_numberD]", "current_numberD")


Else
' set currnum back to 0
' increase digit
' increase letter

    DoCmd.OpenQuery "increase_current_numberD"
    currnumD = DLookup("[current_numberD]", "current_numberD")

    DoCmd.OpenQuery "increase_digitD"
    currdigitD = DLookup("[current_digitD]", "current_digitD")
    If currdigitD = 0 Then
        DoCmd.OpenQuery "increase letterD"
        DoCmd.OpenQuery "update letterD"
        currletterD = DLookup("[current_letterD]", "current_letterD")
    End If

End If

DoCmd.SetWarnings True

' field on form = current letter & current digit & current number

currlenD = Len(Trim(Str(currnumD)))
If currlenD = 3 Then
    extrazerosD = "0"

End If

currfullD = currletterD & Trim(Str(currdigitD)) & extrazerosD & Trim(Str(currnumD))
Forms![FrmPassport]![CURNUM] = currfullD

If Request = 2 Then
    Forms![FrmPassport]![CURCOUNTER] = 2
    Forms![FrmPassport]![Counter2Num] = Forms![FrmPassport]![CURNUM]
    'read.speak "Information Lane. Number," & Forms![FrmPassport]![CURNUM] & "please proceed to counter 2."
    DoCmd.RunCommand acCmdDeleteRecord
    Form.Refresh
    Me.enable = 1

ElseIf Request = 3 Then
    Forms![FrmPassport]![CURCOUNTER] = 3
    Forms![FrmPassport]![Counter3num] = Forms![FrmPassport]![CURNUM]
    read.speak "Information Lane. Number," & Forms![FrmPassport]![CURNUM] & "please proceed to counter 3."
    DoCmd.RunCommand acCmdDeleteRecord
    Form.Refresh
    Me.enable = 0

ElseIf Request = 5 Then
    Forms![FrmPassport]![CURCOUNTER] = 5
    Forms![FrmPassport]![Counter5Num] = Forms![FrmPassport]![CURNUM]
    read.speak "Information Lane. Number," & Forms![FrmPassport]![CURNUM] & "please proceed to counter 5."
    DoCmd.RunCommand acCmdDeleteRecord
    Form.Refresh
    Me.enable = 0

Else

End If




ElseIf command = 4 Then
If enable = 1 Then
    DoCmd.GoToRecord , "", acNext

Else
    If (Not (rst.EOF) And Not (rst.BOF)) Then
        Form.Requery
        Form.Refresh
    End If
    Me.enable = 1
End If

Else
 Me.enable = 0
 DoCmd.GoToRecord , "", acFirst
 Form.Refresh

End If


End Sub

Приведенный выше код прекрасно работает с двумя или более записями, добавленными до открытия формы, однако при добавленииновые записи во время выполнения кода, я получаю «Ошибка 3246 Операция не поддерживается в транзакциях», когда я пытаюсь отладить, он выделяет «Form.Requery».Есть ли решение для этого?

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