實現功能如下:
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