ADO的movefirst, movelast, movenext, moveprevious 方法 将指定Recordset对象中移动到第一个,最后一个,下一个或前一个使该记录成为当前记录
语法:
recordset.{MoveFirst,Movelast,MoveNext,MovePrexious}
用法:
使用movefirst 方法将当前记录位置移动到Recordset中的第一个记录
使用MoveLast 方法将当前记录位置移动到Recordset中的最后一个记录,Recordset对象必须支持书签或者向后光标移动,否则调用该方法将产生错误。
使用Movenext方法将当前记录向前移动一个记录(向Recordset的底部)。如果最后一个记录是当前记录并且调用Movenext方法,则当EOF属性为True时试图向前移动将产生错误,这时候需要一个if语句判断EOF,避免报错。
使用MovePrevious方法将当前记录位置向后移动一个记录(向记录集的顶部)。Recordset对象必须支持书签或向后游标移动,否则方法调用将产生错误。如果当前记录已经是第一条记录,BOF为true,如果在向前查询记录,将会报错。
两种方法实现记录的查询:
方法一:利用上述四种方法,代码如下
'定义数据集对象
Dim mrc as ADODB.Recordset
Private Sub firstCmd_Click() ’查询第一条记录
'移动到数据集的第一条记录
Mrc.movefirst
'调用显示数据的函数
Call viewdata
End sub
Private Sub lastCmd_Click() '显示最后一条记录
'移动到数据集的最后一条记录
mrc.MoveLast
'调用显示数据的函数
Call viewdata
End Sub
Private Sub PreviousCmd_Click() '显示上一条记录
'移动到数据集的上一条记录
Mrc.moveprevious
’判断是否到起始位置
If Mrc.BOF then
Mrc.movelast
End if
Call viewdata
End sub
Private Sub lastCmd_Click() '显示下一条记录
‘数据集向后移动
Mrc.movenext
'判断是否到末尾位置
If mrc.EOF then
Mrc.movefirst
End if
Call viewdata
End sub
Public Sub viewdata() '定义函数
‘将记录显示在各个文本框之中
txtSID.Text = mrc.Fields(0)
txtName.Text = mrc.Fields(1)
combosex.Text = mrc.Fields(2)
DTPborn.Value = mrc.Fields(3)
ComboClassNo.Text = mrc.Fields(4)
txtTel.Text = mrc.Fields(5)
DTPru.Value = mrc.Fields(6)
txtAdress.Text = mrc.Fields(7)
txtcomment.Text = mrc.Fields(8)
End Sub
方法二:从数据库中进行查询,用top来选择需要显示哪些记录
数据库里面用了一个id作为自增长的列,根据id的正序排序查询第一条top 1 记录,本来想直接按照学号排序,但是学号的录入不连续,按照学号排序会改变数据库里面数据的顺序,但是添加一个自增长的列再添加数据的话不会改变前面记录的顺序。
Private Sub firstCmd_Click()
‘查询数据库的第一条记录
Txtsql=”selcet top 1 * from student_info order by id asc“
Set mrc=executesql(txtsql,msgtext)
'将数据库的第一条记录显示在各个文本框中
Call viewdata
End sub
Private Sub lastCmd_Click() '查询最后一条记录
‘查询数据库的最后一条记录
Txtsql=" select top 1 * from student_info order by id desc"
Set mrc=executesql(txtsql,msgtext)
‘将数据库的最后一条记录显示在各个文本框当中
Call viewdata
End sub
Private Sub nextCmd_Click() '查询下一条记录
'查询当前记录的下一条记录
txtsql = "select top 1 * from student_info where id>(select id from student_info where student_id='" & Trim(txtSID.Text) & "')" ‘查询当前记录的下一条记录
Set mrc = ExecuteSQL(txtsql, msgtext)
'查询到最后一条记录不再查询
If mrc.EOF = True Then
MsgBox "已查询到最后一条记录!", vbOKOnly + vbExclamation
Exit Sub
End If
'将下一条记录显示在各个文本框中
Call viewdata
End Sub
Private Sub PreviousCmd_Click() '查询上一条记录 t
txtsql = "select * from student_info where id=(select max(id) from student_info where id<(select id from student_info where student_id='" & Trim(txtSID.Text) & "'))"
Set mrc = ExecuteSQL(txtsql, msgtext)
'查询到第一条记录不再查询
If mrc.BOF = True Then
MsgBox "已经查询到第一条记录!", vbOKOnly + vbExclamation
Exit Sub
End If
Call viewdata
End Sub