Чтение онлайн

на главную - закладки

Жанры

Windows Script Host для Windows 2000/XP

Попов Андрей Викторович

Шрифт:

Копирование данных из 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

Поделиться:
Популярные книги

Идеальный мир для Лекаря 23

Сапфир Олег
23. Лекарь
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Идеальный мир для Лекаря 23

Тринадцатый VIII

NikL
8. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Тринадцатый VIII

Идеальный мир для Лекаря 9

Сапфир Олег
9. Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
6.00
рейтинг книги
Идеальный мир для Лекаря 9

Чужак

Листратов Валерий
1. Ушедший Род
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Чужак

Наследник хочет в отпуск

Тарс Элиан
5. Десять Принцев Российской Империи
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наследник хочет в отпуск

Точка Бифуркации XIII

Смит Дейлор
13. ТБ
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Точка Бифуркации XIII

Требую развода! Что значит- вы отказываетесь?

Мамлеева Наталья
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Требую развода! Что значит- вы отказываетесь?

Законы Рода. Том 4

Андрей Мельник
4. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 4

Вперед в прошлое 3

Ратманов Денис
3. Вперёд в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 3

Личный аптекарь императора. Том 5

Карелин Сергей Витальевич
5. Личный аптекарь императора
Фантастика:
городское фэнтези
попаданцы
аниме
сказочная фантастика
фэнтези
7.50
рейтинг книги
Личный аптекарь императора. Том 5

Последний Герой. Том 1

Дамиров Рафаэль
1. Последний герой
Фантастика:
попаданцы
альтернативная история
фантастика: прочее
5.00
рейтинг книги
Последний Герой. Том 1

Кодекс Охотника. Книга XXXV

Винокуров Юрий
35. Кодекс Охотника
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXXV

На границе империй. Том 3

INDIGO
3. Фортуна дама переменчивая
Фантастика:
космическая фантастика
5.63
рейтинг книги
На границе империй. Том 3

Древесный маг Орловского княжества 5

Павлов Игорь Васильевич
5. Орловское княжество
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Древесный маг Орловского княжества 5