我不是很熟悉编程ASP经典。 我只需要一个小的代码在我的网页上运行。 我如何计算返回查询的记录?
<%
Set rsscroll = Server.CreateObject("ADODB.Recordset")
Dim strSQLscroll, rsscroll
strSQLscroll = "SELECT * FROM tblItems where expiration_date > getdate() order by expiration_date desc;"
rsscroll.open strSQLscroll,oConn
%>
谢谢,
这是可能的(但不推荐)使用Recordset对象的RecordCount属性如下:
iTotalRecords = rsscroll.RecordCount
如果你的表是真的大,这可能需要很长的时间来运行。 我反而会运行一个单独的SQL查询来获取总记录
SQL = "SELECT COUNT(*) AS TotalRecords FROM tblItems WHERE expiration_date > getdate() "
set rsRecordCount = conn.Execute(SQL)
if not rsRecordCount.Eof then
iTotalRecords = rsRecordCount.Fields("TotalRecords")
else
iTotalRecords = 0
end if
rsRecordCount.Close
set rsRecordCount = nothing
一个简单的解决方案的使用SQL COUNT方法。 这是假设您想要的行数,而不是数据本身。
<%
Set rsscroll = Server.CreateObject("ADODB.Recordset")
Dim strSQLscroll, rsscroll, intRow
strSQLscroll = "SELECT COUNT(*) AS Total FROM tblItems WHERE expiration_date > getdate();"
rsscroll.open strSQLscroll, oConn
response.write rsscroll("Total")
rsscroll.close: set rsscroll = nothing
oConn.close: set oConn = nothing
%>
这将返回一个排,称为单值“总”。 (阅读,如果你需要同时行计数和数据。)
您的查询代码使用默认的记录集,这在“只进”模式返回数据的效率。 这将逐步行由行,但不知道实际计数。 (该模式还设置RecordSet.RecordCount为-1,所以字段不是对你有用。)
RecordSet.Open的“游标类型”参数允许您更改为“键集”模式(参数值1),它不设置总记录现场数据的行数。 (“锁型”和“命令类型”参数出于完整性考虑,但他们没有弄清楚这个答案。)
RecordsetObject.Open "TableName|SQLStatement", ConnectionObject [,Cursor Type] [,Lock Type] [,Command Type]
这个参数添加到您的代码的RecordSet.Open呼叫,然后检查总记录。
<%
Set rsscroll = Server.CreateObject("ADODB.Recordset")
Dim strSQLscroll, rsscroll, intRow
strSQLscroll = "SELECT * FROM tblItems where expiration_date > getdate() order by expiration_date desc;"
rsscroll.open strSQLscroll, oConn, 1
intRow = rsscroll.RecordCount
' ... do something with intRow
rsscroll.close: set rsscroll = nothing
oConn.close: set oConn = nothing
%>
如果数据库性能意味着什么到你的情况,RecordSet.GetRows()方法的效率高得多。
<%
Dim rsscroll, intRow, rsArray
Set oConn = CreateObject("ADODB.Connection")
oConn.open "<connection string>"
strSQLscroll = "SELECT * FROM tblItems where expiration_date > getdate() order by expiration_date desc"
Set rsscroll = conn.execute(strSQLscroll)
if not rsscroll.eof then
rsArray = rsscroll.GetRows()
intRow = UBound(rsArray, 2) + 1
response.write "rows returned: " & intRow
' ... do any other operations here ...
end if
rsscroll.close: set rsscroll = nothing
oConn.close: set oConn = nothing
%>
你可以只改变你的SQL计数记录:
strSQLscroll = "SELECT count(*) as Total FROM tblItems where expiration_date > getdate();"
然后你只需要response.write rsscroll("Total")
我通常使用一个单独的查询,如“SELECT COUNT(*)FROM表”因为我平时不仅需要计数,但单位数或平均价格或任何的总和来获得计数和更容易写比一个单独的查询使更多的变量,并说“TotalUnits = TotalUnits + RS(”单元“)。值”循环来显示结果的内部。 它也派上用场,你需要显示结果上方的总计时间和你不想循环,虽然记录的两倍。
获取在存储阵列返回的数据的习惯中。 这是令人惊讶的速度比使用一个开放的记录集进行迭代。 此外,指定的字段这样做的时候,你必须明确地引用数组的索引来选择。
<%
Set rsscroll = Server.CreateObject("ADODB.Recordset")
Dim strSQLscroll, rsscroll
Dim arrCommon
'Open recordset, copy data to array
strSQLscroll = "SELECT field1, field2, field3 FROM tblItems where expiration_date > getdate() order by expiration_date desc;"
rsscroll.open strSQLscroll,oConn
arrCommon = rsscroll.getRows()
rsscroll.close
'Get the total records in this array
response.write ubound(arrCommon, 2);
'Loop...
for i = 0 to ubound(arrCommon, 2)
' This prints field 3
response.write arrCommon(2, i)
next
%>
<%'表格ID =你的表ID ...
Set rsscroll = Server.CreateObject("ADODB.Recordset") Dim strSQLscroll, rsscroll strSQLscroll = "SELECT *,(SELECT TableID FROM tblItems where expiration_date > getdate()) As Count FROM tblItems where expiration_date > getdate() order by expiration_date desc;"
rsscroll.open strSQLscroll,oConn
Count = rsscroll("Count")
%>
你可以试试这个
Dim count
count = 0
if strSQLscroll.eof <> true or strSQLscroll.bof <> true then
while not strSQLscroll.eof
count = count+1
strSQLscroll.movenext
wend
end if
response.write(count)
如果你正在使用MySQL试试这个:
Dim strSQLscroll, rsscroll, countrs
Set rsscroll = Server.CreateObject("ADODB.Recordset")
rsscroll.CursorLocation = 3
rsscroll.open "SELECT * FROM tblItems where expiration_date > getdate()
order by expiration_date desc;",oConn
countrs = rsscroll.recordcount