Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 在DoCmd.OpenReport之后访问异常终止_Vba_Ms Access_Pass Through_Ms Access Reports - Fatal编程技术网

Vba 在DoCmd.OpenReport之后访问异常终止

Vba 在DoCmd.OpenReport之后访问异常终止,vba,ms-access,pass-through,ms-access-reports,Vba,Ms Access,Pass Through,Ms Access Reports,从VBA调用报告以接收从Access传递查询返回的记录。DoCmd完成后,报表的参数将在报表的相应标签容器中设置,并根据需要设置其.Caption属性。在此过程中,访问会间歇性失败,这使我相信报告并没有真正打开以接收参数。以下是VBA子系统: Private Sub Report_Open(Cancel As Integer) Dim strFromDate As String Dim strToDate As String Dim strWC

从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中按Reset或在运行时错误“2467”对话框中按End,则访问abends而不使用任何其他外部符号。Access然后重新打开以保存复制的*\u Backupx.accdb,并打开.accdb的新副本。该错误似乎是标准MS错误:
正如我所说,报告是断断续续的,当它失败时,VB总是在代码中突出显示同一行。如何捕获正在发生的情况,或者如何让VB在尝试写入参数之前等待半秒?

我记得,当报表打开时,无法修改标题。仅在设计模式下。所以这是不正确的,因为您已经打开了报告

Me.lblFromDate.Caption = strFromDate

您应该使用文本框而不是标题。您还可以清除边框、填充等,该文本框将显示为标题。

最后生成了正确的代码集。单击按钮可创建strOpenArgs并将其与.OpenReport一起传递。报告打开并拆分OpenArg,并用更新的标题填充相应的标签。文本框不起作用!以下是按钮单击事件:

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

这会在每次使用新的适当数据打开报表,只要报表在再次按下表单按钮刷新报表之前关闭。如果报表未关闭,则报表将保留原始数据,不会使用新数据刷新。。。但这正是我要问的。谢谢大家。

让用户在表单的控件中输入条件,而不是弹出输入框。然后,让textbox引用表单控件,而不是尝试设置标签标题属性。文本框充当“标签”。否则,必须使用报表格式事件来设置控件属性。Format事件触发器仅适用于PrintPreview或direct to printer。应该有代码来设置表单后面的QueryDefs。您运行此代码的是什么报表?与OpenReport中的相同?为什么您使用的是
inputbox
,而不是访问表单?这不是Excel!
Me.lblFromDate
是否存在?从那个错误消息中,我觉得要么标签不存在,要么您没有正确使用它。在excel用户表单中,这是正确的,但在报告中不太确定。为了调试的目的,你总是可以注释掉docmd,我怀疑这和它有什么关系。Abends?这就是Novell NetWare服务器所能做的。
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