Вложение нескольких таблиц / запросов при экспорте в XML
Есть ли способ использовать Application.ExportXML
способ не только объединить несколько запросов, но и вложить запросы друг в друга?
Например, скажем, у меня есть три таблицы. Я уже могу использовать Application.ExportXML
способ объединить три вместе. Основные запросы, которые я не хочу повторять, не повторяются, а тот, который содержит всю информацию о клиенте, повторяется. Хорошо.
Но это получается так (по разным параноидальным причинам я использую поддельные данные):
<DogCare>
<Facility>Twin Peaks</Facility>
<Year>1992</Year>
<Month>1</Month>
</DogCare>
<DogTeam>
<Team>DogWalker</Team>
<DogsWalked>24</DogsWalked>
<TreatsGiven>900</TreatsGiven>
</DogTeam>
<PetWalkTime>
<Name>Palmer</Name>
<Age>7</Age>
<FavoriteSnack>Cheese</FavoriteSnack>
<FavThingtoDo>Chew Shoes</FavThingtoDo>
<Day>1</Day>
<DidBusiness>Yes</DidBusiness>
<Barked>Constantly</Barked>
<PulledonLeash>Whole Time</PulledonLeash>
<DeservesTreat>Gave it Anyway</DeservesTreat>
</PetWalkTime>
<PetWalkTime>
<Name>Laura</Name>
<Age>5</Age>
<FavoriteSnack>Pie</FavoriteSnack>
<FavThingtoDo>Fetch</FavThingtoDo>
<Day>1</Day>
<DidBusiness>Yes</DidBusiness>
<Barked>No</Barked>
<PulledonLeash>No</PulledonLeash>
<DeservesTreat>Gave Several</DeservesTreat>
</PetWalkTime>
Сейчас. "DogCare","DogTeam" и "PetWalkTime" являются отдельными запросами. Тем не менее, они все связаны и принадлежат друг другу так:
<DogCare>
<Facility>Twin Peaks</Facility>
<Year>1992</Year>
<Month>2</Month>
<DogTeam>
<Team>DogWalker</Team>
<DogsWalked>24</DogsWalked>
<TreatsGiven>900</TreatsGiven>
<PetWalkTime>
<Name>Palmer</Name>
<FavoriteSnack>Cheese</FavoriteSnack>
<FavThingtoDo>Chew Shoes</FavThingtoDo>
<Day>1</Day>
<DidBusiness>Yes</DidBusiness>
<Barked>Constantly</Barked>
<PulledonLeash>Whole Time</PulledonLeash>
<DeservesTreat>Gave it Anyway</DeservesTreat>
</PetWalkTime>
<PetWalkTime>
<Name>Laura</Name>
<FavoriteSnack>Pie</FavoriteSnack>
<FavThingtoDo>Fetch</FavThingtoDo>
<Day>1</Day>
<DidBusiness>Yes</DidBusiness>
<Barked>No</Barked>
<PulledonLeash>No</PulledonLeash>
<DeservesTreat>Gave Several</DeservesTreat>
</PetWalkTime>
</DogTeam>
</DogCare>
Есть ли способ сделать этот последний возможным на экспорт?
1 ответ
Да, Application.ExportXML
может экспортировать правильный вложенный XML при условии, что
- вы экспортируете таблицы (не запросы) и
- вы установили отношения в доступе (иначе ограничения внешнего ключа) между таблицами
Если какое-либо из этих условий не выполняется, даже если вы используете метод, описанный в статье MSDN, вы все равно получите "последовательный" XML:
<?xml version="1.0" encoding="UTF-8"?>
<dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2014-11-21T13:43:50">
<DogCare>
<ID>1</ID>
<Facility>Twin Peaks</Facility>
</DogCare>
<DogTeam>
<TeamID>1</TeamID>
<ParentID>1</ParentID>
<Team>DogWalker</Team>
</DogTeam>
<PetWalkTime>
<WalkID>1</WalkID>
<TeamID>1</TeamID>
<Name>Palmer</Name>
<Age>7</Age>
</PetWalkTime>
<PetWalkTime>
<WalkID>2</WalkID>
<TeamID>1</TeamID>
<Name>Laura</Name>
<Age>5</Age>
</PetWalkTime>
</dataroot>
Однако, если оба условия соблюдены, мы можем получить "вложенный" XML, как этот
<?xml version="1.0" encoding="UTF-8"?>
<dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2014-11-21T13:52:50">
<DogCare>
<ID>1</ID>
<Facility>Twin Peaks</Facility>
<DogTeam>
<TeamID>1</TeamID>
<ParentID>1</ParentID>
<Team>DogWalker</Team>
<PetWalkTime>
<WalkID>1</WalkID>
<TeamID>1</TeamID>
<Name>Palmer</Name>
<Age>7</Age>
</PetWalkTime>
<PetWalkTime>
<WalkID>2</WalkID>
<TeamID>1</TeamID>
<Name>Laura</Name>
<Age>5</Age>
</PetWalkTime>
</DogTeam>
</DogCare>
</dataroot>
используя такой код
Option Compare Database
Option Explicit
Sub XmlExportTest()
Dim objTeam As AdditionalData, objWalk As AdditionalData
Set objTeam = Application.CreateAdditionalData
Set objWalk = objTeam.Add("DogTeam")
objWalk.Add "PetWalkTime"
Application.ExportXML _
ObjectType:=acExportTable, _
DataSource:="DogCare", _
DataTarget:="C:\Users\Gord\Desktop\DogData.xml", _
AdditionalData:=objTeam
End Sub