OpenForm已在我的应用程序中重新出现。我已经反编译/压缩并修复了两次。
代码抛出错误: '打开菜单表单 DoCmd.OpenForm“Menu”,acNormal ,,,, acWindowNormal
我第一次遇到这个错误时,通过更改:
解决了这个问题DoCmd.OpenForm "Menu", acNormal, "", "", , acNormal
到
DoCmd.OpenForm "Menu", acNormal, , , , acWindowNormal.
这是我遇到异常的程序:
Private Sub Login(recordSet As DAO.recordSet, PERSAL As String, Password As String)
On Error GoTo Login_ErrHandler
'Check to see if the recordset actually contains rows
If Not (recordSet.EOF And recordSet.BOF) Then
recordSet.MoveFirst 'Unnecessary in this case, but still a good habit
'See if credentials match data
Do
If (recordSet!User_ID = PERSAL And recordSet!Password = Password) Then
'Open Menu form
DoCmd.OpenForm "Menu"
' Form_Menu.op
recordSet.Close 'Close the recordset
Set recordSet = Nothing 'Clean up
'Close Login form
DoCmd.Close acForm, "Login"
Exit Do
End If
recordSet.MoveNext
If (recordSet.EOF Or recordSet.BOF) Then
MsgBox "Your credentials are incorrect or you are not registered."
Exit Do
End If
Loop
'Match the values entered for PERSAL nr. and password fields with a row in User table
Else
MsgBox "There are no records in the recordset."
recordSet.Close 'Close the recordset
Set recordSet = Nothing 'Clean up
End If
Form_Login.txtUser_ID.SetFocus
Login_ErrHandler:
If Err = 2501 Then
'MsgBox "No data to display"
DoCmd.Hourglass False
Resume Login_ErrHandler
' Else
' MsgBox Err.Description, vbCritical
End If
End Sub
这次如何修复此错误?
答案 0 :(得分:0)
使用以下SQL创建参数化查询:
PARAMETERS [prmUserId] Text ( 255 ), [prmPassword] Text ( 255 );
SELECT User_ID, Password
FROM YOUR_TABLE_NAME
WHERE ((([User_ID])=[prmUserId]) AND (([Password])=[prmPassword]));
假设代码在登录表单后面:
Private Sub Login(ByVal PERSAL As String, ByVal Password As String)
On Error GoTo Login_ErrHandler
Dim qdf As DAO.QueryDef
Set qdf = CurrentDb().QueryDefs("YourQueryName") 'Change to your query name
qdf.Parameters("[prmUserId]").Value = PERSAL
qdf.Parameters("[prmPassword]").Value = Password
Dim rs As DAO.recordSet
Set rs = qdf.OpenRecordset()
'No records
If rs.EOF Then
MsgBox "Your credentials are incorrect or you are not registered."
Me.txtUser_ID.SetFocus
GoTo Leave
End If
'User found
'Close Login Form
DoCmd.Close acForm, Me.Name, acSavePrompt
'Open Form
DoCmd.OpenForm "Menu", acNormal, , , acFormPropertySettings, acWindowNormal
Leave:
On Error Resume Next
rs.Close
Set rs = Nothing
qdf.Close
Set qdf = Nothing
On Error GoTo 0
Exit Sub
Login_ErrHandler:
MsgBox Err.Number & " - " & Err.Description, vbCritical
Resume Leave
End Sub