实现功能如下:

1、指定每页显示记录:CmbRecNum_Change 

 

 

代码如下:

Option Explicit

Dim cnn As ADODB.Connection     \'声名数据库连接对象变量
Dim rst As ADODB.Recordset      \'声名记录集对象变量
Dim rstDS As ADODB.Recordset    \'声名记录集对象变量
Dim rsPage As Integer           \'用于记录当前处于第几页

\'窗体加载时,完成数据库的连接,设置显示每页的记录数
Private Sub UserForm_Initialize()
    
    Dim i As Integer
    For i = 1 To 20
        CmbRecNum.AddItem i
    Next
    CmbRecNum.ListWidth = 50
    CmbRecNum.ColumnWidths = 35
    CmbRecNum.Value = 5         \'默认一页有 5 条记录
    rsPage = 1                 \'默认第一页
    
    \'建立数据库的连接
    Set cnn = New ADODB.Connection  \'创建连接对象
    cnn_open cnn
    
    \'查询表中数据生成记录集
    Dim sql As String
    sql = "select * from 员工 order by 编号 asc"
    Set rst = New ADODB.Recordset
    rst.Open sql, cnn, adOpenKeyset, adLockOptimistic
    
    \'生成 ListView 控件的基本框架结构
    With ListView1
        .ColumnHeaders.Clear    \'清除表头
        .ListItems.Clear        \'清除记录
        .View = lvwReport       \'设置显示方式为"报表形式"
        .FullRowSelect = True   \'允许选中整行
        .Gridlines = True       \'显示网格线
        
        For i = 0 To rst.Fields.Count - 1
            \'显示标题,设置标题宽度
            Select Case True
            Case i = 0
                .ColumnHeaders.Add , , rst.Fields(i).Name, 50
            Case i = 2
                .ColumnHeaders.Add , , rst.Fields(i).Name, 100, lvwColumnCenter
            Case InStr("8,9", i)
                .ColumnHeaders.Add , , rst.Fields(i).Name, 130
            Case Else
                .ColumnHeaders.Add , , rst.Fields(i).Name, 50, lvwColumnCenter
            End Select
        Next
    End With
    AddRows rsPage
    
End Sub

\'自定义过程,用于调整 ListView 控件上显示当前页的数据
Public Sub AddRows(myPage As Integer)
    On Error Resume Next
    Dim i As Integer, j As Integer
    \'创建局部 Recordset 对象 rstDB ,保存 rst 记录集中当前页的记录数据
    Set rstDS = New ADODB.Recordset
    For i = 0 To rst.Fields.Count - 1
        \'Append:追加字段
        rstDS.Fields.Append rst.Fields(i).Name, rst.Fields(i).Type, rst.Fields(i).DefinedSize
    Next
    rstDS.Open  \'打开局部 Recordset 对象 rstDS
    
    \'PageSize:表示记录集每页的记录条数
    rst.PageSize = Val(CmbRecNum.Value)     \'重置 rst 每页的记录条数
    rst.AbsolutePage = myPage               \'重置 rst 的当前记录页
    
    \'将 rst 当前页的记录保存到 rstDS 中
    For i = 1 To rst.PageSize
        rstDS.AddNew        \'添加 1 条记录
        For j = 0 To rst.Fields.Count - 1
            rstDS.Fields(j).Value = rst.Fields(j).Value
        Next
        If rst.EOF Then Exit For
        rst.MoveNext        \'继续赋值
    Next
    
    \'在 ListView 控件中显示当前页的记录数据
    rstDS.MoveFirst     \'定位 rstDS 中的第一条记录
    With ListView1
        .ListItems.Clear
        For i = 1 To rstDS.RecordCount
            .ListItems.Add , , rstDS.Fields(0).Value     \'添加第1列内容
            For j = 1 To rstDS.Fields.Count - 1
                .ListItems(i).SubItems(j) = rstDS.Fields(j).Value   \'添加后续列内容
            Next
            If rstDS.EOF Then Exit For
            rstDS.MoveNext      \'继续赋值
        Next
        
    End With
    
    txtPage.Value = myPage & "/" & rst.PageCount
    
End Sub

Sub cnn_open(cnn)
    With cnn
        .Provider = "microsoft.ace.oledb.12.0"
        .ConnectionString = "data source=" & ThisWorkbook.Path & "\学生管理.accdb"
        .Open
    End With
End Sub

Private Sub btnFirst_Click()
    rsPage = 1
    AddRows rsPage
End Sub

Private Sub btnBefore_Click()
    If rsPage <> 1 Then
        rsPage = rsPage - 1
        AddRows rsPage
    End If
End Sub

Private Sub btnNext_Click()
    If rsPage <> rst.PageCount Then
        rsPage = rsPage + 1
        AddRows rsPage
    End If
    
End Sub

Private Sub btnLast_Click()
    rsPage = rst.PageCount
    AddRows rsPage
End Sub

Private Sub btnClose_Click()
    rst.Close
    cnn.Close
    Set rst = Nothing
    Set cnn = Nothing
    Set rstDS = Nothing
    Unload Me
End Sub

\'组合框Change事件,当改变组合框的值,重新刷新窗体上的记录显示
Private Sub CmbRecNum_Change()
   rsPage = 1
   AddRows rsPage
End Sub

 

版权声明:本文为Stefan-Gao原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Stefan-Gao/p/13663860.html