Андрей Попов - Windows Script Host для Windows 2000/XP
/*******************************************************************/
//Объявляем переменные
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);
/************* Конец *********************************************/
Доступ к БД без создания DSN
Напомним, что для получения доступа к базе данных мы предварительно создали DSN с именем PhoneDS (рис. 9.9). Однако связываться с базами данных можно и без описания DSN (DSN, Less Database Access). Для этого необходимо в качестве второго параметра метода Open объекта Recordset задать строку, в которой явно будут записаны название нужного драйвера и параметры соединения с базой. Для используемой нами базы данных DBF-формата достаточно указать каталог, в котором находятся нужные таблицы (этот параметр называется DefaultDir). Например, если таблицы расположены в каталоге Tabl на диске С:, то строка SConn с параметрами соединения имеет следующий вид:
SConn="Driver={Microsoft dBase Driver (*.dbf)};DefaultDir=C:\Tabl";
К положительным моментам доступа к данным без предварительного создания DSN можно отнести то, что строка соединения с базой формируется во время выполнения сценария (имя базы данных можно передавать в качестве параметра) — это позволяет писать более гибкие сценарии. Кроме этого, сценарий, не требующий предварительной настройки ODBC, легче переносить на другие машины. Недостаток этого подхода состоит в невозможности установить контроль над соединением с базой в той мере, в какой это позволяет сделать ODBC (это становится важным при работе с базой данных, находящейся в сети).
В листинге 9.8 приведен сценарий DSN_Less.js, в котором доступ к таблице Phone осуществляется без использования DSN (предполагается, что файл Phone.dbf находится в текущем каталоге).
Листинг 9.8. Доступ к базе Phone без использования DSN/*******************************************************************/
/* РРјСЏ: DSN_Less.jsВ В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В */
/* Язык: JScript                                                  */
/* Описание: Просмотр записей таблицы без использования DSN       */
/*******************************************************************/
//Объявляем переменные
var
В WshShell,В В В //Ркземпляр объекта WshShell
В RS,В В В В В В В В В //Ркземпляр объекта Recordset
 SSource,    //Строка с текстом SQL-запроса к БД
 SConnect,   //Строка с параметрами соединения с БД
 SOut,       //Строка, в которой сохраняется выходная информация
 SDefaultDir, //Путь к каталогу, в котором находится таблица Phone
В s;
//Создаем объект WshShell
WshShell = WScript.CreateObject("WScript.Shell");
//Определяем путь к текущему каталогу, в котором хранится таблица Phone
SDefaultDir=WshShell.CurrentDirectory;
//Формируем SQL-запрос к таблице Phone
SSource = "SELECT * FROM Phone";
//Формируем строку с параметрами соединения с БД
//(указываем нужный DSN)
SConnect="Driver={Microsoft dBase Driver (*.dbf)};DefaultDir="+SDefaultDir;
//Создаем объект 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);
/************* Конец *********************************************/
Глава 10
Разработка РЎРћРњ-объектов СЃ помощью языков сценариевВ
Во всех сценариях WSH, которые мы рассматривали ранее, создавались экземпляры внешних СОМ-объектов, являющихся серверами автоматизации, после чего мы не задумываясь использовали свойства и методы этих объектов. В основном СОМ-объекты создаются в виде откомпилированных модулей с помощью универсальных языков типа Visual С++ или Visual Basic, однако с помощью специальной технологии Windows Script Components можно зарегистрировать в системе СОМ-объект, написанный на языке JScript или VBScript, причем для этого не нужно проводить никакой компиляции исходного кода сценария! Таким образом, любой сценарий WSH можно "упаковать" в СОМ-объект (мы будем называть такие объекты компонентами-сценариями или объектами-сценариями) и использовать его в приложениях, написанных на любом языке, который позволяет подключать внешние объекты. Преимуществами компонентов-сценариев над обычными откомпилированными компонентами (как и вообще любой интерпретируемой программы над компилируемой) является простота разработки, внесения изменений и распространения объектов-сценариев, недостатками — более медленная скорость работы и возможность внесения несанкционированных изменений в исходный код компонентов.