Работа с базами данных в Internet. Оператор, осуществляющий переход от одной записи набора к следующей, страница 2

Выражение Server.MapPath("critters.mdb") во второй строке требует некоторого пояснения. Любое имя файла, которое Вы задаете в части dbq= строки соединения, должно быть локальным, полностью заданным именем файла, например, F:\InetPub\wwwroot\webdbdev\chO1\critters.mdb. Это создает определенные сложности, поскольку в большинстве случаев вы не знаете, в каком месте файловой системы Web-сервера начинается ваш Web-сайт. Вам, однако, известен URL каждого файла на вашем сайте, и в этом случае хорошую службу оказывает метод Server.MapPath, который преобразует относительный URL в локальный, полностью заданный путь к файлу.

Третья строка предписывает серверу создать объект Connection ADODB и сохранить ссылку на него в переменной en. ADODB означает базу данных ADO (ADO database). Объект Connection ADODB управляет соединением с открытой базой данных.

Четвертая строка предписывает объекту Connection, созданному в предыдущей строке, открыть базу данных, заданную в первых двух строках. Эта строка обращается к методу Openобъекта сn и указывает в качестве аргумента строку соединения (см. первые две строки).

Четвертая и пятая строки соответственно закрывают соединение с базой данных и уничтожают объект Connection базы данных. Следует не забывать убирать все использованные вами объекты.

7. Открыв базу данных, можно составить запрос и извлечь ряд записей. Чтобы сделать это, введите между операторами сn.Ореп и cn.Close следующий код:

sql =   "SELECT jersey, fname, sname, position" & _

"FROM roster" & _

"ORDER BY jersey;"

Set rs = Server.CreateObject("ADODB.Recordset") rs.Open sql, en, 3, 3

Здесь будет код для чтения данных таблицы.

rs.Close

Set rs = Nothing

Первые три строки определяют оператор SQL, который извлекает необходимые записи и поля в требуемой последовательности.

Четвертая строка создает объект Recordset ADODB и сохраняет ссылку на него в переменной с именем rs. Объект Recordset ADODB обеспечивает доступ к результатам запроса - т.е. набору записей, который был извлечен по запросу.

Пятая строка открывает набор записей с использованием метода Open только что созданного вами объекта rs типа Recordset. В качестве параметров метод получает SQL-оператор, созданный в первых трех строках, соединение с базой данных, установленное на шаге 6, и два параметра, CursorType и LockType. Установим для этих параметров значение 3.

На шаге 8 создается код для чтения набора записей, однако сейчас опять-таки следует закрыть набор записей и уничтожить объект Recordset. Если этого не сделать сейчас, впоследствии вы можете забыть об этом.

8. Чтобы прочитать записи, извлеченные на шаге 7, введите между операторами rs.Open и rs.Close следующий код:

On Error Resume Next

rs.MoveFirst

Do While Not rs.EOF

Здесь будет код для обработки каждой записи.

Rs.MoveNext

Loop

Первые операторы предписывают серверу выполнять код даже в случае возникновения ошибок. До этого момента при обнаружении ошибки ADO отправлял посетителю Web сообщение об ошибке, а сервер прекращал выполнение сценария. Оператор On Error Resume Next сообщает серверу, что если в одном из операторов обнаружена ошибка, следует продолжить выполнение со следующего оператора.

Вторая строка осуществляет переход к первой записи в наборе rs. Хотя в любом случае при открытии набора записи указатель устанавливается в эту позицию, лучше подтвердить это еще раз.

Третья и шестая строки отмечают начало и конец цикла, который выполняется до тех пор, пока не будет достигнут конец набора записей rs. При чтении последней записи в любом наборе для свойства EOF устанавливается значение True.

Пятая строка содержит оператор, осуществляющий переход от одной записи набора rs к следующей. Для этого используется метод MoveNext объекта rs.

9. Осталось создать код, который превращает значения из базы данных в HTML-код для последующей передачи посетителю Web. Вы должны поместить этот код непосредственно перед оператором rs.MoveNext.

Response.WriteServer.HTMLEncode(_ rs.Fields("jersey") &","&_ rs.Fields("fname") &"" & _ rs.Fieldsfsname") &","&_ rs.Fields("position")) & "<br>" & vbCiif