MS Access - 在表单之间传递登录信息
Posted
技术标签:
【中文标题】MS Access - 在表单之间传递登录信息【英文标题】:MS Access - Pass login info between forms 【发布时间】:2018-08-02 06:01:15 【问题描述】:基于此示例 (http://accesshosting.com/create-login-form-ms-access),我创建了一个登录页面,但我需要帮助将 UserLogin 从一个页面传递到另一个页面。这是登录表单验证的代码:
Private Sub Command1_Click()
Dim User As String
Dim UserLevel As Integer
Dim TempPass As String
Dim ID As Integer
Dim Username As String
Dim TempID As String
If IsNull(Me.txtUserName) Then
MsgBox "Please enter UserName", vbInformation, "Username required"
Me.txtUserName.SetFocus
ElseIf IsNull(Me.txtPassword) Then
MsgBox "Please enter Password", vbInformation, "Password required"
Me.txtPassword.SetFocus
Else
If (IsNull(DLookup("UserLogin", "Users", "UserLogin = '" & Me.txtUserName.Value & "' And UserPassword = '" & Me.txtPassword.Value & "'"))) Then
MsgBox "Invalid Username or Password!"
Else
TempID = Me.txtUserName.Value
'Added line for saving the userLogin as global variable
PassUserData.fillUsername (TempID)
Username = DLookup("[UserName]", "Users", "[UserLogin] = '" & Me.txtUserName.Value & "'")
UserLevel = DLookup("[UserType]", "Users", "[UserLogin] = '" & Me.txtUserName.Value & "'")
TempPass = DLookup("[UserPassword]", "Users", "[UserLogin] = '" & Me.txtUserName.Value & "'")
UserLogin = DLookup("[UserLogin]", "Users", "[UserLogin] = '" & Me.txtUserName.Value & "'")
DoCmd.Close
If (TempPass = "password") Then
MsgBox "Please change Password", vbInformation, "New password required"
DoCmd.OpenForm "frmUserinfo", , , "[UserLogin] = " & UserLogin
Else
DoCmd.OpenForm "frmStart"
End If
End If
End If
End Sub
我需要使用基于 UserLogin 的过滤记录打开“frmStart”表单。 我所做的是,我创建了一个带有全局变量的模块(PassUserData),但是当我单击带有一些用户凭据的命令按钮时,表用户 - 第一行(字段 UserLogin)将使用当前的 userLogin(txtUserName)进行更新。
'Module PassUserData
Option Compare Database
Global G_Username As String
Public Function fillUsername(txtUser As String)
G_Username = txtUser
End Function
Public Function returnUsername() As String
returnUsername = G_Username
End Function
提前谢谢你。
【问题讨论】:
【参考方案1】:您可能已将登录表单绑定到用户表。
删除表单的record source
使表单解除绑定,因此不会更新任何表格。
其他提示:
在连接的 SQL 中直接使用用户输入可能会导致错误和 SQL 注入。尝试输入u'ser
。
将密码存储为纯文本是不好的。
如果您需要一个表中的多个值,打开一个记录集而不是多次DLookup()
调用会更有效(并且代码更简洁)。
【讨论】:
谢谢你的回答,我要把密码改成二进制,不会使用用户,我只是想先看看这个例子:)【参考方案2】:删除PassUserData.fillUsername (TempID)
并使用DoCmd.OpenForm "frmStart", , , , , , TempID
DoCmd.OpenForm 方法的
OpenArgs 参数有助于在表单之间传递任何信息。或者,您也可以将任何信息存储在 TempVars 中。
【讨论】:
以上是关于MS Access - 在表单之间传递登录信息的主要内容,如果未能解决你的问题,请参考以下文章