Vba 运行时错误15-更改MS Access数据库中密码的代码类型不匹配
我在以下行中得到运行时错误15:Vba 运行时错误15-更改MS Access数据库中密码的代码类型不匹配,vba,ms-access,ms-access-2016,Vba,Ms Access,Ms Access 2016,我在以下行中得到运行时错误15: Set rs = CurrentDb.OpenRecordset("Select * From [User Registration Details] where [UserID]=" & MyuserID) MyuserID=Me.txtfirstname.Value来自以下代码: Option Compare Database Option Explicit Private Sub cmdchange_Click()
Set rs = CurrentDb.OpenRecordset("Select * From [User Registration Details] where [UserID]=" & MyuserID)
MyuserID=Me.txtfirstname.Value
来自以下代码:
Option Compare Database
Option Explicit
Private Sub cmdchange_Click()
On Error Resume Next
If Trim(Me.txtnewpass & "") <> Trim(Me.txtconfirmpass & "") Then
MsgBox "Passwords do not match", vbExclamation + vbOKOnly, ""
Me.cmdchange.Enabled = False
Else
Me.cmdchange.Enabled = True
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("Select' From[User Registration Details] where [UserID]=" & MyuserID)
If Not rs.EOF And Not rs.BOF Then
rs.Edit
rs("Password") = txtconfirmpass
rs.Update
rs.Close
Set rs = Nothing
MsgBox "Your Password has been successfully changed", vbInformation, "Electporl"
DoCmd.Close acForm, "frmnewpassword", acSaveNo
DoCmd.OpenForm "frmlogin"
End If
End If
选项比较数据库
选项显式
私有子cmdchange_Click()
出错时继续下一步
如果Trim(Me.txtnewpass&“”)Trim(Me.txtconfirmpass&“”),则
MsgBox“密码不匹配”,VBEQUOTION+vbOKOnly“
Me.cmdchange.Enabled=False
其他的
Me.cmdchange.Enabled=True
Dim rs作为DAO.Recordset
设置rs=CurrentDb.OpenRecordset(“从[User Registration Details]中选择”,其中[UserID]=”&MyuserID)
如果不是rs.EOF和rs.BOF,则
rs.编辑
rs(“密码”)=txtconfirmpass
rs.更新
rs.Close
设置rs=无
MsgBox“您的密码已成功更改”,vbInformation,“Electropor”
文件关闭acForm,“frmnewpassword”,acSaveNo
DoCmd.OpenForm“frmlogin”
如果结束
如果结束
假设我将下面的代码放在按钮上,该按钮将用户带到更改密码表单
Private Sub cmdproceed_Click()
If IsNull(Me.txtfirstname) Or Me.txtfirstname = "" Then
Me.mand1.Visible = True
Me.txtfirstname.SetFocus
End If
If IsNull(Me.txtemail) Or Me.txtemail = "" Then
Me.mand2.Visible = True
Me.txtemail.SetFocus
End If
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("User Registration Details", dbOpenSnapshot, dbReadOnly)
rs.FindFirst ("Firstname='" & Nz(Me.txtfirstname, "") & "'")
If rs.NoMatch = True Then
Me.lbl1.Visible = True
Me.txtfirstname.SetFocus
Exit Sub
End If
If rs!Username <> Nz(Me.txtemail, "") Then
Me.lbl2.Visible = True
Me.txtemail.SetFocus
Exit Sub
End If
'MyuserID is publicly declared as Long in a module
MyuserID = Me.txtfirstname.Value
DoCmd.OpenForm " frmnewpassword"
DoCmd.Close acForm, Me.Name
End Sub
Private Sub cmdproceduce\u Click()
如果IsNull(Me.txtfirstname)或Me.txtfirstname=“”,则
Me.mand1.Visible=True
Me.txtfirstname.SetFocus
如果结束
如果IsNull(Me.txtemail)或Me.txtemail=“”,则
Me.mand2.Visible=True
Me.txtemail.SetFocus
如果结束
将遥感器作为记录集
Set rs=CurrentDb.OpenRecordset(“用户注册详细信息”,dbOpenSnapshot,dbReadOnly)
rs.FindFirst(“Firstname=”&Nz(Me.txtfirstname,”&“”)
如果rs.NoMatch=True,则
Me.lbl1.Visible=True
Me.txtfirstname.SetFocus
出口接头
如果结束
如果是的话!用户名Nz(Me.txtemail,“”),然后
Me.lbl2.Visible=True
Me.txtemail.SetFocus
出口接头
如果结束
'MyuserID在模块中公开声明为长
MyuserID=Me.txtfirstname.Value
DoCmd.OpenForm“frmnewpassword”
DoCmd.Close acForm,Me.Name
端接头
第二个代码分配给按钮,该按钮将用户重定向到表单,该表单将允许用户在验证其名字和电子邮件后更改密码
第二个密码现在分配给按钮,该按钮将通过覆盖旧密码来帮助用户更改密码。请在您的过程中传递
用户ID
值
在cmdcontinue\u Click()
过程中,更新以下部分:
'MyuserID is publicly declared as Long in a module
MyuserID = rs("UserID")
在cmdchange\u单击()
过程中,更新以下行:
Set rs = CurrentDb.OpenRecordset("Select * From [User Registration Details] where [UserID]=" & MyuserID)
从逻辑的角度来看,您可以让其他人使用相同的firstname
,因此对firstname
进行筛选只会在应用程序生命周期的后期引入意外行为
如果您有两个或更多名为“Joshua”的用户,那么您的代码将始终选择第一个名为“Joshua”的用户。您需要更新此逻辑以选择唯一的用户。问题出在哪里?当我单击“继续”按钮时,会出现运行时错误15,表示类型不匹配,并突出显示“MyuserID=Me.txtfirstname.Value”行。我弄不清楚出了什么问题。请帮帮我。txtfirstname是字符串吗?听起来像一个字符串,您不能将字符串存储在长字符串中。此处的错误消息应该会告诉您解决此问题所需的所有信息。类型不匹配,因此试图存储在变量中的数据类型与声明变量的类型不兼容。