【Access小品】越俎代庖--递归函数示例,Access树控件制作家谱的示例,Access家谱数据库
时 间:2015-06-04 15:19:25
作 者:煮江品茶 ID:10802 城市:武汉
摘 要:【Access小品】越俎代庖 --- 递归函数示例。
正 文:
从道理上讲,函数是可以替代子程序的。原因在于函数体和子程序体的构成是没有什么大的差别的,唯一不同的是函数体中可以存在一条返回数据的语句。也就是说子程序能实现的功能,函数都是可以实现的。而函数能实现的功能,子程序并不一定都能实现。这样说来,子程序的存在只是为了保留一种概念上的功能区分。
版友付谦同志昨日里问了一个关于家谱用TreeView呈现方面的问题。我们知道家谱是一个不定级的层次结构,最适于用递归的方法来得到一个树形结构。所以我们通常可以用一个递归子程序来实现TreeView节点的加载。假如我们希望在每个节点上,反映出这个节点的所有后代成员的总数,这就不是一个简单的事情了。说它不简单,是因为它所要做的动作是向节点的Text属性写入一个统计出来的数据,递归动作本身比较难以统计这个数据。在这个特定的情况下,递归子程序比较难以实现边统计变写入的功能。
怎么办呢?答案很简单,将递归子程序改为递归函数,这个问题就很简单的可以解决了。函数是可以一边做一些动作,一边进行计算并返回数据的,这些返回的数据可以容易的参与递归运算。我们可以将代码大体写成如下:
Private Function SetNodes(ByRef tree As TreeView, ByRef n As Node) As Long
Dim cn As Node
Dim rs As New ADODB.Recordset
Dim ssql As String
Dim i As Long
Dim cnt As Long
ssql = "select * from 族人信息 where " & n.Tag
rs.Open ssql, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
cnt = rs.RecordCount
For i = 1 To rs.RecordCount
Set cn = tree.Nodes.Add(n.Key, 4, "b" & rs!族人代码.Value, rs!姓名.Value)
cn.Tag = "nz(父代码,0)=" & rs!族人代码.Value
'递归运算
cnt = cnt + SetNodes(tree, cn)
rs.MoveNext
Next
'写入节点的Text属性
n.Text = n.Text & " (" & n.Children & "/" & cnt & ")"
SetNodes = cnt
rs.Close: Set rs = Nothing
Set cn = Nothing
End Function
示 例:
视 图:
Access软件网官方交流QQ群 (群号:483923997) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- Access两种方式实现即时更...(03.01)
- Access隐藏与显示lacc...(01.12)
- 【Access高效办公】将每个...(12.23)
- Access21点游戏源代码(12.13)
- 【Access窗体导出Exce...(11.15)
- 【Access开发】Acces...(11.14)
- 通过Access宏录入数据到选...(11.10)
- 用DLOOKUP函数将需求表中...(10.31)
- Access日期区间段查询数据...(10.25)
学习心得
最新文章
- Access快速开发平台--在WI...(03.08)
- 使用SQL语句删除xscj表中学号...(03.08)
- Access快速开发平台进销存教程...(03.07)
- Access快速开发平台--frm...(03.06)
- 【Access删除查询】删除数字最...(03.06)
- Access快速开发平台进销存教程...(03.05)
- Access快速开发平台进销存教程...(03.04)
- Access快速开发平台--IsL...(03.02)
- Access两种方式实现即时更新月...(03.01)
- Access开发的资金管理系统;基...(02.29)