Классический ASP - BOF - PullRequest
       40

Классический ASP - BOF

2 голосов
/ 21 декабря 2011

Я пытаюсь запустить два цикла WHILE NOT для набора записей.Один из циклов подсчитывает количество элементов, а другой выводит результаты.Я не могу изменить SQL-запрос, поэтому у меня остался метод подсчета.

setPeopleCount = 0
While NOT rsSetContents.EOF
    setPeopleCount = setPeopleCount + 1
rsSetContents.MoveNext
Wend

While NOT rsSetContents.EOF
    Response.Write rs.Fields("exampleItem")&"<br>"
rsSetContents.MoveNext
Wend

Моя проблема заключается в запуске двух циклов.После того, как первый цикл завершил подсчет, курсор записи находится в конце файла, поэтому, когда необходимо запустить следующий цикл - это не так, потому что EOF имеет значение true.

Как я могу сбросить курсорвернуться к началу файла, чтобы запустить второй цикл?

Ответы [ 3 ]

4 голосов
/ 21 декабря 2011

Вы можете использовать MoveFirst.

http://msdn.microsoft.com/en-us/library/windows/desktop/ms677527(v=vs.85).aspx

1 голос
/ 21 декабря 2011

Не могли бы вы рассчитывать на нижнюю петлю? Или, возможно, прочитайте записи в массив объектов, тогда вы можете повторять его столько раз, сколько захотите

0 голосов
/ 21 декабря 2011

MoveFirst требует правильного курсора на наборе записей - если, например, вы перейдете на другую базу данных, курсор по умолчанию может измениться и код может не работать.

Я бы посоветовал вам сохранить значения при подсчете, таким образом сохраните второй цикл:

setPeopleCount = 0
Dim exampleItems()
ReDim exampleItems(-1)
While NOT rsSetContents.EOF
    setPeopleCount = setPeopleCount + 1
    ReDim Preserve exampleItems(UBound(exampleItems) + 1)
    exampleItems(UBound(exampleItems)) = rs("exampleItem")
    rsSetContents.MoveNext
Wend

'instead of a loop, just this:
Response.Write(Join(exampleItems, "<br />"))
...