Foxtable(狐表)用户栏目专家坐堂 → [求助]帮助文件中自定义用户管理之二不能二次添加用户


  共有6076人关注过本帖树形打印复制链接

主题:[求助]帮助文件中自定义用户管理之二不能二次添加用户

帅哥哟,离线,有人找我吗?
michl
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:106 积分:1331 威望:0 精华:0 注册:2021/8/20 16:21:00
  发帖心情 Post By:2022/10/14 11:41:00 [显示全部帖子]

最近测试登录窗口的时候也遇到这个问题了,把我分析原因的过程和解决方法写下来供参考:
原因:"自定义用户管理之二"示例中,_UserTable临时表是没有加载数据的
新增用户:'张三',save后台数据已增加。注意此时_UserTable表中会增加一行 '张三'!
更改用户:张三改成李四,此时save后台只有李四,用户列表中也是李四
如果此时再增加张三就会报错"值"已存在!也许你会纳闷,明明后台和用户列表中都已经没有这个用户了啊,那是因为张三还在_UserTable中!
代码中dr = _UserTable.AddNew(),dr("Name") = UserName,主键列显然不会通过。
那换个新的用户"王五"行吗? 还是会报错,而且你再新增任何用户都会报错!
因为之前报错后的新增行,由于Name列是空值状态,之后所有AddNew时都会报错"空值"已存在!
问题的关键原因就在于对新增用户进行更改后,后台Name和_UserTable中Name是不同的!

解决方法:在更改用户时加个判断条件是不是新增的用户,即_UserTable中是否存在(注意用find,不是sqlfind),如果已经存在,在_UserTable中修改保存就行,不用再去后台找!
否则再去sqlfind。比如:
Dim dr2 As DataRow = _UserTable.Find("[Name]= '" & OldUserName & "'") '注意这里是find
If dr2 IsNot Nothing Then 
    dr2("Name") = UserName
    dr2("Group") = UserGroup
    dr2("Password") = PassWord
    dr2.Save()
    If Forms("用户管理").Opened Then
        With Forms("用户管理").Controls("ListBox1")
            .Items(.SelectedIndex) = UserName
        End With
    End If
    e.Form.Close
    Return
Else
    Dim dr As DataRow = _UserTable.SQLFind("[Name]= '" & OldUserName & "'")
    ......

 回到顶部