注册 登录
Office中国论坛/Access中国论坛 返回首页

leolong的个人空间 http://www.office-cn.net/?155046 [收藏] [复制] [分享] [RSS]

日志

VB开发数据库之分页显示记录

已有 1895 次阅读2009-4-28 18:03 |个人分类:VB相关|

教程内容:

 

使用DataGrid控件。DataGrid控件可以显示记录集中的全部数据,所以不能直接将分页的记录集绑定到DataGrid控件。可以将当前记录页中的记录复制到一个新的记录集中,再绑定到DataGrid控件,这样就可以显示当前页的数据了。

 

PageSize属性:设置或者返回一个记录页中可以包含的记录个数,默认值是10.

PageCount属性:返回一个记录集的记录页总数

AbsolutePage属性:设置或者返回当前记录页编号

 

DataGrid控件:

代表记录的行和列来显示数据,并且允许对数据进行修改,同时对数据的修改可以自动保存。DataGrid控件绑定到数据源之后,可以自动从数据源获得数据,DataGrid控件的列与数据源记录集的字段个数相同,行与记录集的记录个数相同。DataGrid控件还可以将记录集字段名称自动显示为列的名称。

  DataGrid控件是外部ActiveX控件,使用前需要将其添加到工程中,其部件名称为Microsoft DataGrid Control 6.0(OLEDB).

 

MSFlexGrid控件:

  MSFlexGrid控件和DataGrid控件类似,都是以行和列的方式显示数据。MSFlexGrid控件可以在设计时绑定到Data控件。在运行时,如果设置控件的DataSource属性就会出错。这时候我们就可以通过设置控件的TextMatrix属性来显示数据。

  Cols属性:设置和返回控件的列数

  Rows属性:设置和返回控件的行数

  TextMatrix属性:设置和返回控件任意单元格的文本内容。

MSFlexGrid控件也是外部ActiveX控件,使用前需要将其添加到工程中,其部件名称为Microsoft FlexGrid Control 6.0.

 

 

 

 

 

'定义在窗体各事件过程中使用的公用变量

Dim objRs As New Recordset, objCn As New Connection, intPage As Integer

 

Private Sub cmdPre_Click()

    If intPage <> 1 Then        '修改当前页编号,向前切换记录页

        intPage = intPage - 1

        ShowData (intPage)

    End If

End Sub

 

Private Sub cmdNext_Click()

    If intPage <> objRs.PageCount Then  '修改当前页编号,向后切换记录页

        intPage = intPage + 1

        ShowData (intPage)

    End If

End Sub

Private Sub Form_Load()

    Dim strSQL As String, strCn As String

    txtPageSize = "5"       '设置记录页大小和当前记录页的初始值

    intPage = 1

   

    '建立数据库连接

    strCn = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;" & _

            "Data Source=" & App.Path & "\数据库\db1.mdb"

    objCn.ConnectionString = strCn

    objCn.Open

   

    With objRs                          '创建客户端的记录集

        .CursorLocation = adUseClient   '指定使用客户端光标

        .CursorType = adOpenStatic      '指定使用静态光标

        .Open "系统用户", objCn, adOpenStatic, adLockReadOnly

    End With

   

    ShowData (intPage)                  '显示当前记录页数据

End Sub

Public Sub ShowData(ByVal intPage As Integer)

    '实现分页显示记录功能

    Dim intPageCount As Integer, intRecord As Integer

    Dim objDataSource As New Recordset

    '创建一个局部Recordset对象保存objRs当前记录页数据

    For intRecord = 0 To objRs.Fields.Count - 1

        objDataSource.Fields.Append objRs.Fields(intRecord).Name, _

                                    adVarChar, _

                                    objRs.Fields(intRecord).DefinedSize

    Next

    objDataSource.Open                  '打开局部Recordset对象

    objRs.PageSize = Val(txtPageSize)   '重新设置objRs每页显示的记录条数

    objRs.AbsolutePage = intPage        '重新设置objRs的当前记录页

    For intRecord = 1 To objRs.PageSize 'objRs当前记录页中数据写入objDataSource

        objDataSource.AddNew

        objDataSource!用户名 = objRs!用户名

        objDataSource!口令 = objRs!口令

        objDataSource!身份 = objRs!身份

        objRs.MoveNext

        If objRs.EOF Then Exit For

    Next

    Set DataGrid1.DataSource = objDataSource 'objDataSource设置为数据网格的数据源

    txtPageMsg = intPage & "/" & objRs.PageCount '刷新当前记录页信息

End Sub

 

Private Sub Form_Unload(Cancel As Integer)

    '关闭数据库连接,释放Recordset对象objRsConnection对象objCn

    objCn.Close

    Set objCn = Nothing

    Set objRs = Nothing

End Sub

 

Private Sub txtPageSize_KeyPress(KeyAscii As Integer)

    Dim bOk As Boolean

    If KeyAscii = vbKeyReturn And Trim(txtPageSize) <> "" Then

        '如果敲的是回车键,并且记录页大小不是空值,则刷新当前记录页

        intPage = 1

        ShowData (intPage)

    ElseIf KeyAscii >= Asc("0") And KeyAscii <= Asc("9") Then

        '检验当前设置的记录页大小是否在有效范围之内

        bOk = Val(txtPageSize & Chr(KeyAscii)) < 1 Or _

              Val(txtPageSize & Chr(KeyAscii)) > 10

        If bOk Then             '如果输入超出范围,则显示相应的提示信息

            MsgBox "每页显示记录范围为[110]"

            KeyAscii = 0        '设置KeyAscii0取消当前输入数字

        End If

    End If

End Sub

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

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

GMT+8, 2024-5-13 16:04 , Processed in 0.075260 second(s), 17 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回顶部