vba - 将字符串与表字段值进行比较
问题描述
各位程序员大家好,我是 MS Access 的新手,但对 Excel(包括 VBA)有一定的经验。我已经搜索了几天,到目前为止测试了几个零成功的建议。这已经令人沮丧了,我决定直接询问我的情况。
从加载的表单中,我让用户通过输入框输入密码,我需要我的代码在我的表中搜索该字符串Crewlist
,字段Password
和条件是另一个字段Admin
(是/否)。
为了便于搜索,我制作了一个查询表,其中包含所有带有 field Admin
(都是 Yes)和 field 的人Password
。
期待任何特定的解决方案。到目前为止,我已经尝试创建数组和记录集。
编辑(例如根据要求 - 包含要比较的所需信息的表)
字段 1 字段 2 字段 3(“管理员”)
姓名1 密码1 否
姓名2 密码2 是
姓名3 密码3 是
"If" 语句比较 Inputbox 字符串和 Field2 其中 Admin=Yes Dlookup 将返回第一个结果,即 Password2,但 Name3 和 password3 也应该被查找和比较)。
需要记录集和简单的 SQL 代码,我现在正在处理它。
解决方案
我建议DLookup
为此任务使用一个简单的表达式,例如,假设用户输入的密码存储在一个变量pwd
中,您可以使用:
DLookup("Password","Crewlist","Admin = True and Password = '" & pwd & "'")
如果没有找到匹配项,该DLookup
函数将返回,您可以使用语句和函数进行测试,例如:Null
If
IsNull
If IsNull(DLookup("Password","Crewlist","Admin = True and Password = '" & pwd & "'")) Then
MsgBox "Invalid Password!"
Else
' Do Stuff
End If
在这里,我只将Password
字段指定为要查找的字段,因为DLookup
需要返回其值的特定字段。您可以改为使用该DCount
函数并测试返回是否非零,例如:
If DCount("*","Crewlist","Admin = True and Password = '" & pwd & "'") > 0 Then
' Do Stuff
Else
MsgBox "Invalid Password!"
End If
在按钮的事件处理程序中实现,这可以写成:
Private Sub Command0_Click()
Dim pwd As String
pwd = InputBox("Enter Password:", "Password")
If pwd <> vbNullString Then
If IsNull(DLookup("Password", "Crewlist", "Admin = True and Password = '" & pwd & "'")) Then
MsgBox "Invalid Password!"
Else
MsgBox "Access Granted!"
End If
End If
End Sub
请注意,这只是检查密码,因此,仅使用上述代码,用户可以为任何管理员用户指定密码并被授予访问权限。
您可以使用附加提示轻松检查用户名:
Private Sub Command0_Click()
Dim usr As String
Dim pwd As String
usr = InputBox("Enter Username:", "Username")
If usr <> vbNullString Then
pwd = InputBox("Enter Password:", "Password")
If pwd <> vbNullString Then
If IsNull(DLookup("Password", "Crewlist", "Admin = True and Username = '" & usr & "' and Password = '" & pwd & "'")) Then
MsgBox "Invalid Username or Password!"
Else
MsgBox "Access Granted!"
End If
End If
End If
End Sub
但是,如果您要设计自己的模式表单,其中包含用户名的文本框或组合框以及用户可以在其中指定密码的文本框,这将更加专业。
此外,以纯文本形式将密码存储在数据库中是不好的做法:考虑使用适当的散列函数对密码进行散列处理并存储散列值。然后,将相同的散列函数应用于用户输入,并使用生成的散列值来测试数据库中的匹配项。
这样,只有用户知道密码——因为散列是一个单向过程,即使是数据库管理员也不知道用户的密码。如果用户需要更改他们的密码,他们将获得一个可以更改的新临时密码,或者在其他一些身份验证之后提供一个新密码。
作为一般规则,永远不要相信任何能够向您发送原始密码的服务 - 这表明此类服务正在存储密码而没有加密/屏蔽。
推荐阅读
- fpga - FPGA 软 IP 内核:它们通常总是依赖于芯片还是独立于芯片
- google-apps-script - 在不触发日历触发器的情况下创建或修改事件
- python - 在 Web_Scrapping 列表返回空列表
- java - 为什么我的链表的 listIterator.next().toString 方法不会返回有效的字符串?它抛出一个 java.util.ConcurrentModificationException
- python - PyQt5 QMainWindow 不显示中央小部件
- flutter - 单击时我将如何阻止构建按钮更改其状态谢谢
- javascript - xState 中的模型输入(文本字段)状态机
- python - 在python上实现一个永无止境的矩阵公式进行曲线拟合
- python - Python boto3分段上传视频到aws s3
- c - printf 没有给我正确的输出,也许 scanf 是罪魁祸首,请指教