以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助] 关于加载数据的问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=89946)

--  作者:188802386
--  发布时间:2016/9/1 19:21:00
--  [求助] 关于加载数据的问题
首先有个  用户表   表b  表c
想让不同用户通过用户表的加载集合和本部集合来确定该表加载范围
比如张三加载  表B|本部     其中本部就是从‘本部集合’中获取名字来加载
                   表C|所有    就是可以看到表C的所有数据
当然,如果是本人,则只能看到自己的数据行
想到用split(","split("|")  以及LoadFilter like 但就是不成功,求帮助,例子一楼上传不了,传二楼

--  作者:188802386
--  发布时间:2016/9/1 19:24:00
--  
例子
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.foxdb



--  作者:有点蓝
--  发布时间:2016/9/2 8:26:00
--  
LoadUserSetting事件

Dim dr As DataRow  = DataTables("用户管理").Find("姓名=\'" & User.Name & "\'")
If dr Is Nothing OrElse dr.IsNull("加载集合") Then
    DataTables("表B").LoadFilter = "false"
    DataTables("表C").LoadFilter = "false"
    DataTables("表B").load
    DataTables("表C").load
Else
    Dim dtn() As String = dr("加载集合").split(",")
    For Each tn As String In dtn
        Dim ts() As String = tn.Split("|")
        Select Case ts(1)
            Case "本人"
                DataTables(ts(0)).LoadFilter = "第一列=\'" & User.Name & "\'"
            Case "所有"
                DataTables(ts(0)).LoadFilter = ""
            Case Else
                DataTables(ts(0)).LoadFilter = "第一列 in (\'" & dr("本部集合").replace(",","\',\'") & "\')"
        End Select
        DataTables(ts(0)).load
    Next
End If

--  作者:188802386
--  发布时间:2016/9/2 11:15:00
--  
你好,蓝老师,我用户名采用了全局变量 _UserName  也使用了默认用户,怎么我将
Dim dr As DataRow  = DataTables("用户管理").Find("姓名= _UserName ") 
放在窗口afterload事件中  提示    未找到列 [_UserName]。

--  作者:有点蓝
--  发布时间:2016/9/2 11:28:00
--  
Dim dr As DataRow  = DataTables("用户管理").Find("姓名= \'" & _UserName & "\'") 
--  作者:188802386
--  发布时间:2016/9/2 11:39:00
--  
提示   在应使用条件的上下文(在 \')\' 附近)中指定了非布尔类型的表达式。
--  作者:188802386
--  发布时间:2016/9/2 12:42:00
--  
Dim dr As DataRow  = DataTables("用户管理").Find("name = \'" & _username & "\'")         总是这里有问题,
If dr Is Nothing OrElse dr.IsNull("加载范围集合") Then
    DataTables("用户管理").LoadFilter = "false"
    DataTables("用户管理").load
Else
    Dim dtn() As String = dr("加载范围集合").split(",")
    For Each tn As String In dtn
        Dim ts() As String = tn.Split("|")
        Select Case ts(1)
            Case "本人"
                DataTables(ts(0)).LoadFilter = "姓名 = & _UserName1"
            Case "所有"
                DataTables(ts(0)).LoadFilter = ""
            Case Else
                DataTables(ts(0)).LoadFilter = "部门名称 In (\'" & dr("本部集合").replace(",","\',\'") & "\')"
        End Select
        DataTables(ts(0)).load
    Next
End If

--  作者:188802386
--  发布时间:2016/9/2 13:25:00
--  
Dim dr As DataRow  = DataTables("用户管理").SQLFind("name = \'" & _username & "\'")     
If dr Is Nothing OrElse dr.IsNull("加载范围集合") Then
    DataTables("用户管理").LoadFilter = "false"
    DataTables("用户管理").load
Else
    Dim dtn() As String = dr("加载范围集合").split(",")
    For Each tn As String In dtn
        Dim ts() As String = tn.Split("|")
        Select Case ts(1)
            Case "本人"
                DataTables(ts(0)).LoadFilter = "姓名 = & _UserName1"
            Case "所有"
                DataTables(ts(0)).LoadFilter = ""
            Case Else
                DataTables(ts(0)).LoadFilter = "部门名称 In (\'" & dr("本部集合").replace(",","\',\'") & "\')"          说 列名 \'部门名称\' 无效。
        End Select
        DataTables(ts(0)).load
    Next
End If
我用msgbox(ts(0))出来有几个表,但我只想要“用户管理”表 该如何判断呢    上面说的列名无效是其他表的,
因为我是吧代码放在“用户管理”窗口的afterload里面的,所以不需要判断其他表
如何判断ts(1)是否存在“用户管理”表,

--  作者:有点蓝
--  发布时间:2016/9/2 13:51:00
--  
你的逻辑有问题。用户管理表是用来控制其它表的加载的,不是用来控制自身的加载的,那没有意义。

2楼例子运行3楼代码看效果