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

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

Жанры

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

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

На границе империй. Том 10. Часть 2

INDIGO
Вселенная EVE Online
Фантастика:
космическая фантастика
5.00
рейтинг книги
На границе империй. Том 10. Часть 2

Глава рода

Шелег Дмитрий Витальевич
5. Живой лёд
Фантастика:
боевая фантастика
6.55
рейтинг книги
Глава рода

Дворянин

Злотников Роман Валерьевич
2. Император и трубочист
Фантастика:
боевая фантастика
альтернативная история
5.00
рейтинг книги
Дворянин

Хозяин Теней

Петров Максим Николаевич
1. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней

Матабар

Клеванский Кирилл Сергеевич
1. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар

Наномашины, Кошмар Академии! Том 10

Новиков Николай Васильевич
10. Первый среди карапузов
Фантастика:
аниме
попаданцы
5.00
рейтинг книги
Наномашины, Кошмар Академии! Том 10

Гримуар темного лорда VIII

Грехов Тимофей
8. Гримуар темного лорда
Фантастика:
боевая фантастика
альтернативная история
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Гримуар темного лорда VIII

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

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

Локки 7. Потомок бога

Решетов Евгений Валерьевич
7. Локки
Фантастика:
аниме
эпическая фантастика
фэнтези
5.00
рейтинг книги
Локки 7. Потомок бога

Первый среди равных. Книга IV

Бор Жорж
4. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Первый среди равных. Книга IV

Седина в бороду, Босс… вразнос!

Трофимова Любовь
Юмор:
юмористическая проза
5.00
рейтинг книги
Седина в бороду, Босс… вразнос!

Орленев

Мацкин Александр Петрович
Жизнь в искусстве
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Орленев

Черная метка

Лисина Александра
7. Гибрид
Фантастика:
технофэнтези
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Черная метка

Хозяин Стужи 2

Петров Максим Николаевич
2. Злой Лед
Фантастика:
аниме
фэнтези
попаданцы
5.75
рейтинг книги
Хозяин Стужи 2