在自定义用户管理时,建立了《人员管理》表,其中有“员工姓名”、“登录密码”列。
为了及时加密,在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编辑过]