Как считать записи в ASP Classic? - PullRequest
3 голосов
/ 29 июня 2009

Я не совсем знаком с программированием классики 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
%>

спасибо,

Ответы [ 9 ]

8 голосов
/ 29 июня 2009

Возможно (но не рекомендуется) использовать свойство RecordCount объекта Recordset следующим образом:

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
6 голосов
/ 29 июня 2009

rsscroll. RecordCount

2 голосов
/ 01 июля 2009

Одно простое решение - использовать метод 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 по умолчанию, который возвращает данные в режиме «только вперед» для эффективности. Он будет проходить построчно, но не знает фактического количества. (Этот режим также устанавливает для RecordSet.RecordCount значение -1, поэтому поле для вас бесполезно.)

Параметр RecordSet.Open «Тип курсора» позволяет переключиться в режим «Набор ключей» (значение параметра 1), который делает , чтобы установить в поле RecordCount количество строк данных. (Параметры «Тип блокировки» и «Тип команды» включены для полноты, но они не фигурируют в этом ответе.)

RecordsetObject.Open "TableName|SQLStatement", ConnectionObject [,Cursor Type] [,Lock Type] [,Command Type] 

Добавьте этот параметр в вызов RecordSet.Open вашего кода, а затем проверьте RecordCount.

<%
    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 
%>
1 голос
/ 21 февраля 2011

Получите привычку хранить возвращенные данные в массивах. Это на удивление быстрее, чем при использовании открытого набора записей. Кроме того, укажите поля для выбора при выполнении этого, поскольку вы должны явно ссылаться на индекс массива.

<%
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
%>
1 голос
/ 10 июля 2009

Я обычно использую отдельный запрос, такой как «выберите количество (*) из таблицы», чтобы получить счет, потому что мне обычно требуется не только счет, но и сумма количества единиц или средней цены или чего-либо еще, и легче написать отдельный запрос, чем сделать больше переменных и сказать "TotalUnits = TotalUnits + rs (" Units "). value" внутри цикла для отображения результатов. Это также удобно для случаев, когда вам нужно показывать итоги выше результатов, и вы не хотите повторять цикл записи дважды.

1 голос
/ 29 июня 2009

Вы можете просто изменить свой SQL для подсчета записей:

strSQLscroll = "SELECT count(*) as Total FROM tblItems where expiration_date > getdate();"

Тогда вам просто нужно response.write rsscroll("Total")

0 голосов
/ 06 мая 2016

Если вы используете 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
0 голосов
/ 25 января 2014

Вы можете попробовать это

    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)
0 голосов
/ 21 февраля 2011

<% 'TableID = идентификатор вашей таблицы ... </p>

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") 

%>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...