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


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

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

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


加好友 发短信
等级:超级版主 帖子:105958 积分:538865 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/9/16 17:00:00 [只看该作者]

改代码后,重启项目测试

 回到顶部
帅哥哟,离线,有人找我吗?
northebaby
  12楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:108 积分:1230 威望:0 精华:0 注册:2014/6/25 13:08:00
  发帖心情 Post By:2021/9/16 20:32:00 [只看该作者]

重启项目也不行图片点击可在新窗口打开查看,估计还是foxtable本身或者是.net的问题

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105958 积分:538865 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/9/16 20:41:00 [只看该作者]

我测试没有问题

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:自定义用户管理之二.zip



 回到顶部
帅哥哟,离线,有人找我吗?
northebaby
  14楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:108 积分:1230 威望:0 精华:0 注册:2014/6/25 13:08:00
  发帖心情 Post By:2021/9/17 10:13:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:6.jpg
图片点击可在新窗口打开查看
首先感谢蓝版这么坚持给我解答!图片点击可在新窗口打开查看
我反复测试,发现不是代码改的不对,是原来的"用户.dbm"这个数据库文件已经有错误了,只要有错误出现,就会再次出现错误,所以我更换了新的未更改"用户.dbm",果然没问题了。
但是重点是”但是“,要是我们的代码不完善还能造成数据库文件错误呢?顺着这个思路,我这样试着进行了操作,果然问题又出现了:
1.增加用户“张三”
2.增加用户“李四”
3.增加用户“王五”(这步可以省略,这样说是为了配合截图)
4.更改用户“李四”,把用户名改成“张三”,系统出现错误提示,注意,这是出现错误的开始,请看第二个图
5.把“王五“改成张三,继续提示错误,按取消键后,会发现用户里面有三个”张三“!请看第一个图
6.退出项目,按提示保存。
7.打开项目,会发现用户”张三“、”李四“、”王五“都在!
8.打开用户管理窗口,删除用户”张三“,再增加用户,户名用”张三“,问题复现了,提示张三已经存在!同样操作,李四和王五删除后也不能增加!
初步总结:只要系统出现错误,就会对当前错误行进行保护,任何操作都不起作用,保存关闭项目后再进入项目,也不行!所以”更改用户“这个窗口也要修改代码,对用户名进行判断,才算完善。更重要的是,对数据库这个问题要从运行机制上进行处理,避免再出现这个问题!
图片点击可在新窗口打开查看此主题相关图片如下:5.jpg
图片点击可在新窗口打开查看
不知道我的判断是否正确,请不吝指正!
[此贴子已经被作者于2021/9/17 10:15:39编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  15楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105958 积分:538865 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/9/17 11:03:00 [只看该作者]

帮助提供的所有实例,都只是为了配合帮助的某一个功能,不能说也不要期待这个例子在所有场景都是完美的。例子只是为了表示这个功能这样做是可以的,着重于功能的逻辑展示,没有考虑到很多细节性的东西。

如果有需要,可以自行理解代码并改进

 回到顶部
帅哥哟,离线,有人找我吗?
michl
  16楼 | 信息 | 搜索 | 邮箱 | 主页 | 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 & "'")
    ......

 回到顶部
总数 16 上一页 1 2