设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1928|回复: 3
打印 上一主题 下一主题

[模块/函数] 如何重用类似这样的代码??

[复制链接]
跳转到指定楼层
1#
发表于 2016-3-19 18:17:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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 ?


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2016-3-19 18:20:00 | 只看该作者
是的,这个在VFP  或 C 指针 可能好实现
在Access可能要想其它办法
3#
 楼主| 发表于 2016-3-19 18:29:10 | 只看该作者
谢谢王站,我觉得唯一只能在callbyname+eval来动态执行,行不行还在测试中。。
4#
 楼主| 发表于 2016-3-19 19:15:41 | 只看该作者
经过片刻的研究,发现这种重用最好是把一头一尾写成过程,以简化它的代码,并不是一句来调用,否则都会简单变得复杂化:
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



这应该是最合理最简的办法了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-29 00:13 , Processed in 0.122231 second(s), 27 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表