组合框RowSourceType之自定义函数-Aaron
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> Access数据库-模块/函数/VBA


组合框RowSourceType之自定义函数

发表时间:2013/12/16 22:18:38 评论(0) 浏览(15062)  评论 | 加入收藏 | 复制
   
摘 要:大家都知道组合框与列表框的数据源类型有:表/查询、字段列表、数值列表。其实还有一个类型,那就是用户自定义函数类型。
正 文:

大家都知道组合框与列表框的数据源类型有:表/查询、字段列表、数值列表。其实还有一个类型,那就是用户自定义函数类型。

看下面的窗体:

组合框与列表框与平时没有两样,但是秘密在于:

它们的RowSourceType是用户自定义的函数,并且RowSource为空。

在窗体的加载事件中可以看到:

红圈中的就是用户自定义的函数。

函数建立在一个模块当中是一个公共的函数。这个函数可不是随便写的,是有一定的格式的。

Function functionname(fld As Control, id As Variant, row AsVariant, col As Variant, code As Variant) As Variant


这个函数有5个参数:

  1. fld代表组合框或者列表框控件
  2. id 代表被填充的控件的唯一标识符,当在一个窗体中用此一个函数填充多个组合框与列表框时尤其重要
  3. row 要填充的行数
  4. col要填充的列数
  5. code内在的常量,用来控制函数的执行过程

这个函数要自动地被执行多次来完成对组合框或列表框的数据填充。

先看一下这个函数的例子代码:

Dim mrstContact As DAO.Recordset, mintRow As Integer '//模块级变量

'//用户自定义函数

Public Function ListMDBs(fld As Control, id As Variant, _
                         row As Variant, col As Variant, _
                         code As Variant) As Variant
    Dim ReturnVal As Variant
    ReturnVal = Null

    Select Case code
    Case acLBInitialize                ' Initialize.
        Set mrstContact = CurrentDb.OpenRecordset("Select 姓氏,名字   FROM 联系人")
        ReturnVal = mrstContact.RecordCount
    Case acLBOpen                        ' Open.
        ReturnVal = Timer
    Case acLBGetRowCount            ' Get number of rows.
        With mrstContact
            .MoveLast
            .MoveFirst
            ReturnVal = .RecordCount
        End With
    Case acLBGetColumnCount    ' Get number of columns.
        ReturnVal = 2
    Case acLBGetColumnWidth    ' Column width.
        ReturnVal = -1
    Case acLBGetValue
        ' Get data.
        With mrstContact
            .MoveFirst
            .Move row
            ReturnVal = .Fields(col)
        End With
    Case acLBEnd
        MsgBox "The End"
    End Select

    ListMDBs = ReturnVal

End Function


这个函数是如何运行的呢?

code的各种情况按照下图中所示进行执行。只有最后一个是要一直不断的执行的,比如,每当你点击下拉箭头,展开组合框时,或在列表框的行间移动时。

在只执行一次的case分支中,用来对整个控件进行初始化操作。包括数据源、行数、列数。

请注意,由于此函数会不断重复的运行,所以数据源要么采用全局变量要么采用静态变量。如果采用普通的函数内局部变量,每次执行的时候就会被覆盖,这样数据源就会错误。

函数使用的关键一点是如何正确的填充数据。

在GetValue分支中,函数的参数row与col决定数据填充的位置,此时要根据这两个参数将数据源中正确的数据传递出来。即建立如下的函数关系:

Data=FDataSource(row,col)



附件是英文原版的解释:

点击下载此文件


Access软件网交流QQ群(群号:198465573)
 
 相关文章
得到access表的数据类型(RecordSet.fields(i...  【jingyu  2009/7/16】
简述RecordSource SourceObject Contr...  【金宇   2011/5/4】
Access开发人员参考:RecordsetTypeEnum枚举与...  【红尘如烟  2012/12/25】
Forms!usysfrmMain!frmChild.Source...  【小英  2013/2/2】
[转]SQLServer跨服务器访问数据库(openrowset/...  【金宇  2013/5/27】
【译文】如何允许用户为未绑定的组合框添加项目  【周芳  2013/11/26】
如何在组合框的下拉列表项里添加一空白项  【桑松木  2013/12/8】
常见问答
技术分类
相关资源
文章搜索
关于作者

Aaron

文章分类

文章存档

友情链接