Доступ завершается после DoCmd.OpenReport - PullRequest
0 голосов
/ 05 июня 2019

Отчет вызывается из VBA для получения возвращенных записей из сквозного запроса Access.После завершения DoCmd параметры отчета задаются в соответствующих контейнерах меток отчета, устанавливая их свойство .Caption в соответствии с требованиями.Во время этого процесса периодически происходит сбой доступа, что заставляет меня поверить, что отчет не является действительно открытым для получения параметров.Вот подпункт VBA:

Private Sub Report_Open(Cancel As Integer)

    Dim strFromDate     As String
    Dim strToDate       As String
    Dim strWC           As String
    Dim intShift        As Integer
    Dim strSQL          As String

    strFromDate = InputBox("Enter From Date and Time: ")
    strToDate = InputBox("Enter To Date and Time: ")
    strWC = InputBox("Enter Work Center: ")
    intShift = InputBox("Enter Shift: ")

    strSQL = "exec dbo.uspWorkCentreReport_TEST " & "'" & strFromDate & "', " & "'" & strToDate & "', " & "'" & strWC & "', " & intShift & ";"

    CurrentDb.QueryDefs("ptq_uspWorkCentreReport").SQL = strSQL

    DoCmd.OpenReport "rpt_qry_ptq_uspWorkCentreReport", acViewReport

    Me.lblFromDate.Caption = strFromDate
    Me.lblToDate.Caption = strToDate
    Me.lblWC.Caption = strWC
    Me.lblShift.Caption = intShift

End Sub

При возникновении сбоя VBA выделяет Me.lblFromDate.Caption = strFromDate.Если я нажимаю Сброс в VBA или Завершаю в диалоговом окне «Ошибка времени выполнения« 2467 »: доступ прекращается без каких-либо других внешних признаков.Затем Access снова открывается для сохранения скопированного * _Backupx.accdb и открывается со свежей копией .accdb.Кажется, что ошибка является стандартной ошибкой MS: MS Run-time error 2467 Как я уже говорил, отчет прерывистый, и при сбое VB всегда выделяет одну и ту же строку в коде.Как мне зафиксировать происходящее или я могу заставить VB подождать половину полной секунды, прежде чем он попытается записать параметры?

Ответы [ 2 ]

0 голосов
/ 06 июня 2019

Наконец, правильный код был создан.Нажатие кнопки создает strOpenArgs и передает его с .OpenReport.Отчет открывает и разбивает OpenArgs и заполняет соответствующие метки обновленными заголовками.Текстовые поля не будут работать!Вот событие нажатия кнопки:

Private Sub btnPreviewP1_Click()

    If (Me.txtToDateP1 < Me.txtFromDateP1) Then
        MsgBox ("The From Date must occurr before the To Date!")
    End If

    Dim strFromDateHMS  As String
    Dim strToDateHMS    As String
    Dim strSQLP1    As String
    Dim strOpenArgs As String

    strFromDateHMS = Format(Me.txtFromDateP1, "yyyy-mm-dd") & " " & Me.cboFromHourP1 & ":" & Me.cboFromMinuteP1 & ":" & Me.cboFromSecondP1
    strToDateHMS = Format(Me.txtToDateP1, "yyyy-mm-dd") & " " & Me.cboToHourP1 & ":" & Me.cboToMinuteP1 & ":" & Me.cboToSecondP1

    strSQLP1 = "exec dbo.uspWorkCentreReport '" & strFromDateHMS & "','" & strToDateHMS & "','" & strWCP1 & "'," & strShiftP1

    strOpenArgs = Me.RecordSource & "|" & strFromDateHMS & "|" & strToDateHMS & "|" & strWCP1 & "|" & strShiftP1

    ' This line is all that's needed to modify the PT query
    CurrentDb.QueryDefs("ptq_uspWorkCentreReport").SQL = strSQLP1

    DoCmd.OpenReport "rpt_ptq_uspWorkCentreReport", acViewReport, , , , strOpenArgs

End Sub

А вот отчеты _Open:

Private Sub Report_Open(Cancel As Integer)
    Dim SplitOpenArgs() As String
    SplitOpenArgs = Split(Me.OpenArgs, "|")
    Me.lblFromDate.Caption = SplitOpenArgs(1)
    Me.lblToDate.Caption = SplitOpenArgs(2)
    Me.lblWC.Caption = SplitOpenArgs(3)
    Me.lblShift.Caption = SplitOpenArgs(4)
End Sub

Это открывает отчет каждый раз с новыми соответствующими данными, если отчет закрыт доКнопка формы снова нажимается для очередного обновления отчета.Если отчет не закрыт, отчет остается в исходном состоянии и не обновляется новыми данными ... Но это другой вопрос Я собираюсь задать.Спасибо всем.

0 голосов
/ 05 июня 2019

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

Me.lblFromDate.Caption = strFromDate

Вы должны использовать текстовые поля вместо заголовков.Также вы можете очистить границы, заливки и т. Д. Это текстовое поле будет выглядеть как подпись.

...