Нажатие кнопки формы открывает отчет о доступе с данными. Параметры используются при сквозном запросе к хранимой процедуре SQL, которая возвращает записи. Отчет не выходит Модал, и я хотел бы, чтобы он оставался таким. Однако если пользователь не закрывает отчет перед тем, как вернуться к форме, и пытается установить новые параметры, отчет остается открытым в фоновом режиме, и после нажатия кнопки отчет выводится на передний план со старыми параметрами и данными и не обновляется. с новыми параметрами / данными.
Один из вариантов - перейти к модальному отчету, но это делает грубые переходы, когда пользователю приходится активно закрывать отчет. Другой вариант - закрыть отчет во время повторных попыток, что я и пытался. Я пробовал:
If CurrentProject.AllReports(rpt_ptq_uspWorkCentreReport).IsLoaded Then
DoCmd.Close acReport, rpt_ptq_uspWorkCentreReport, acSaveNo
в нескольких разных местах: _MousedDown, как первый If в _Click, и _BeforeInsert. Каждый раз, когда CurrentProject.AllReports (rpt_ptq_uspWorkCentreReport) .IsLoaded имеет значение false во время второго прохода, когда отчет находится в фоновом режиме, а форма перерабатывается со следующей попыткой новых параметров. Также во время второй попытки строка .OpenReport завершается с ошибкой SQL, поскольку strSQLP1 является неполным. Вот событие _Click:
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
И _MouseDown, где сейчас находится .AllReports:
Private Sub btnPreviewP1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If CurrentProject.AllReports(rpt_ptq_uspWorkCentreReport).IsLoaded Then
DoCmd.Close acReport, rpt_ptq_uspWorkCentreReport, acSaveNo
End If
End Sub
Это Report_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
Любая помощь будет принята с благодарностью.