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

Сортировка записей в таблице 

Сортировка записей в таблице 

Используя предложение ORDER BY в операторе SELECT, можно получить из источника данных записи, отсортированные по какому-либо полю. Например, следующий SQL-запрос

SELECT * FROM Phone ORDER BY LastName

вернет упорядоченный по полю LastName набор, содержащий все записи из таблицы Phone (рис. 9.12).


Рис. 9.12. Сортировка записей таблицы Phone по полю LastName

Мы напишем сценарий SortRecords.wsf, с помощью которого можно будет выводить записи из таблицы Phone, отсортированные либо по фамилии (поле LastName), либо по телефону (поле Phone). Выбор осуществляется с помощью ввода соответствующего значения в диалоговом окне (рис. 9.13).


Рис. 9.13. Выбор поля для сортировки

Само диалоговое окно реализуется с помощью VBScript-функции WSHInputBox(Message, Title):

Function WSHInputBox(Message, Title)
 'Выводим диалоговое окно со строкой ввода
 WSHInputBox = InputBox(Message,Title)
End Function

Эта функция вызывается из написанной на JScript части сценария следующим образом:

//Формируем текст сообщения в диалоговом окне ввода
SMenu="1 - Сортировка по фамилииn";
SMenu+="2 - Сортировка по телефонуn";
SMenu+="nnКоманда:";
//Выводим диалоговое окно для ввода режима сортировки
Res=WSHInputBox(SMenu, "Работа с базой данных");

Введенное в диалоговом окне значение записывается в переменную Res и анализируется в операторе switch:

//Анализируем введенное значение
switch (Res) {
case "1": {
 SSort="LastName";
 break;
}
case "2": {
 SSort="Phone";
 break;
}
default: {
 WScript.Echo("Вы ввели неправильное значение!");
 WScript.Quit();
}
}

После того как в переменную SSort занесено имя поля, по которому нужно производить сортировку, мы можем полностью сформировать нужный SQL-запрос к таблице Phone:

//Формируем SQL-запрос к таблице Phone SSource = "SELECT * FROM Phone ORDER BY "+SSort;

Оставшаяся часть сценария взята из сценария ListRecords1.js и комментариев не требует.

Полностью текст сценария SortRecords.wsf приведен в листинге 9.5.

Листинг 9.5. Сортировка записей в таблице по заданному полю

<job>
<runtime>
<description>
Имя: SortRecords.wsf
Описание: Сортировка записей таблицы БД по заданному полю
</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,      //Результат ввода в диалоговом окне
 SSort,    //Имя поля таблицы, по которому будет производиться сортировка
 SMenu,    //Текст сообщения в диалоговом окне ввода
 s;
//Формируем текст сообщения в диалоговом окне ввода
SMenu="1 - Сортировка по фамилииn";
SMenu+="2 - Сортировка по телефонуn";
SMenu+="nnКоманда:";
//Выводим диалоговое окно для ввода режима сортировки
Res=WSHInputBox(SMenu,"Работа с базой данных");
//Анализируем введенное значение
 switch (Res) {
 case "1": {
  SSort="LastName";
  break;
 }
 case "2": {
  SSort="Phone";
  break;
 }
 default: {
  WScript.Echo("Вы ввели неправильное значение!");
  WScript.Quit();
 }
}
//Формируем SQL-запрос к таблице Phone
SSource = "SELECT * FROM Phone ORDER BY "+SSort;
//Формируем строку с параметрами соединения с БД
//(указываем нужный DSN)
SConnect = "DSN=PhoneDS";
//Создаем объект Recordset
RS=WScript.CreateObject("ADODB.Recordset");
//Открываем набор записей-результат запроса
RS.Open(SSource,SConnect);
SOut="ВСЕ ЗАПИСИ ИЗ ТАБЛИЦЫ phone.dbf: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>

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


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