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 - 在表单之间传递登录信息的主要内容,如果未能解决你的问题,请参考以下文章

C# Ms-access 从数据库中获取详细信息

将MS Access表单日期传递到Oracle SQL

防止用户绕过 MS Access 上的登录表单

MS Access 2007 - OpenArgs 没有将值传递给下一个表单?

表单过滤器之间的 MS-Access

MS Access 和 SQL Server 连接(可信来源与传递登录凭据)