Начнем мы с того, что скопируем данные записной книжки из XML-файла book.xml в DBF-таблицу Phone.dbf (сценарий InsertRecords.js). Все остальные сценарии, которые рассматриваются в этой главе, будут работать уже с этой таблицей.

Копирование данных из XML-файла в таблицу БД

Напишем сценарий InsertRecords.js, который будет извлекать данные из XML-файла book.xml и добавлять записи с этими данными в таблицу Phone.dbf, для доступа к которой мы предварительно создали DSN (рис. 9.9).

Сценарий InsertRecords.js будет состоять из нескольких функций, главной из которых является Main(). В этой функции сначала создается объект WshShell и определяется путь к XML-файлу, который должен находиться в текущем каталоге:

//Создаем объект WshShell

WshShell = WScript.CreateObject('WScript.Shell');

//Путь к XML-файлу с данными

PathBook=WshShell.CurrentDirectory+'\book.xml';

Для доступа к таблице Phone мы создаем объект Connection, который позволяет с помощью метода Open() устанавливать связь с заданной базой данных. Для этого необходимо в качестве параметра Open() указать строку с именем источника данных, к которому происходит обращение (в нашем случае эта строка имеет вид 'DSN=PhoneDS'):

//Создаем объект Connection

Connect=WScript.CreateObject('ADODB.Connection');

//Формируем строку с параметрами соединения с БД

//(указываем нужный DSN)

SConnect='DSN=PhoneDS';

//Устанавливаем связь с БД

Connect.Open(SConnect);

После этого происходит вызов функции XMLToBase(), в которой происходит разбор XML-файла с помощью объектной модели XML DOM (применение XML DOM было подробно описано в главе 7).

//Копирование данных из XML-файла в таблицу Phone

function XMLToBase() {

 var XML,Root,NomRec,CurrNode,i;

 //Создаем объект XML DOM

 XML = WScript.CreateObject('Msxml.DOMDocument');

 //Загружаем XML-документ из файла

 XML.load(PathBook);

 //Сохраняем в переменной Root ссылку на корневой элемент документа

 Root=XML.documentElement;

 //Перебираем все дочерние элементы первого уровня вложенности

 //для корневого элемента

 for (i=1; i<=Root.childNodes.length-1;i++) {

  //Выделяем в коллекции XML-элементов i-й элемент

  CurrNode=Root.childNodes.item(i);

  //Вставляем новую запись в таблицу Phone

  PersonToTable(CurrNode);

 }

} 

Как мы видим, в функции XMLToBase() определяется цикл for, в котором для каждого XML-элемента, содержащего данные об одном человеке, происходит вызов функции PersonToTable(XNode). В функции PersonToTable (XNode) формируется SQL-запрос INSERT INTO Phone…, который позволяет вставить в таблицу Phone новую запись с заданными значениями полей, например:

INSERT INTO Phone (LastName, Name, Phone, Street, House, App, Notes)

VALUES ('Иванов', 'Иван', '17-17-17', 'Садовая', '4', '6', 'Очень хороший человек')

Строится строка с SQL-запросом (переменная SSQL) следующим образом:

//Строим список значений полей добавляемой записи

SSQL+='''+GetTagVal(XNode, 'LastName')+'',';

SSQL+='''+GetTagVal(XNode, 'Name')+'',';

SSQL+='''+GetTagVal(XNode, 'Phone')+'',';

SSQL+='''+GetTagVal(XNode, 'Street')+'',';

SSQL+='''+GetTagVal(XNode, 'House')+'',';

SSQL+='''+GetTagVal(XNode, 'App')+'',';

SSQL+='''+GetTagVal(XNode, 'Note')+''';

//Формируем текст SQL-запроса для вставки записи

SSQL='INSERT INTO Phone (LastName, Name, Phone, Street, House, App, Notes) VALUES ('+SSQL+')';

После формирования переменной SSQL происходит вызов SQL-запроса с помощью метода Execute() объекта Connection:

//Выполняем подготовленный SQL-запрос (добавляем запись в таблицу)

Connect.Execute(SSQL);

После окончания копирования данных в функции Main() выводится соответствующее сообщение:

//Выводим сообщение об окончании переноса данных

WshShell.Popup('Данные из XML-файла в таблицу перенесены!', 0, 'Работа с базой данных', vbInformation+vbOkOnly);

Полностью текст сценария InsertRecords.js приведен в листинге 9.1.

Листинг 9.1. Копирование данных из XML-файла в таблицу БД

/*******************************************************************/

/* Имя: InsertRecords.js                                           */

/* Язык: JScript                                                   */

/* Описание: Копирование данных из XML-файла таблицу базы          */

/*           данных                                                */

/*******************************************************************/

//Объявляем переменные

var

 WshShell, //Экземпляр объекта WshShell

 BasePath, //Путь к текущему каталогу

 PathBook, //Путь к файлу с данными

 NomRec=0, //Счетчик количества записей

 SConnect, //Строка с параметрами соединения с БД

 Connect;  //Экземпляр объекта Connection

//Инициализируем константы для диалоговых окон

var vbInformation=64,vbOkOnly=0;

//Определение значения тега tgName XML-элемента obj

function GetTagVal(obj, tgName) {

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату