MS Access中不需要的科学符号

时间:2018-11-05 17:16:23

标签: ms-access format notation

我在使用MS Access时遇到一个非常奇怪的问题。我在密码重置表单上使用了一些VBA代码。该代码对输入的密码进行哈希处理,然后将哈希值保存到用户表中。这是一个相关的摘录:

If newPW1 = newPW2 Then
    MsgBox ("Passwords Match!")
    hashPW = Encrypt(newPW1)
    MsgBox ("HashedPW is " & hashPW)
    updatePW = "UPDATE Users SET Password = " & hashPW & " WHERE Username = pwChangeUsrnm"
    DoCmd.RunSQL (updatePW)

MSGbox是我的调试说明。我知道散列会很好地生成为一长串数字,所有这些都很好。不过,当我进入“用户”表的数据表时,该数字始终被转换为科学计数法。

这是数据表的屏幕截图。 bob.smith是代码运行后最终结果的一个示例,另外两个是我手动输入的乱码。该字段的格式设置为字符串,因此我不确定为什么我可以告诉项目始终为字符串时,为什么还要尝试将数字转换为SN。

我认为错误必须在SQL查询周围蔓延?如果有更好的方法可以做到这一点,那么我就会不知所措。

在此先感谢您的帮助!

数据表

datasheet

设计视图

design view

完整代码,以防万一:

Option Compare Database




Private Sub Command84_Click()

Dim hashPW As String

Dim updatePW As String


Dim checkName As String
checkName = Nz(DLookup("Username", "Users", "Username = pwChangeUsrnm"), "aaa")
MsgBox ("checkName set to " & checkName)

If pwChangeUsrnm = checkName Then

    MsgBox ("Username Found")
    If newPW1 = newPW2 Then
        MsgBox ("Passwords Match!")
        hashPW = Encrypt(newPW1)
        MsgBox ("HashedPW is " & hashPW)
        updatePW = "UPDATE Users SET Password = " & hashPW & " WHERE Username = pwChangeUsrnm"
        DoCmd.RunSQL (updatePW)

    Else

    MsgBox ("Passwords Do Not Match!")

    End If

Else

MsgBox ("Username not found")

End If

End Sub

1 个答案:

答案 0 :(得分:0)

我认为安德烈(Andre)有权。我尝试调整哈希代码以添加字母字符,此方法奏效了,但随后我需要返回并在哈希的PW值周围添加单引号-即使不添加字母也可能会使代码正常工作。

If newPW1 = newPW2 Then
    MsgBox ("Passwords Match!")
    hashPW = Encrypt(newPW1)
    MsgBox ("HashedPW is " & hashPW)
    updatePW = "UPDATE Users SET Password = '" & hashPW & "' WHERE Username = pwChangeUsrnm"
    DoCmd.RunSQL (updatePW)

也感谢Zaph对安全性的第二点评论,我将所有这些考虑在内。就此数据库而言,安全性不是一个太大的问题,因为它将位于现有安全性措施的后面。密码的散列只是为了避免以纯文本显示密码。尽管如此,了解这些额外的功能还是很有用的。