帮助文件:
父表与子表同步加载之二
上一节介绍的父表与子表同步加载的方法,对于多数用户来说,可能稍微复杂了一点,而且效率相对比较低,帮助之所以保留这种方法,主要还是为了让大家熟悉和演练一下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即时同步自动触发,也会把上面的步骤再自动循环一次,是否会造成效率的下降?如何避免?