5 строк кода

Как писать приложения на MS Access

Экспорт/импорт 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.

Использованная литература: встроенная справка.

(с) Скоков Сергей

Written by Сергей Скоков

Декабрь 20th, 2007 at 8:12 пп

Posted in xml

Один комментарий to 'Экспорт/импорт XML. Часть 1. Средства MS Access'

Subscribe to comments with RSS or TrackBack to 'Экспорт/импорт XML. Часть 1. Средства MS Access'.

  1. Именно одинокие люди осознают, что одиночества как такового не существует.

    Shawnte

    29 мая 08 at 13:46

Leave a Reply