以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  加载树不显示  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=178613)

--  作者:weibu
--  发布时间:2022/7/12 11:22:00
--  加载树不显示
老师,加载树原来显示过段时间不显示了。是跟进数据量有关系吗?现在数据量有500万条
我该怎么做能显示加载树

--  作者:有点蓝
--  发布时间:2022/7/12 11:34:00
--  
怎么设置的加载树?截图看看
--  作者:weibu
--  发布时间:2023/2/4 21:19:00
--  
老师我做的一个按钮,单击事件如下。加载树很多时候不显示。哪个地方有问题?

MainTable = Tables("rs_sourcecode")
Dim dr As DataRow = DataTables("rs_userinfo").find("sname = \'" & rsuser & "\'")  \'找到当前登录者所在的行
Dim filter As String = "1=2"
If dr("position") = "管理者" Then
    Dim drs = DataTables("rs_departinfo").Select("departno like \'" & dr("departno") & "%\'")
    For Each cdr As DataRow In drs
        Filter &= " or nowdepart = \'" & cdr("depart") & "\' And isuse = 1"
    Next
    Else If dr("position") = "职员" Then
    Filter = "nowdepart = \'" & dr("indepart") & "\'And isuse = 1"
End If
DataTables("rs_sourcecode").LoadTop = "2000"
DataTables("rs_sourcecode").LoadOrder = "indate Desc"
Tables("rs_sourcecode").OpenLoadTree("nowdepart|proname|indate YM",200,2000,True,Filter)
Tables("rs_sourcecode").Sort = "indate Desc"
Forms("库存汇总").Open()

--  作者:有点蓝
--  发布时间:2023/2/5 20:27:00
--  
看不出有什么问题,有没有提示什么错误?

--  作者:weibu
--  发布时间:2023/2/6 8:49:00
--  
没有任何提示,就是直接不显示加载树。原来是偶尔不显示。现在是不显示的时候多,显示的时候少。
原来数据量少的时候没问题。现在数据量大概有500万条。用的是SQLserver数据库,云服务器

--  作者:有点蓝
--  发布时间:2023/2/6 8:59:00
--  
可能数据库查询超时了

首先建议优化一下数据库:http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=158943&replyID=&skin=1

然后换种方式,自己做目录树:http://www.foxtable.com/webhelp/topics/2692.htm,设置一下SQLCommand超时时间,设置大一点

建议参考这里的方式动态生成子节点:http://www.foxtable.com/webhelp/topics/3308.htm,不要一次性加载所有节点

--  作者:chnfo
--  发布时间:2023/2/6 8:59:00
--  
If dr("position") = "管理者" Then
    Dim drs = DataTables("rs_departinfo").S   elect("departno like \'" & dr("departno") & "%\'")  \'本来like的效率就不高
    For Each cdr As DataRow In drs
        Filter &= " or nowdepart = \'" & cdr("depart") & "\' And isuse = 1"   \'如果drs.count的数量比较大,那这个filter就可能很长,另外可能这个条件有点问题,组合以后的整个条件就是 false or x and B or y and y or Z and y ,似乎应当在or 后面加上括号
    Next
Else If dr("position") = "职员" Then
    Filter = "nowdepart = \'" & dr("indepart") & "\'And isuse = 1"
End If

这个drs的数据行有多少哦。如果数据行数很多的话,那filter的判断效率太低,有没有可能导致数据过滤的效率太低,进而影响树的构建?
条件里的or后面加上括号试试

--  作者:weibu
--  发布时间:2023/2/6 11:04:00
--  
drs数量有1000条左右。不算多吧
--  作者:有点蓝
--  发布时间:2023/2/6 11:08:00
--  
如果作为合并查询条件用,就多了,而且是非常多了。具体可以看看优化数据库里的一些说明
--  作者:weibu
--  发布时间:2023/2/8 10:13:00
--  
   Select Case e.Node.Level
        Case 0
            Filter = "[nowdepart] = \'" & e.Node.Text & "\'"
        Case 1
            Filter = "[nowdepart] = \'" & e.Node.ParentNode.Text & "\' And [proname] = \'" & e.Node.Text & "\'"
        Case 2
            Filter = "[nowdepart] = \'" & e.Node.ParentNode.Text & "\' And [proname] = \'" & e.Node.ParentNode.Text & "\'And [prodd] = \'" & e.Node.Text & "\' ’老师第一个"[nowdepart] = \'" & e.Node.ParentNode.Text &  这个是父节点的父节点咋写代码?    目录树是一级目录是一张表,二三级目录是另外一张表生成的。   
       
    End Select
End If