Книга: Windows Script Host для Windows 2000/XP

Перемещение в наборе записей 

Перемещение в наборе записей 

Во всех рассмотренных выше сценариях мы перемещались в наборе 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")+"t"+RS.Fields("Name")+"t"+RS.Fields("Phone");
 //В конце строки ставим символ перевода строки
 s+="n";
 //Добавляем сформированную строку к переменной 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 В ОБРАТНОМ ПОРЯДКЕ:n";
//Перебираем все записи набора данных RS
while (!RS.BOF) {
 //Формируем строку со значениями трех полей, которые разделены
 //символами табуляции
 s=RS.Fields("LastName")+"t"+RS.Fields("Name")+"t"+RS.Fields("Phone");
 //В конце строки ставим символ перевода строки
 s+="n";
 //Добавляем сформированную строку к переменной SOut
 SOut+=s;
 //Переходим к предыдущей записи
 RS.MovePrevious();
}
//Закрываем объект Recordset
RS.Close();
//Выводим на экран строку SOut
WScript.Echo(SOut);
/*************  Конец *********************************************/

Оглавление книги


Генерация: 1.463. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз