en un módulo bas.....
Option Explicit
Public Cn As ADODB.Connection
Public sql As String
Public PaginaActual As Long
Public Paginas As Long
Public Const RegistrosPorPagina As Long = 500
Public Sub CargarValores(ListView As ListView, Consulta As String, Pagina As Long)
Dim rs As New ADODB.Recordset, fd As ADODB.Field
Dim i As Long, Regs As Long
Dim Final As Boolean
Dim tItem As ListItem
ListView.ListItems.Clear
rs.PageSize = RegistrosPorPagina
rs.Open Consulta, Cn, adOpenKeyset
If Pagina <= rs.PageCount Then rs.AbsolutePage = Pagina
Pagina = rs.PageCount
i = 1
For Each fd In rs.Fields
If ListView.ColumnHeaders.Count < i Then ListView.ColumnHeaders.Add
ListView.ColumnHeaders(i).Text = fd.Name
i = i + 1
Next
Final = rs.EOF
Do Until Final
i = 1
Regs = Regs + 1
For Each fd In rs.Fields
If i = 1 Then
Set tItem = ListView.ListItems.Add(, , "" & fd.Value)
Else
tItem.SubItems(i - 1) = "" & fd.Value
End If
i = i + 1
Next
rs.MoveNext
If (Regs >= RegistrosPorPagina) Or (rs.EOF) Then Final = True
Loop
rs.Close
Set rs = Nothing
End Sub
-------------------------------
En el Form.....
un ListView con la propiedad View = lvwReport
5 CommandButton (4 para moverse por las páginas y 1 para salir)
un Label para mostar el número de página.
Option Explicit
Private Sub Form_Load()
Set Cn = New ADODB.Connection
Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\LaBaseDatos.mdb"
sql = "Select * FROM [LaTabla] Where [ElCampo] = 'UnaVariable'"
PaginaActual = 1
Paginas = PaginaActual
CargarValores ListView1, sql, Paginas
Label1.Caption = "Página " & PaginaActual & " de " & Paginas
Primero.Enabled = False
Anterior.Enabled = False
End Sub
Private Sub Anterior_Click()
If PaginaActual > 1 Then PaginaActual = PaginaActual - 1
Paginas = PaginaActual
CargarValores ListView1, sql, Paginas
Label1.Caption = "Página " & PaginaActual & " de " & Paginas
Siguiente.Enabled = True
Ultimo.Enabled = True
If PaginaActual = 1 Then
Anterior.Enabled = False
Primero.Enabled = False
End If
End Sub
Private Sub Primero_Click()
PaginaActual = 1
Paginas = PaginaActual
CargarValores ListView1, sql, Paginas
Label1.Caption = "Página " & PaginaActual & " de " & Paginas
Primero.Enabled = False
Anterior.Enabled = False
Siguiente.Enabled = True
Ultimo.Enabled = True
End Sub
Private Sub Siguiente_Click()
If PaginaActual < Paginas Then PaginaActual = PaginaActual + 1
Paginas = PaginaActual
CargarValores ListView1, sql, Paginas
Label1.Caption = "Página " & PaginaActual & " de " & Paginas
Primero.Enabled = True
Anterior.Enabled = True
If PaginaActual = Paginas Then
Ultimo.Enabled = False
Siguiente.Enabled = False
End If
End Sub
Private Sub Ultimo_Click()
PaginaActual = Paginas
CargarValores ListView1, sql, Paginas
Label1.Caption = "Página " & PaginaActual & " de " & Paginas
Primero.Enabled = True
Anterior.Enabled = True
Siguiente.Enabled = False
Ultimo.Enabled = False
End Sub
Private Sub Salir_Click()
End
End Sub
Fin ----------------------------------
Como verás la constante pública "RegistrosPorPagina" es la que, como su nombre dice, indica los registros que se visualizarán en cada página.
He probado con 500 en una tabla de 65.000 registros y 14 campos y tarda décimas de segundo en visualizar los datos.
De todas formas mostrar 500 registros por página me parecen demasiado, yo lo limitaría a un máx de 50.
Espero que te sirva, si tienes alguna duda, nos lo dices.