Андрей Попов - Windows Script Host для Windows 2000/XP
//Закрываем объект Recordset
RS.Close();
//Выводим на экран строку SOut
WScript.Echo(SOut);
Полностью текст сценария FilterRecords.wsf приведен в листинге 9.6.
Листинг 9.6. Фильтрация записей в таблице<job id="FiltRecs">
<runtime>
<description>
РРјСЏ: FilterRecords.wsf
Описание: Фильтрация записей таблицы Phone по первому символу
         фамилии
</description>
</runtime>
<script language="VBScript">
'Функция для реализации диалогового окна со строкой ввода
'в сценариях JScript
Function WSHInputBox(Message,Title)
'Выводим диалоговое окно со строкой ввода
WSHInputBox = InputBox(Message,Title)
End Function
</script>
<script language="JScript">
//Объявляем переменные
var
В RS,В В В В В В //Ркземпляр объекта Recordset
 SSource, //Текст SQL-запроса к БД
 SConnect, //Строка с параметрами соединения с БД
 SOut,    //Строка, в которой сохраняется выходная информация
 Res,     //Результат ввода в диалоговом окне
 SFilt,   //Шаблон, по которому будет производиться фильтрация
 NomRecs, //Количество записей в отфильтрованном наборе
В s;
//Выводим диалоговое окно для ввода первой буквы фамилии
Res=WSHInputBox("Введите первые буквы фамилии","Работа с базой данных");
//Формируем шаблон, по которому будет производиться фильтрация
SFilt="'"+Res+"%'";
//Формируем SQL-запрос к таблице Phone
SSource = "SELECT * FROM Phone WHERE (LastName LIKE "+SFilt+")";
//Формируем строку с параметрами соединения с БД
//(указываем нужный DSN)
SConnect = "DSN=PhoneDS";
//Создаем объект Recordset
RS=WScript.CreateObject("ADODB.Recordset");
//Задаем статический курсор
RS.CursorType = 3;
//Открываем набор записей-результат запроса
RS.Open(SSource,SConnect);
//Определяем число записей в наборе RS
NomRecs = RS.RecordCount;
if (NomRecs==0) {
 WScript.Echo("В таблице Phone нет ни одной фамилии, начинающейся на '" + Res+"'");
В WScript.Quit();
}
SOut="ВСЕГО "+NomRecs+" Р—РђРџРСЕЙ, РќРђР§РНАЮЩРРҐРЎРЇ РќРђ '"+Res+"':n";
//Перебираем все записи набора данных RS
while (!RS.EOF) {
 //Формируем строку со значениями трех полей, которые разделены
 //символами табуляции
В s=RS.Fields("LastName")+"t"+RS.Fields("Name")+"t"+RS.Fields("Phone");
 //В конце строки ставим символ перевода строки
В s+="n";
 //Добавляем сформированную строку к переменной SOut
В SOut+=s;
 //Переходим к следующей записи
В RS.MoveNext();
}
//Закрываем объект Recordset
RS.Close();
//Выводим на экран строку SOut
WScript.Echo(SOut);
</script>
</job>
Перемещение РІ наборе записейВ
Р’Рѕ всех рассмотренных выше сценариях РјС‹ перемещались РІ наборе 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                                                  */
/* Описание: Перемещение по набору записей в обратном порядке     */