Foxtable(狐表)用户栏目专家坐堂 → 递归函数问题


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

主题:递归函数问题

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/30 14:09:00 [显示全部帖子]


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/30 14:41:00 [显示全部帖子]

children函数

 

Dim pdr As DataRow = args(0)
Dim dt As DataTable = args(1)
Dim drs As List(of DataRow)
drs = pdr.DataTable.Select("[第一列] = '" & pdr("第二列") & "'")
For Each dr As DataRow In drs
    Dim ndr As DataRow = dt.addnew
    ndr("第一列") = dr("第一列")
    ndr("第二列") = dr("第二列")
    ndr("第三列") = 1
    Functions.Execute("AddChildren",dr,dt)
    Dim idx As Integer = 1
    Functions.Execute("AddChildren2",dr,ndr,idx)
Next

 

children2

 

Dim cdr As DataRow = args(0)
Dim dt As DataTable = args(1).DataTable
Dim idx As Integer = args(2) + 1
Dim fdr As DataRow = cdr.DataTable.find("[第二列] = '" & cdr("第一列") & "' and 第一列 is not null")
If fdr IsNot Nothing Then
    Dim ndr As DataRow = dt.addnew
    ndr("第一列") = fdr("第一列")
    ndr("第二列") = args(1)("第二列")
    ndr("第三列") = idx
    Functions.Execute("AddChildren2",fdr, ndr,idx)
End If

 

调用

 

Dim dt As DataTable = DataTables("表A")
For Each dr As DataRow In dt.Select("第一列 is null")
    Functions.Execute("AddChildren",dr, DataTables("表B"))
Next
Tables("表B").Sort = "第一列,第三列"

 


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/1/13 10:12:00 [显示全部帖子]

必须用代码处理。你看懂递归自己学习sql处理。

 

sql也可以用递归,就是麻烦。


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/2/29 22:52:00 [显示全部帖子]

9楼代码,不变。如果要全部生成,调用这样调用

 

For Each dr As DataRow In DataTables("表A").DataRows
    Functions.Execute("AddChildren",dr,dr.DataTable,dr("推荐人卡号"),1)
Next


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/3/1 9:27:00 [显示全部帖子]

以下是引用fubblyc在2016/3/1 7:56:00的发言:
谢谢 大红袍 老师。这样的话要遍历表里的每一行。我的是后台表,有十多万行,之前也是这样做的,速度超慢。。所以才想着用 找到该行,再调用。这样不行吗?一定要遍历所有行吗?有没有什么办法可以不用遍历所有行的?

 

可以把所有数据一次性加载进来,再执行,如果这样也慢的话,应该是这个原因

 

http://www.foxtable.com/help/topics/2225.htm

 


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/3/1 9:29:00 [显示全部帖子]

以下是引用fubblyc在2016/3/1 7:58:00的发言:
我说的全部生成,是指该行的 二级 三级 全部生成,不是所有行全部生成。因为记录是一条一条进去的。

 

一条一条的话,你直接在datacolchanged事件写代码不就行了?

 

Dim dr As DataRow = e.DataRow

If e.DataCol.Name = "推荐人卡号" Then

    Functions.Execute("AddChildren",dr,dr.DataTable,dr("推荐人卡号"),1)

End If


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/3/1 10:42:00 [显示全部帖子]

22楼的代码没问题,如果还慢的话,就是赋值和查询同步进行的问题,看20楼

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/3/3 14:20:00 [显示全部帖子]

把用户的数据库复制过来测试。或者把你的数据库复制过去测试。

 回到顶部