Foxtable(狐表)用户栏目专家坐堂 → 单选项及多选目录树保存问题


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

主题:单选项及多选目录树保存问题

帅哥,在线噢!
有点蓝
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

1、用户和授权表数据再多也有限,还不如全部加载了使用find,select,不要使用sqlfind、sqlselect。不要那么死

2、应该直接根据勾选的内容去查数据,而不是遍历所有数据来匹配勾选

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  12楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2022/6/13 22:47:00 [只看该作者]

    帮助里的授权形式我是考虑过,现在的企业管理人员流动性很大,不能因为其离职了删除其曾有授权,因为许多数据已引用、结帐,不允许修改、删除,授权表中他的名字、授权只能锁定,因此帮助里的授权方法不行了,它不能锁定专门人。不同人有不同权限,授权是对独立人专定的,企业现用的授权形式也是根据人所在部门、职位、管理版块开设权限,因此帮助里的授权形式只能作编程方法学习,不能搬到应用软件,它不乎合企业的实际要求,所以授权表要用到后台数据,我是20多年的工业会计,用过很多软件,深知管理需要,软件应用,隔行如隔山,我不是专业编程员,才在编程方面这么多问题问你。 
    我上面的代码是保存目录树中勾选的数据,要先在授权表中查找与勾选目录树相乎的列,然后勾选或取消勾选。
[此贴子已经被作者于2022/6/13 23:11:53编辑过]

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2022/6/13 22:49:00 [只看该作者]

改为这样授权表完全没反应:
Dim trv1 As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim trv2 As WinForm.TreeView = e.Form.Controls("TreeView2")
Dim nd2 As WinForm.TreeNode = trv2.SelectedNode
If nd2.Level = 2 Then
    Dim di As DataRow = DataTables("软件用户列表").SQLFind("[姓名] = '" & nd2.Name & "' And ([锁定] Is Null or [锁定] = false)")
    If di IsNot Nothing Then
        Dim rdo As WinForm.CheckBox
        rdo = e.Form.Controls("CheckBox1")
        If rdo.Checked = True Then
            di("授权权限") = True
        Else
            di("授权权限") = False
        End If
    End If
    di.Save()
    DataTables("软件用户列表").load
    For Each nd1 As WinForm.TreeNode In e.Form.Controls("TreeView1").AllNodes
        If nd1.Level = 2 Then                
            Dim Value() As String
            Value = nd1.FullPath.Split("\")
            For Each c1 As DataCol In DataTables("授权表").DataCols
                If c1.Name = "所属部门" OrElse c1.Name = "职位" OrElse c1.Name = "用户姓名" OrElse c1.Name = "版块管理" OrElse c1.Name = "表名" OrElse c1.Name = "权限分配" OrElse c1.Name = "锁定" Then
                    Continue For
                    Dim das As List(Of DataRow) = DataTables("授权表").SQLSelect("[用户姓名] = '" & nd2.Name & "' And [版块管理] = '" & Value(0) & "' And [权限分配] = '" & Value(1) & "' And nd1.Name = c1.Name And nd1.Checked = True And ([锁定] Is Null Or [锁定] = false)")
                    For Each da As DataRow In das
                        If da IsNot Nothing Then
                            da(c1) = True
                        Else
                            da(c1) = False
                        End If
                    Next
                    DataTables("授权表").SQLUpdate(das)
                    DataTables("授权表").load
                End If
            Next
        End If 
    Next
End If

 回到顶部
帅哥,在线噢!
有点蓝
  14楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

业务的东西我不懂,不需要拿出来和我讨论。有问题说问题即可。

编程和专业不专业其实没有什么关系,一种知识,一个技能而已,就看用不用心。看您很多问题其实都是基础问题,翻来覆去的都是同一个地方错误,建议还是花时间把编程基础学好。

到命令窗口测试理解一下下面代码区别
For i As Integer = 1 To 5
    If i Mod 2 = 0 Then
        Continue For
        MsgBox("永远不执行的代码")
    End If
Next

For i As Integer = 1 To 5
    If i Mod 2 = 0 Then
        Continue For
    Else
        MsgBox("奇数=" & i)
    End If
Next

For i As Integer = 1 To 5
    If i Mod 2 = 0 Then
        Continue For
    End If
    MsgBox(i & "是奇数")
Next

[此贴子已经被作者于2022/6/13 23:04:41编辑过]

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  15楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2022/6/13 23:39:00 [只看该作者]

    我是边做边想,边学的,一开始时你直接把代码写给我,说实在的,那时我对一些用法还没完全吃透,现在多做多想回头再看你以前写的代码,终于明白了,现在我可以根据自己的想法慢慢写些代码了,当然知识面那么广,有些错误是大意,有些错误真是自己没细想,很多时候调试技巧我是做过的,大约知道问题在哪,但找解决方法往往花了很多时间精力,不断反复回看视频教学,帮助,学习基本方法,不断加深理解,碰碰试试中学习吧,尽量多看多想,实在不行才问你。
[此贴子已经被作者于2022/6/13 23:43:09编辑过]

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  16楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2022/6/14 0:50:00 [只看该作者]

改为这样,少一个循环了,还是慢。
Dim trv1 As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim trv2 As WinForm.TreeView = e.Form.Controls("TreeView2")
Dim nd2 As WinForm.TreeNode = trv2.SelectedNode
If nd2.Level = 2 Then
    Dim di As DataRow = DataTables("软件用户列表").SQLFind("[姓名] = '" & nd2.Name & "' And ([锁定] Is Null or [锁定] = false)")
    If di IsNot Nothing Then
        Dim rdo As WinForm.CheckBox
        rdo = e.Form.Controls("CheckBox1")
        If rdo.Checked = True Then
            di("授权权限") = True
        Else
            di("授权权限") = False
        End If
    End If
    di.Save()
    DataTables("软件用户列表").load
    For Each nd1 As WinForm.TreeNode In e.Form.Controls("TreeView1").AllNodes
        If nd1.Level = 2 Then 
            Dim Value() As String
            Value = nd1.FullPath.Split("\")
            Dim da As DataRow = DataTables("授权表").SQLFind("[用户姓名] = '" & nd2.Name & "' And [版块管理] = '" & Value(0) & "' And [权限分配] = '" & Value(1) & "' And ([锁定] Is Null Or [锁定] = false)")
            If da IsNot Nothing Then
                For Each c1 As DataCol In DataTables("授权表").DataCols
                    If c1.Name = "所属部门" OrElse c1.Name = "职位" OrElse c1.Name = "用户姓名" OrElse c1.Name = "版块管理" OrElse c1.Name = "表名" OrElse c1.Name = "权限分配" OrElse c1.Name = "锁定" Then
                        Continue For
                    ElseIf nd1.Name = c1.Name And nd1.Checked = True Then
                        da(c1) = True
                    ElseIf nd1.Name = c1.Name And nd1.Checked = False Then 
                        da(c1) = False
                    End If
                Next
            End If
            da.Save()
            DataTables("授权表").load
        End If 
    Next
End If

 回到顶部
帅哥,在线噢!
有点蓝
  17楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106675 积分:542564 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/6/14 8:40:00 [只看该作者]

1、用户和授权表数据再多也有限,还不如全部加载了使用find,select,不要使用sqlfind、sqlselect。

2、把授权表和这个用户有关的授权全部删除,然后重新添加新的授权

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  18楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2022/6/14 18:56:00 [只看该作者]

保存按钮删除授权表原的数据、重新添加,且当你行得通,但当点击左边的TreeView2目录树,右边的TreeView1目录树根据授权表自动勾选对应数据,你总不能删除授权表里的数据吧?依然要查,这速度还是慢。
[此贴子已经被作者于2022/6/14 20:42:06编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  19楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

全部加载了使用find,select,不要使用sqlfind、sqlselect。

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  20楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2022/6/17 10:07:00 [只看该作者]

   只要曾操作过系统的用户,离职后就不允许修改删除,历年的人和对其授予的这么多行权限,如不用SQL打开软件将很慢,因此SQL不能改,我现在想只保存打勾的目录树行,这样写提示报错:
.NET Framework 版本:4.0.30319.18063
Foxtable 版本:2022.5.29.2
错误所在事件:窗口,授权窗口,保存,Click
详细错误信息:
Object reference not set to an instance of an object.

Dim trv1 As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim trv2 As WinForm.TreeView = e.Form.Controls("TreeView2")
Dim nd2 As WinForm.TreeNode = trv2.SelectedNode
If nd2.Level = 2 Then
    Dim di As DataRow = DataTables("软件用户列表").SQLFind("[姓名] = '" & nd2.Name & "' And ([锁定] Is Null or [锁定] = false)")
    If di IsNot Nothing Then
        Dim rdo As WinForm.CheckBox
        rdo = e.Form.Controls("CheckBox1")
        If rdo.Checked = True Then
            di("授权权限") = True
        Else
            di("授权权限") = False
        End If
    End If
    di.Save()
    DataTables("软件用户列表").load
    For Each nd1 As WinForm.TreeNode In e.Form.Controls("TreeView1").AllNodes
        If nd1.Level = 2 Then
            Dim Value() As String
            Value = nd1.FullPath.Split("\")
            Dim dt As DataRow = DataTables("权限列表").SQLFind("[姓名] = '" & nd2.Name & "'And [版块管理] = '" & Value(0) & "' And [权限分配] = '" & Value(1) & "'") 
            Dim da As DataRow = DataTables("授权表").SQLFind("[用户姓名] = '" & nd2.Name & "' And [版块管理] = '" & Value(0) & "' And [权限分配] = '" & Value(1) & "' And ([锁定] Is Null Or [锁定] = false)")
            DataTables("授权表").SQLDeleteFor("[用户姓名] = '" & nd2.Name & "' And ([锁定] Is Null Or [锁定] = false)")
            For Each c As DataCol In DataTables("权限列表").DataCols
                For Each c1 As DataCol In DataTables("授权表").DataCols
                    If da Is Nothing And c.Name = c1.Name And nd1.Name = c1.Name And nd1.Checked = True Then
                        Dim da1 As DataRow = DataTables("授权表").AddNew()
                        da1("用户姓名") = nd2.Name
                        da1(c1) = dt(c)
                    End If
                    If c1.Name = "所属部门" OrElse c1.Name = "职位" OrElse c1.Name = "用户姓名" OrElse c1.Name = "版块管理" OrElse c1.Name = "表名" OrElse c1.Name = "权限分配" OrElse c1.Name = "锁定" Then
                        Continue For
                    ElseIf nd1.Name = c1.Name And nd1.Checked = True Then
                        da(c1) = True
                    ElseIf nd1.Name = c1.Name And nd1.Checked = False Then 
                        da(c1) = False
                    End If
                    da.Save()
                Next
            Next
        End If
    Next
    DataTables("授权表").load
End If

 回到顶部
总数 21 上一页 1 2 3 下一页