VB数据库分页显示记录实例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
vb数据库分页显示记录实例
dadaV20190503
一、准备工作
1、添加控件DateGrid、2个TextBox(TxtPageSize、txtPageMsg)
2、打开Access(创建表:系统用户;字段:用户名,身份,口令)
效果图
二、原理
(1)利用记录集的分页特性进行记录分页
(2)使用DataGrid控件的数据绑定功能显示分页后的记录
1、设计分析
记录集的PageSize属性用于设置或返回一个记录也中可包含的记录个数,其默认值为10.显示当前记录页数据有两个方法;
方法1:使用DataGrid控件。
DataGrid控件会显示记录集中的全部数据,所以不能直接将分页的记录集绑定到DataGrid控件,可以讲当前记录也中的记录复制到一个新的记录集中,再将其绑定到DataGrid控件,便可显示当前记录页数据;
方法2:使用MSFLexGrid控件,MSFLexGrid控件可在设计时将其绑定到Data控件,在运行时,则可通过设置控件的TextMatrix属性来显示数据。
2、技术要领
1)记录集的分页特性
PageSize属性:设置或返回一个记录页中可包含的记录个数,其默认值为10;
PageCount属性:返回一个记录集的记录页总数;
AbsolutePage属性:设置或返回当前记录页编号;
2)DataGrid控件
DataGrid控件使用代表记录的行和列来显示数据,并允许对数据进行修改,对数据的修改可以自动保存;
DataGrid控件绑定到数据源之后,可自动从数据源中获得数据。
DataGrid控件的列与数据源记录集的字段个数相同,而行数则与记录集的个数相同,DataGrid控件还可以将记录集字段名称自动显示为列的名称。
注:使用时可将DataGrid控件的DataSource属性设置为ADOData控件或Recordset对象完成数据绑定。
DataGrid控件为外部ActiveX控件,使用前需要将其添加到工程中,其部件名称为MicrosoftDataGridControl6.0
3)MSFlexGrid控件
MSFlexGrid控件和DataGrid控件类似,都是以行列方式显示数据。
MSFlexGrid控件可在设计时将其绑定到Data控件,运行时,如果设置控件的DataSource属性则会出错。
此时可通过设置控件的TextMatrix属性来显示数据。
MSFlexGrid控件的相关属性
Cols属性:设置和返回控件的列数;
Rows属性:设置和返回控件的行数;
TextMatrix属性:设置和返回控件任意单元格的文本内容;
MSFlexGrid控件为外部ActiveX控件,使用前需要将其添加到工程中,其部件名称为MicrosoftMSFlexGridControl6.0;
4)ADO常用方法Append
功能:将对象追加到集合中,如果集合是fields,可以先创建field对象然后再将其追加到集合中。
格式:1、collection.appendobject
Collection:集合对象
Object:对象变量,代表所要追加的对象
例1:
Dim objcmd as new command
Dim Parm as new Parameter
‘创建新的Parameter对象
Set Parm=objCmd.creadParameter(“用户名”,adVarChar,adParamInput,10)
‘将Parm追加到Parameters集合中
Objcmd.Parameters.append Parm
格式:2、fields.Appendname,type,definedsize,attrib
Name:字符串,新field对象名称,不得与fields中的任何其它对象同名;
Type:新字段的数据类型,其默认值为adEmpty;
Definedsize:可选,指示新字段定义大小,默认definedsize未指定;
Attrib:可选,指定新字段属性,默认值adflddefault;
注:
1.在调用fields.append方法前没设置cursorlocation属性,当使用open方法打开recordset时,cursorlocation 将被自动设置为aduseclient。
2.对打开的recordset或已设置actionconnection属性的recordset,调用fields.append方法将引发运行时错误。
例2:
Dim objDataSource as new recordset
Dim obiRs as new recordset
Dim intrecord as integer
For intrecord=0 to objRs.fields.count-1
objDataSource.fields.append objRs.fields(intrecord).name,adVarChar,_
objRs.fields(intrecord).definedSize
Next ‘将记录集的数据都追加到临时记录集的
三、操作过程
‘具体代码如下(直接复制可运行):
Dim objRs As New Recordset, objCn As New Connection, intPage As Integer
'定义一个过程用于显示当前记录页数据。
将当前记录页数据复制到一个新的RecordSet对象中,然后将其绑定到DataGrid控件,从而显示当前记录页数据。
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
objRs.PageSize = Val(TxtPageSize) '重新设置objrs每页显示的记录条数
objRs.AbsolutePage = intPage '重新设置objrs的当前记录页
For intRecord = 1 To objRs.PageSize '将当前记录页中的数据写入objDataSource
objDataSource.AddNew
objDataSource!用户名= objRs!用户名'作用:获得Field(字段)对象的值;讲解:Recordset对象由记录和列(字段)组成;rs("FieldName")与rs!fieldname与rs.fieldname("fieldname").value效果一样;
objDataSource!口令= objRs!口令
objDataSource!身份= objRs!身份
objRs.MoveNext
If objRs.EOF Then Exit For
Next
Set DataGrid1.DataSource = objDataSource
txtPageMsg = intPage & "/" & objRs.PageCount '刷新当期记录页的信息
NumberPage.Text = intPage
TotalPage.Text = objRs.PageCount
End Sub
Private Sub cmdNext_Click()
If intPage <> objRs.PageCount Then
intPage = intPage + 1
ShowData (intPage)
End If
End Sub
Private Sub cmdPre_Click()
If intPage <> 1 Then '如果当前页编号不为1,则向前切换
intPage = intPage - 1
ShowData (intPage)
End If
End Sub
Private Sub Form_Load()
Dim strSQL As String, strCn As String
'TxtPageSize = Text1.Text
TxtPageSize = "5" '设置记录页大小和当前记录页的初始值
intPage = 1
'建立数据库连接
strCn = "provider=microsoft.jet.oledb.4.0;persist security info=false;" & _
"data source=" & "D:\用户目录\我的文档\数据库\Student.mdb"
objCn.ConnectionString = strCn
objCn.Open
With objRs '创建客户端的记录集
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.Open " 系统用户", objCn, adOpenStatic, adLockReadOnly
End With
ShowData (intPage) '显示当前记录页数据
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 <= ("9") Then
'检查当前记录的记录页大小是否在有效范围之内
bok = Val(TxtPageSize & Chr(KeyAscii)) < 1 Or Val(TxtPageSize & Chr(KeyAscii)) > 10 If bok Then '如果输入超出范围,则显示相应的提示信息
MsgBox "每页显示记录范围为[1,10]"
KeyAscii = 0 '设置keyascii为0取消当前输入数字
End If
End If
End Sub
Public Sub Form_unload(cancle As Integer)
objCn.Close
Set objCn = Nothing
Set objRs = Nothing
End Sub。