设为首页收藏本站Access中国
Office中国(www.office-cn.net),专业Office论坛

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

用记录集填充表格函数

2007-9-12 10:41| 发布者: ivwooo| 查看: 1357| 评论: 1

'------------------------------------------------------------------------------------------------------------------------
'函数名:RsFillFlex2

'功能:用记录集填充表格
'创建日期:2007-8-22
'更新日期:2007-8-22
'作者:ggyy66
'注意:从第1列开始填充数据,第0列自动生成一个序号列
'由于多出一个序号列,所以表格的列数比记录集的字段数多1
'---------------------------------------------------------------
Public Function RsFillFlex2(strcaption As String, _
                            grd As MSFlexGrid, _
                            rs As adodb.Recordset, _
                            Optional alignFlag As Integer = 0, _
                            Optional showZeroFlag As Integer = 0, _
                            Optional Rows_Fixed As Integer = 1, _
                            Optional TableHead As Integer = 1) As Boolean
    '本函数特别要求,对于含的小数点的数值型数据,要根据数据表中的结构显示小数点个数
    '功能:将记录添充到表格中
    '参数一:表头格式
    '参数二:表格控件名称
    '参数三:记录集
    '参数四:表示是否指定"列对齐方式",为1根据记录集的字段类型来设置,为0根据表格的formatstring设置
    '参数五:是否显示数字0,为0不显示,为1要显示
    '参数六:固定行数,默认为1
    '参数七:表头所占的行数,默认为1 (该参数有何意义?)
    '好象记录集必须是客户端游标才行,服务器端游标记录数不好取

    Dim i As Long, j As Long, strField As String             'strField用于存放字段内容
    Dim vnttmp As Variant                               '临时存放每个单元格内容[要能存放各种类型数据,故为variant型]
    Dim rsCols As Long                                  '记录集的字段数
    Dim grdCols As Long                                 '表格的列数

    on Error GoTo errhandler


    '记录集未打开,则返回错误
    If rs.State <> adStateOpen Then
        MsgBox "没有可供显示的记录集!", 32, "提示"
        RsFillFlex2 = False
        Exit Function
    End If

    '首先判断记录集是否有内容[如果无内容要清除表格原有内容],因为记录集正常打开的情况下,也可能一条记录都没有
    If rs.BOF = True And rs.eof = True Then
        grd.Rows = grd.FixedRows                    '清除除表头的所有内容
        grd.Rows = Rows_Fixed + 1                   '无记录时,显示一个空白行
        RsFillFlex2 = True
        Exit Function
    End If

    '注意:不能设置固定行,否则会报错[设置固定行时,除非固定行比行数小一,否则报错]

    '以下代码运行的前提是:已有记录
    With grd
        .Rows = .FixedRows                                  '将行数设置成固定行的行数
        .Clear                                              '清除原有内容[重要]
        .FormatString = strcaption                          '格式化表头,确定列数
        grdCols = .Cols                                     '取表格列数
        rsCols = rs.Fields.Count                            '记录集字段数
        '判断传来的表头与记录集的字段数是否一致
        If grdCols <> rsCols + 1 Then
            '            MsgBox grdcols
            '            MsgBox rscols
            MsgBox "记录集字段数与表格列数不匹配,表格列数应比记录集列数多1,第0列为序号列!", 16, "提示"
            RsFillFlex2 = False
            Exit Function
        End If

        '下面进行表格填充[只有在真正填充之前,才能设置成不重绘,否则容易花屏]
        .Redraw = False                                  '不重绘,目的是提高速度

        '确定表格总行数[因为存在表头,故表数行数应等于记录条数加一]
        .Rows = rs.RecordCount + TableHead                     '该设定决定表格有多少行显示数据,很重要

        '根据参数决定是否设置各列对齐方式,为1时不按formatstring设置,按记录集字段类型设置
        If alignFlag = 1 Then
            For j = 1 To rs.Fields.Count
                Select Case rs.Fields(j - 1).Type
                    Case adDecimal, adDouble, adSingle, adNumeric, adBigInt, adInteger, adTinyInt, adSmallInt

发表评论

最新评论

引用 dslotus 2008-3-20 08:23
很实际的事例。

查看全部评论(1)

关闭

站长推荐上一条 /6 下一条

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

GMT+8, 2018-12-13 01:27 , Processed in 0.068742 second(s), 18 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回顶部