gpt4 book ai didi

ms-access - 在MS Access中打开另一个窗体时关闭当前窗体

转载 作者:行者123 更新时间:2023-12-03 08:32:59 24 4
gpt4 key购买 nike

我需要打开一个表单,然后立即关闭。请注意,我的表单有一个onTimer事件过程,该过程每两秒钟发生一次。我知道以下命令:

    DoCMD Close


    DoCMD OpenForm "frmOnError"

它们都可以单独工作,但是当我执行以下操作时:
    DoCMD OpenForm "frmOnError"
DoCMD Close

然后,表格只是闪烁,并且没有关闭。它正在打开的表单本身不是,而是我要打开的表单的名称。同样,如果我注释掉其中任何一行,它都会执行其余行所说的操作。

接下来,我尝试在第一个表单上使用DoCMD OpenForm,并且在另一个表单中有一个if语句,如果打开了第一个表单,它将关闭第一个表单。这很困惑,因为两种形式都有相同的命令,而任何一个击败另一种形式的命令都将执行它。这意味着我无法知道哪种形式将关闭。

我的最后一个变体是在button_clicked子菜单中使用DoCMD OpenForm命令,并在代码下方的Form_Timer部分中使用DoCMD close命令。一旦加载另一个窗体,它就关闭自己,而不是关闭另一个窗体。这比较稳定,但仍然很困惑。

这样,我就没主意了。

代码说明:

代码的重点是关闭第一种形式,这取决于链接表和连接丢失时的错误。这将打开不依赖链接连接的第二种形式,并继续起作用。然后,新表单将具有一个关闭它的按钮,并尝试再次加载第一个表单。两种形式都依靠2秒计时器来模拟来自PLC的恒定随机数据,并且将继续无限期地需要计时器。

最后,以下是代码段的工作顺序:

frmLoop:
Public Sub DoSQL4(vFacility As String, vWorkcell As Integer, vStation As Integer, vEventcode As Integer, vFacilityPath, vFacilityID, vFaultCodeID, vStateCode As Integer)

On Error GoTo ErrorHandler4

Const conLINKED_TABLE As String = "tblevent"

'INSERT INTO LINKED TABLE
CurrentDb.TableDefs(conLINKED_TABLE).RefreshLink

DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO tblevent (vchrFacility, intWorkCell, intStn, intEventCode) VALUES ('" & vFacility & "', '" & vWorkcell & "', '" & vStation & "', '" & vEventcode & "');"
DoCmd.RunSQL "INSERT INTO tblfaultdata (vchrFacilityPath, intFacilityID, intFaultCodeID, intWorkcell) VALUES ('" & vFacilityPath & "', '" & vFacilityID & "', '" & vFaultCodeID & "', '" & vWorkcell & "');"
DoCmd.RunSQL "INSERT INTO tblstate (vchrFacility, intWorkCell, intStn, intStateCode) VALUES ('" & vFacility & "', '" & vWorkcell & "', '" & vStation & "', '" & vStateCode & "');"
DoCmd.SetWarnings True

'INSERT INTO LOCAL TABLE

DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO Local_tblevent (vchrFacility, intWorkCell, intStn, intEventCode) VALUES ('" & vFacility & "', '" & vWorkcell & "', '" & vStation & "', '" & vEventcode & "');"
DoCmd.RunSQL "INSERT INTO Local_tblfaultdata (vchrFacilityPath, intFacilityID, intFaultCodeID, intWorkcell) VALUES ('" & vFacilityPath & "', '" & vFacilityID & "', '" & vFaultCodeID & "', '" & vWorkcell & "');"
DoCmd.RunSQL "INSERT INTO Local_tblstate (vchrFacility, intWorkCell, intStn, intStateCode) VALUES ('" & vFacility & "', '" & vWorkcell & "', '" & vStation & "', '" & vStateCode & "');"
DoCmd.SetWarnings True

Exit_theSub:

DoCmd.OpenForm "frmOnError"

If CurrentProject.AllForms("frmOnError").IsLoaded And Forms!frmOnError.CurrentView <> acCurViewDesign Then
DoCmd.Close
End If

'ERROR HANDLER
ErrorHandler4:

If Err.Number <> 0 Then
Select Case Err.Number
Case 3265
MsgBox "[" & conLINKED_TABLE & "] does not exist as either an Internal or Linked Table", _
vbCritical, "Table Missing"
Case 3011, 3024 'Linked Table does not exist or DB Path not valid
MsgBox "[" & conLINKED_TABLE & "] is not a valid, Linked Table", vbCritical, "Link Not Valid"
Case Else
MsgBox Err.Description & Err.Number, vbExclamation, "Error"
End Select

Resume Exit_theSub

End If

End Sub

然后是frmOnError:
Private Sub btnRetry_Click()

DoCmd.OpenForm "frmLoop"

End Sub

Private Sub Form_Timer()

If CurrentProject.AllForms("frmOnError").IsLoaded And Forms!frmOnError.CurrentView <> acCurViewDesign Then
DoCmd.Close
End If

等等

他们基本上反弹并第四。一旦一个错误处理程序关闭了它,它就会打开另一个窗体,然后关闭自己。如果在其他窗体上按下该按钮,则它将首先打开,然后关闭。

那是理论。我的代码中的某些内容非常错误,我希望你们中的一个可以发现它并指出来。谢谢!

编辑:我更新了代码以响应用户的回答,并用CurrentDb.Execute,dbfailonerror替换了DoCmd.RunSql。现在,我的表单在打开时立即关闭,并且不返回任何错误。
'INSERT INTO LINKED TABLE
CurrentDb.TableDefs(conLINKED_TABLE).RefreshLink

CurrentDb.Execute "INSERT INTO tblevent (vchrFacility, intWorkCell, intStn, intEventCode) VALUES ('" & vFacility & "', '" & vWorkcell & "', '" & vStation & "', '" & vEventcode & "');", dbFailOnError
CurrentDb.Execute "INSERT INTO tblfaultdata (vchrFacilityPath, intFacilityID, intFaultCodeID, intWorkcell) VALUES ('" & vFacilityPath & "', '" & vFacilityID & "', '" & vFaultCodeID & "', '" & vWorkcell & "');", dbFailOnError
CurrentDb.Execute "INSERT INTO tblstate (vchrFacility, intWorkCell, intStn, intStateCode) VALUES ('" & vFacility & "', '" & vWorkcell & "', '" & vStation & "', '" & vStateCode & "');", dbFailOnError

'INSERT INTO LOCAL TABLE

CurrentDb.Execute "INSERT INTO Local_tblevent (vchrFacility, intWorkCell, intStn, intEventCode) VALUES ('" & vFacility & "', '" & vWorkcell & "', '" & vStation & "', '" & vEventcode & "');", dbFailOnError
CurrentDb.Execute "INSERT INTO Local_tblfaultdata (vchrFacilityPath, intFacilityID, intFaultCodeID, intWorkcell) VALUES ('" & vFacilityPath & "', '" & vFacilityID & "', '" & vFaultCodeID & "', '" & vWorkcell & "');", dbFailOnError
CurrentDb.Execute "INSERT INTO Local_tblstate (vchrFacility, intWorkCell, intStn, intStateCode) VALUES ('" & vFacility & "', '" & vWorkcell & "', '" & vStation & "', '" & vStateCode & "');", dbFailOnError

Exit_theSub:

DoCmd.Close

'ERROR HANDLER
ErrorHandler4:

If Err.Number <> 0 Then
Select Case Err.Number
Case 3265
MsgBox "[" & conLINKED_TABLE & "] does not exist as either an Internal or Linked Table", _
vbCritical, "Table Missing"
DoCmd.OpenForm "frmOnError"
Case 3011, 3024 'Linked Table does not exist or DB Path not valid
MsgBox "[" & conLINKED_TABLE & "] is not a valid, Linked Table", vbCritical, "Link Not Valid"
DoCmd.OpenForm "frmOnError"
Case Else
MsgBox Err.Description & Err.Number, vbExclamation, "Error"
DoCmd.OpenForm "frmOnError"
End Select

Resume Exit_theSub

End If

结束子

最佳答案

DoCmd.Close语句也可以用于指定要关闭的表单:

DoCmd.Close acForm, "frmFormName"

如果使用它,它将为您解决此问题。

纯粹作为一个旁注,我建议使用CurrentDb.Execute“SQL Statement” dbFailOnError而不是DoCmd.RunSQL。这样,您就不必麻烦警告,当insert语句无法工作时,dbFailOnError标志将返回有用的错误代码。

关于ms-access - 在MS Access中打开另一个窗体时关闭当前窗体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18241903/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com