标题: 如何重用类似这样的代码?? [打印本页] 作者: lwwvb 时间: 2016-3-19 18:17 标题: 如何重用类似这样的代码?? Public Sub LoadMenuFormTable(Optional Tablename As String = "MainMenu")
Dim r As Recordset
Set r = SQLGetRst("SELECT DISTINCT MainMenu.pid FROM ?", Tablename)
If r.RecordCount > 0 Then r.MoveFirst '''Load Menu Level ''''''''''''''''A
Do While r.EOF = False
AddMenuLevel r("pid"), "folder"
r.MoveNext
Loop ''''''''''''''B
'''''''Load all Menu
Set r = SQLGetRst("select * from ?", Tablename)
''''这里又要遍历一次r了
.....
End Sub
这是我写的一个类中的过程,我发现了一个有趣的问题,数据集的遍历这几句(A到B处),经常要重写。感觉这几句应该可以写成一个模块。在c#中有署名过程能解决,但我希望能把上面能改为一句,类似
GoRecordAndExecProc(r,"AddMenuLevel r(‘pid'),'folder')
的方法来执行,我觉得可以用callbyname,但问题又来了AddMenuLevel是本类中的过程,它如何知道callbyname中的所需的第一个参数 object ?
作者: tmtony 时间: 2016-3-19 18:20
是的,这个在VFP 或 C 指针 可能好实现
在Access可能要想其它办法作者: lwwvb 时间: 2016-3-19 18:29
谢谢王站,我觉得唯一只能在callbyname+eval来动态执行,行不行还在测试中。。作者: lwwvb 时间: 2016-3-19 19:15
经过片刻的研究,发现这种重用最好是把一头一尾写成过程,以简化它的代码,并不是一句来调用,否则都会简单变得复杂化:
Function RStart(r As Recordset) As Boolean
RStart = r.RecordCount > 0
If RStart Then r.MoveFirst
End Function
Function REnd(r As Recordset) As Boolean
r.MoveNext
REnd= r.EOF
End Function
以上两个是全局函数
然后使用时:
If RStart(r) Then
Do
AddMenuLevel r("pid"), "folder" '
Loop Until REnd(r)
End If