以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  关于父子表同步加载的问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=135358)

--  作者:诚学思行
--  发布时间:2019/5/24 15:01:00
--  关于父子表同步加载的问题

帮助文件:

父表与子表同步加载之二

上一节介绍的父表与子表同步加载的方法,对于多数用户来说,可能稍微复杂了一点,而且效率相对比较低,帮助之所以保留这种方法,主要还是为了让大家熟悉和演练一下SQL语句。

实际上,Foxtable提供了非常简单高效的同步加载方法,你要做的只需在父表的AfterLoad事件中加上一行代码:

e.DataTable.LoadChildren("子表")

例如订单和订单明细通过订单编号建立关联,订单表动态加载,每次只加载一定数量的订单进行处理,为了每次加载订单后,能同步加载这些订单的订单明细,只需在订单表的AfterLoad事件加上代码:

e.DataTable.LoadChildren("订单明细")

是的,就是这么简单,因为你用的是Foxtable。

LoadChildren是DataTable的一个方法,用于加载子表数据,而且只加载那些父表已经存在对应行的子表数据。

 

 

 

假设我在AfterLoad(全局表事件)中写下以下代码:

Dim glbs As String = ""    \'关联表
Dim zbs As String = ""    \'关联子表(当前表作为父表)

\'同步加载子表关联数据
glbs = Functions.Execute("获取所有已加载的关联表名称",e.DataTable.Name)
zbs = glbs.Split(",")(0)
If zbs > "" Then
    Dim zb() As String = zbs.Split("|")
    For i As Integer = 0 To zb.Length - 1
        e.DataTable.LoadChildren(zb(i))
    Next
End If

就是同步加载所有当前表e.datatable的子表;

 

需要请教的问题:

1、因为父表的AfterLoad事件可以触发加载全部子表的相关数据,那么会自动触发子表的AfterLoad事件,通过上面的代码会自动同步加载孙表数据……?如此循环往复。也就是说,一个业务模块,如果有一个祖宗表(就是只有子表、孙表、……,没有父表),只要处理这一个祖宗表的AfterLoad事件就行了;

2、因为AfterLoad事件可能由于OpenQQ即时同步自动触发,也会把上面的步骤再自动循环一次,是否会造成效率的下降?如何避免?


--  作者:有点甜
--  发布时间:2019/5/24 15:15:00
--  

参考

 

http://www.foxtable.com/webhelp/scr/2218.htm