Перемещение в наборе записей
Перемещение в наборе записей
Во всех рассмотренных выше сценариях мы перемещались в наборе Recordset сверху вниз, от первой записи к последней. Существует, однако, возможность перемещаться по записям не только вперед, но и назад. Это осуществляется с помощью метода MovePrevious(), для использования которого нужно установить тип курсора (свойство CursorType) в объекте Recordset равным 1, 2 или 3.
Рассмотрим сценарий MoveInTable.js, в котором записи таблицы Phone выводятся в порядке, обратном физическому (рис. 9.16).
Рис. 9.16. Записи таблицы Phone в обратном порядке
Набор записей Recordset в этом сценарии открывается в режиме статической копии таблицы (свойство CursorType равно 3):
//Формируем SQL-запрос к таблице Phone
SSource = "SELECT * FROM Phone";
//Формируем строку с параметрами соединения с БД
//(указываем нужный DSN)
SConnect = "DSN=PhoneDS";
//Создаем объект Recordset
RS=WScript.CreateObject("ADODB.Recordset");
//Задаем статический курсор
RS.CursorType = 3;
После открытия набора записей мы переходим к последней записи с помощью метода MoveLast():
//Открываем набор записей - результат запроса
RS.Open(SSource, SConnect);
//Переходим на последнюю запись
RS.MoveLast();
После этого записи перебираются в цикле while:
//Перебираем все записи набора данных RS
while (!RS.BOF) {
//Формируем строку со значениями трех полей, которые разделены
//символами табуляции
s=RS.Fields("LastName")+" "+RS.Fields("Name")+" "+RS.Fields("Phone");
//В конце строки ставим символ перевода строки
s+=" ";
//Добавляем сформированную строку к переменной SOut
SOut+=s;
//Переходим к предыдущей записи
RS.MovePrevious();
}
Свойство BOF, используемое в цикле while, становится равным true, когда курсор будет находиться перед первой записью таблицы RS.
После выхода из цикла объект Recordset закрывается и сформированная строка SOut выводится на экран:
//Закрываем объект Recordset
RS.Close();
//Выводим на экран строку SOut
WScript.Echo(SOut);
Полностью текст сценария MoveInTable.js приведен в листинге 9.7.
Листинг 9.7. Перемещение в наборе записей снизу вверх
/*******************************************************************/
/* Имя: MoveInTable.js */
/* Язык: JScript */
/* Описание: Перемещение по набору записей в обратном порядке */
/*******************************************************************/
//Объявляем переменные
var
RS, //Экземпляр объекта Recordset
SSource, //Строка с текстом SQL-запроса к БД
SConnect, //Строка с параметрами соединения с БД
SOut, //Строка, в которой сохраняется выходная информация
s;
//Формируем SQL-запрос к таблице Phone
SSource = "SELECT * FROM Phone";
//Формируем строку с параметрами соединения с БД
//(указываем нужный DSN)
SConnect = "DSN=PhoneDS";
//Создаем объект Recordset
RS=WScript.CreateObject("ADODB.Recordset");
//Задаем статический курсор
RS.CursorType = 3;
//Открываем набор записей-результат запроса
RS.Open(SSource,SConnect);
//Переходим на последнюю запись
RS.MoveLast();
SOut="ВСЕ ЗАПИСИ ИЗ ТАБЛИЦЫ phone.dbf В ОБРАТНОМ ПОРЯДКЕ: ";
//Перебираем все записи набора данных RS
while (!RS.BOF) {
//Формируем строку со значениями трех полей, которые разделены
//символами табуляции
s=RS.Fields("LastName")+" "+RS.Fields("Name")+" "+RS.Fields("Phone");
//В конце строки ставим символ перевода строки
s+=" ";
//Добавляем сформированную строку к переменной SOut
SOut+=s;
//Переходим к предыдущей записи
RS.MovePrevious();
}
//Закрываем объект Recordset
RS.Close();
//Выводим на экран строку SOut
WScript.Echo(SOut);
/************* Конец *********************************************/