这是在做项目的过程中学习到的,共享之。
大家可能经常会遇到这种情况:
sql="select * from table"
set ute(sql)
以上这两句执行完之后,如果使用response.dcount,就会得到结果-1,但这个时候,记录集rs当中其实是有记录的。为了得到正确的记录总数,我们使用getrows.
sql="select * from table"
set ute (sql)
ws '将记录集放在一个二维数组中
If Not Rs.Eof Then
For i=0 To Ubound(arrA,2) '遍历记录行
For j=0 To Ubound(arrA,1) '遍历记录列
Response.Write RsArr(j,i) '得到第i+1行,第j+1列的记录数据
Next
Next
End If
response.write ubound(arrA,2)+1
就会得到记录集的记录总数
response.write ubound(arrA,1)+1
就会得到记录集的总列数
==========================================================
另外,还有一种获取记录总数的方法:
jls= ute("Select count(*) From table").getstring
这时候,变量jls的值,便是记录总数了
随机取数据库
Function GetShouJi()
Dim Dr,Rows,rs,shouJiHao
set rs = ute("select shouji from
table")
Dr = rs.getRows()
Rows=ubound(Dr)
Randomize
shouJiHao=Dr(0,Int((Rows * Rnd) + 1))
End Function
GetRows 方法 (ADO)
将 Recordset 对象的多个记录恢复到数组中。
语法
array = recordset.GetRows( Rows, Start, Fields )
返回值
返回二维数组。
参数
Rows 可选,长整型表达式,指定检索记录数目。默认值为 adGetRowsRest (-1)。
Start 可选,字符串或长整型,将 GetRows 操作开始处的记录赋值给书签。也可使用下列 BookmarkEnum 值。
常量 说明
adBookmarkCurrent 从当前记录开始。
adBookmarkFirst 从第一条记录开始。
adBookmarkLast 从最后一条记录开始。
Fields 可选。代表单个字段名、顺序位置、字段名数组或序号位置数的变体型。ADO 仅返回这些字段中的数据。
说明
使用 GetRows 方法可将记录从 Recordset 复制到二维数组中。第一个下标标识字段,第二个则标识记录号。当 GetRows 方法返回数据时数组变量将自动调整到正确大小。
如果不指定 Rows 参数的值,GetRows 方法将自动检索 Recordset 对象中的所有记录。如果请求的记录比可用记录多,则 GetRows 仅返回可用记录数。
如果 Recordset 对象支持书签,则可以通过传送该记录的 Bookmark 属性值来指定 GetRows 方法应开始检索数据的位置。
如要限制 GetRows 调用返回的字段,则可以在 Fields 参数中传送单个字段名/编号或者字段名/编号数组。
在调用 GetRows 后,下一个未读取的记录成为当前记录;如果没有更多的记录,则 EOF 属性设置为 True。
GetRows 方法范例
该范例使用 G
etRows 方法从 Recordset 中检索指定数目的行,并将结果数据填充到数组。在两种情况下 GetRows 方法返回的行将少于所需的数目:一种情况是因为达到了 EOF,另一种情况是因为 GetRows 试图检索已被其他用户删除的数据。仅当第二种情况发生时函数将返回 False。运行该过程需要使用 GetRowsOK 函数。
Public Sub GetRowsX()
Dim rstEmployees As ADODB.Recordset
write的返回值
Dim strCnn As String
Dim strMessage As String
Dim intRows As Integer
Dim avarRecords As Variant
Dim intRecord As Integer
' 使用雇员表中的姓名和受雇日期打开记录集。
strCnn = "Provider=sqloledb;" & _
"Data Source=srv;Initial Catalog=pubs;User "
Set rstEmployees = New ADODB.Recordset
rstEmployees.Open "SELECT fName, lName, hire_date " & _
"FROM Employee ORDER BY lName", strCnn, , , adCmdText
Do While True
' 得到用户输入的行数。
strMessage = "Enter number of rows to retrieve."
intRows = Val(InputBox(strMessage))
If intRows <= 0 Then Exit Do
' 如 GetRowsOK 成功则打印结果,请注意是否达到文件末端。
If GetRowsOK(rstEmployees, intRows, _
avarRecords) Then
If intRows > UBound(avarRecords, 2) + 1 Then
Debug.Print "(Not enough records in " & _
"Recordset to retrieve " & intRows & _
" rows.)"
End If
Debug.Print UBound(avarRecords, 2) + 1 & _
" records found."
' 打印已检索的数据。
For intRecord = 0 To UBound(avarRecords, 2)
Debug.Print " " & _
avarRecords(0, intRecord) & " " & _
avarRecords(1, intRecord) & ", " & _
avarRecords(2, intRecord)
Next intRecord
Else
' 假定 GetRows 错误源于其他用户对数据的更改,
' 使用 Requery 刷新' Recordset 并重新开始。
If MsgBox("GetRows failed--retry?", _
vbYesNo) = vbYes Then
rstEmployees.Requery
Else
Debug.Print "GetRows failed!"
Exit Do
End If
End If
' 由于使用 GetRows 使当前记录指针指向访问过的最后一个记录,
' 所以,在循环回到另一次搜索前将记录指针移回 Recordset 的开始。
rstEmployees.MoveFirst
Loop
rstEmployees.Close
End Sub
Public Function GetRowsOK(rstTemp As ADODB.Recordset, _
intNumber As Integer, avarData As Variant) As Boolean
' 将 GetRows 方法的结果保存在数组中。
avarData = rstTemp.GetRows(intNumber)
' 仅当返回的行数少于所需的行数而非由于到达了 Recordset 末端时才返回 False。
If intNumber > UBound(avarData, 2) + 1 And _
Not rstTemp.EOF Then
GetRowsOK = False
Else
GetRowsOK = True
End If
End Function

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。