Экспорт/импорт XML. Часть 1. Средства MS Access
1 Зачем нужен XML
Надеюсь всем известно, что такое XML. Если нет, то осведомляться сюда. В какой-то момент жизни может возникнуть необходимость обмена данными с другими приложениями. Есть уже много форматов данных и много решений. Например, данные можно передавать в непосредственно mdb или dbf, cvs и п.р. Каждый формат имеет свои ограничения. Выгружать данные для сайта в mdb можно, но возникнут сложности с его обработкой. Формат XML хорош тем, что он текстовый и может содержать иерархические данные. Т.е. разбор текста можно написать и самому, чего в большинстве случаев не требуется, и вместо нескольких файлов можно передать один. Рассмотрим способы работы с XML для начала стандартные.
2 Средства MS Access
В Access 2003 реализовано две функции ExportXML и ImportXML.
Функция ExportXML позволяет экспортировать различные объекты базы данных. Такие как таблицы, отчеты, формы и т.п. Также позволяет экспортировать таблицы в иерархическом виде. При этом умеет формировать файл схемы данных и представления.
Синтаксис функции следующий:
ExportXML(ObjectType, DataSource, DataTarget, SchemaTarget, PresentationTarget, ImageTarget, Encoding, OtherFlags, FilterCriteria, AdditionalData)
ObjectType – тип экспортируемого объекта,
DataSource – имя источника данных,
DataTarget – имя файла назначения,
SchemaTarget – имя файла схемы,
PresentationTarget – имя файла представления
ImageTarget – путь для экспорта изображений,
Encoding – кодировка (UTF-8, UTF-16),
OtherFlags – параметры определяющие поведение при экспорте (см. в справке),
FilterCriteria – фильтр,
AdditionalData – Определяет дополнительные таблицы для экспорта.
В AdditionalData и кроется весь секрет экспорта иерархических данных. Функция проста в обращении. Примеры (я опустил нюансы, их можно посмотреть в примере):
Объявления переменных, чтобы не повторятся:
Dim objInfoSub As AdditionalData
Dim objInfoSubSub As AdditionalData
Экспорт данных:
Set objInfoSub = Application.CreateAdditionalData
Set objInfoSubSub = objInfoSub.Add("tblSub")
objInfoSubSub.Add "tblSubSub"
ExportXML acExportTable, "tblMain", CM_GetDBPath() & "AccessFunc_Tbl.xml" _
, CM_GetDBPath() & "AccessFunc_TblShema.xml", CM_GetDBPath() & "AccessFunc_Tbl.xsl" _
, "Images", , acEmbedSchema, , objInfoSub
Экспорт формы:
Set objInfoSub = Application.CreateAdditionalData
Set objInfoSubSub = objInfoSub.Add("tblSub")
objInfoSubSub.Add "tblSubSub"
ExportXML acExportForm, "frmMain", CM_GetDBPath() & "AccessFunc_Frm.xml" _
, CM_GetDBPath() & "AccessFunc_FrmShema.xml", CM_GetDBPath() & "AccessFunc_Frm.xsl" _
, "Images", , acEmbedSchema, , objInfoSub
Экспорт отчета:
ExportXML acExportReport, "rptMain", CM_GetDBPath() & "AccessFunc_Rpt.xml" _
, CM_GetDBPath() & "AccessFunc_RptShema.xml", CM_GetDBPath() & "AccessFunc_Rpt.xsl" _
, "Images", , acEmbedSchema
CM_GetDBPath() – возвращает путь к текущей базе. Ее можно увидеть в исходниках.
Самый главный интерес представляет экспорт данных, остальные для меня имею смутное представление. Файлы в результате сохранятся в каталог с базой. А полученные файлы html будут работать в IE, насчет остальных браузеров уверенности нет. Чтобы выгрузить иерархию необходимо заполнить схему данных. Тоже маленький минус.
Функция импорта ImportXML еще проще:
ImportXML(DataSource, ImportOptions)
DataSource – Имя файла.
ImportOptions – Опции импорта: acAppendData – добавить данные в таблицы, acStructureAndData – создать новые структуры таблиц и добавить данные, acStructureOnly – создать только структуры таблиц.
Код импорта прост:
ImportXML CM_GetDBPath() & "AccessFunc_Tbl.xml", acAppendData
Спрашивается: «Куда это все будет импортировано?», «Что будет, если подобные таблицы уже существуют?».
Имена таблиц берутся из xml файла. В результате — не любой xml подойдет. В нашем случае это тот, который был выгружен ExportXML (или с MS SQL сервера). Чтобы с этим подробнее разобраться, нужно посмотреть структуру полученных в прошлый раз файлов. Ничего сложного там нет. XML файл содержит две секции: структуры данных и самих данных. Воссоздать по образцу и подобию при необходимости не составит особого труда.
Если таблица с таким именем уже существует то, при загрузке данных они добавятся. А при создании новой структуры создадутся с номером.
Еще один недостаток. Импорт производится в текущую базу. При разделении интерфейса и данных придется отдельно запускать MSAccess, открывать отдельно базу (или создавать временную) и импортировать. Например, так:
Dim apAccess As Access.Application '--открываем приложение и базу apAccess.ImportXML ...
Если слепой импорт не устраивает, то это единственный вариант. Без дополнительной обработки и программирования никак.
Подробности в примере.
Продолжение следует. В нем рассмотрим средства библиотеки ADO.
Использованная литература: встроенная справка.
(с) Скоков Сергей
Именно одинокие люди осознают, что одиночества как такового не существует.
Shawnte
29 Май 08 at 13:46