ASP / GetRows & Count - PullRequest
       1

ASP / GetRows & Count

3 голосов
/ 18 января 2012

Чтобы повысить производительность и ресурсы, я только начал использовать getRows () в нескольких моих скриптах.Я только что натолкнулся на проблему, о которой я хотел бы спросить.

Я делал это, чтобы получить набор записей и получить счет:

If NOT rs.EOF Then
    arrResultSet = rs.GetRows()
    arrRowCount = UBound(arrResultSet,2)
End If

Но потом я понял,Мне не хватало записи, поэтому я добавил 1 к своему счету:

If NOT rs.EOF Then
        arrResultSet = rs.GetRows()
        arrRowCount = UBound(arrResultSet,2) + 1
End If

Но теперь я получаю сообщение об ошибке позже в моем скрипте, когда пытаюсь получить доступ к массиву данных, который просто сводится к добавлению одного в мой счет:

For iCounter = 0 to arrRowCount
    ...some code...
    If LCase(Trim(peopleWord)) = LCase(Trim(arrResultSet(1,iCounter))) Then
    ...some code...
Next

Microsoft VBScript runtime error '800a0009'
Subscript out of range: 'lcase(...)'

Любая помощь с благодарностью.

1 Ответ

6 голосов
/ 18 января 2012

Ваш For идет от индекса 0 к индексу arrRowCount.

Так, например, если у вас есть три записи, вы переходите от 0 до 3, то есть 4, верно?IIRC, мы привыкли делать это: For iCounter = 0 to arrRowCount - 1

Редактировать : Возможно, этот пример поможет вам.На этой веб-странице подробно объясняется, почему использование GetRows дает повышение производительности, поэтому я думаю, что вы на правильном пути.Я включил весь пример кода, но вы заинтересованы в этой части в конце.В нем меньше кода и меньше переменных, чем вы используете.Это выглядит чище, проще.

' Establish the connection object
strConn = "[connection string goes here]"
set dbConn = Server.CreateObject("ADO.Connection")
dbConn.Open strConn

' Establish the recordset object
set rsCustomers = Server.CreateObject("ADO.Recordset")
set rsCustomers.ActiveConnection = dbConn

' Load the recordset object based on supplied query
strSQL = "SELECT RecID, FirstName, LastName FROM Customers"
rsCustomers.Open strSQL

' Push the results into a two-dimensional array
dataArray = rsCustomers.GetRows()

' Cleanup the objects. We do it here instead of at the end because the data
' has already been placed into an array. This is an advantage in that we can release
' memory sooner.
rsCustomers.Close
set rsCustomers = nothing

dbConn.Close
set dbConn = nothing

' Retrieve the records performing business logic where necessary
jMax = ubound(dataArray, 2)
for j = 0 to jMax

    'Additional business logic here

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