Ⅰ、制作特点:
①利用记录集的分页特性进行记录分页
②使用DataGrid控件的数据绑定功能显示分页的记录
Ⅱ、设计分析:
记录集的PageSize属性用于设置或返回一个记录页中可包含的记录个数,其默认值为10.
显示当前记录页数据有两种方法:
方法①:使用DataGrid控件。这个控件会显示记录集中的全部数据,所以不能直接将分页的记录集绑定到DataGrid控件。可将当前记录页中的记录复制到一个新的记录集中,再将其绑定到DataGrid控件,便可显示当前记录页数据。
方法②使用MSFlexGrid控件。MSFlexGrid控件可在设计时将其绑定到Data控件。在运行时,则可通过设置控件的TextMatrix属性来显示数据。
Ⅲ、设计要领
①记录集的分页属性分别如下:
GageSize属性:设置或返回一个记录页中可包含的记录个数,其默认值为10
PageCount属性:返回一个记录集的记录页总数
AbsolutePage属性:设置或返回当前记录页编号
② DataGrid控件
此控件使用代表记录的行和列来显示数据,并允许对数据进行修改,对数据的修改可自动保存。DataGrid控件绑定到数据源之后,可自动从数据源获得数据。DataGrid控件的列与数据源记录集的字段个数相同,而行数则与记录集的记录个数相同。DataGrid控件还可将记录集字段名称自动显示为列的名称
③MSFlexGrid控件
MSFlexGrid以行方式显示数据,MSFlexGrid控件可在设计时将其绑定到Data控件。在运行是,如果设置控件的datasource属性则会出错,此时可通过设置控件的TextMatrix属性来显示数据
MSFlexGrid控件的相关属性:
cols属性:设置和返回控件的列数
Rows属性:设置和返回控件的行数
TextMatrix属性:设置和返回控件任意单元格的文本内容。
Ⅳ、设计过程:
①设计界面:
② 功能代码:
Option Explicit
Dim ObjRs As New Recordset
Dim ObjCn As New Connection
Dim IntPage As IntegerPrivate Sub CmdNext_Click()
If IntPage <> ObjRs.PageCount Then
IntPage = IntPage + 1
ShowData (IntPage)
End If
End SubPrivate Sub CmdPre_Click()
If IntPage <> 1 Then
IntPage = IntPage - 1
ShowData (IntPage)
End If
End SubPrivate 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 SubPublic 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 IntRecord
ObjDataSource.Open
ObjRs.PageSize = Val(TxtPageSize)
ObjRs.AbsolutePage = IntPage
For IntRecord = 1 To ObjRs.PageSize
ObjDataSource.AddNew
ObjDataSource!用户名 = ObjRs!用户名
ObjDataSource!口令 = ObjRs!口令
ObjDataSource!身份 = ObjRs!身份
ObjRs.MoveNext
If ObjRs.EOF Then
Exit For
End If
Next
Set DataGrid1.DataSource = ObjDataSource
TxtPageMsg = IntPage & "/" & ObjRs.PageCount
End SubPrivate Sub Form_Unload(Cancel As Integer)
ObjCn.Close
Set ObjCn = Nothing
Set ObjRs = Nothing
End SubPrivate 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="" then=""> '检验当前设置的记录页的大小是否在有效范围之内
bOK = Val(TxtPageSize & Chr(KeyAscii)) < 1 Or Val(TxtPageSize & Chr(KeyAscii)) > 10
If bOK Then
MsgBox "每页显示记录范围为[1,10]"
KeyAscii = 0
End If
End If
End Sub