以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]MD5Encrypt和DataColChanging的问题-已解决  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=34382)

--  作者:shenyl0211
--  发布时间:2013/6/6 16:35:00
--  [求助]MD5Encrypt和DataColChanging的问题-已解决

在自定义用户管理时,建立了《人员管理》表,其中有“员工姓名”、“登录密码”列。

为了及时加密,在DataColChanging表事件中的相关代码如下(代码没有问题):

If MainTable.name="人员管理" Then

    If e.DataCol.Name= "登录密码"

        If e.NewValue = "" Or e.NewValue="888" And _userroles<>"开发者" And _userroles<>"管理者" Then

            MessageBox.Show("密码不能为空或888!", "提示", MessageBoxButtons.OK, MessageBoxIcon. Information)

            e.Cancel=True

        Else

            e.NewValue = MD5Encrypt(e.NewValue)

        End If

    End If

End If

为了避免借用别人名义非法登录、真实用户可以发现被借用登录,AfterOpenProject中增加了首次使用就强行更改密码的相关代码(问题代码已标识):

MainTable=tables("人员管理") \'加上这句就没事了

Dim drs As List (of DataRow)

drs=DataTables("人员管理").Select("员工姓名= \'" & _username & "\'") 考虑员工跨部门

Dim i As Integer

Dim val As String

For Each dr As DataRow In drs

    For i=1 To 100 如果不输入新密码,就强行提示100

        If dr("登录密码")=MD5Encrypt("888") Then

            If InputValue(Val, "弃用初始密码","不准继续使用初始密码<888>" & vbcrlf & vbcrlf & "请输入新密码(不超过10个字符)") Then

                dr("登录密码")=val 问题代码

                DataTables("人员管理").save()

            End If

        Else

            Exit For

        End If

    Next

Next

其中dr("登录密码")=val是问题代码,现象是:

在开发环境下,正确的代码是dr("登录密码")=val因为DataColChanging中的e.NewValue = MD5Encrypt(e.NewValue)会完成加密。

而项目发布后,正确的代码是dr("登录密码")=MD5Encrypt(val)因为DataColChanging中的e.NewValue = MD5Encrypt(e.NewValue)竟不起作用。

因此,开发测试和最终发布只能采用不同的代码。现在问题解决了。

[此贴子已经被作者于2013-6-6 17:47:10编辑过]

--  作者:Bin
--  发布时间:2013/6/6 16:47:00
--  
如果这样你干脆都统一 写为dr("登录密码")=MD5Encrypt(val)

DataColChanging中的那段代码去掉就好了.

--  作者:shenyl0211
--  发布时间:2013/6/6 16:54:00
--  
问题是还应该允许在《人员管理》表中修改密码,特别是密码遗忘的情况下,必须由管理者或开发者初始化为888。
--  作者:Bin
--  发布时间:2013/6/6 16:57:00
--  
我只是说去掉ELse里面的代码.不是整个去掉
--  作者:shenyl0211
--  发布时间:2013/6/6 17:49:00
--  
MainTable=tables("人员管理") \'加上这句就没事了,见1楼原文

谢谢!