问题
实时错误‘3021’:
BOF或EOF中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录
我出现该问题的位置是在修改密码这个窗体中,在旧密码输入不正确然后提醒用户“原密码不正确”之后就会出现这个错误。
解决方法
当遇到这个问题时我的解决办法是运用一个If语句,让程序直接进行下一步
'判断原密码是否正确
If mrc.EOF And mrc.BOF Then '没有记录
MsgBox "原密码不正确或无记录,请重新输入!", vbOKOnly + vbExclamation, "警告"
txtOldPassword.Text = ""
txtOldPassword.SetFocus
End If
'***********或者
If mrc.RecordCount = 0 Then
MsgBox "原密码不正确或无记录,请重新输入!", vbOKOnly + vbExclamation, "警告"
Exit Sub
End If
修改密码窗体-部分代码:
'判断原密码是否正确
If mrc.EOF And mrc.BOF Then '没有记录
MsgBox "原密码不正确或无记录,请重新输入!", vbOKOnly + vbExclamation, "警告"
txtOldPassword.Text = ""
Unload Me
Else
'新密码输入不能为空
If Trim(txtNewPassWord.Text = "") Then
MsgBox "请输入新密码!", vbOKOnly + vbExclamation, "警告"
txtNewPassWord.SetFocus
Else
'判断两次输入是否一致
If txtPasswordSure.Text <> txtNewPassWord.Text Then
MsgBox "两口密码不一致,请重新输入!", vbOKOnly + vbExclamation, "警告"
txtPasswordSure.Text = ""
txtPasswordSure.SetFocus
Else
'修改数据库中指定的下标字段值
mrc.Fields(1) = txtNewPassWord.Text
mrc.Update
mrc.Close
MsgBox "修改密码成功!", vbOKOnly + vbExclamation, "提示"
txtOldPassword.Text = ""
txtNewPassWord.Text = ""
txtPasswordSure.Text = ""
End If
End If
End If
补充
BOF和EOF的区别:
BOF指当前记录位置位于RecordSet对象的第一个记录之前
EOF指当前记录位置位于RecordSet对象的最后一个记录之后
BOF和EOF返回值类型为布尔型:
BOF | EOF | |
True | 当前位置在第一行之前,无记录 | 当前位置在最后一行之后,无记录 |
False | 当前位置在第一行或之后,有记录 | 当前位置在最后一行或之前,有记录 |