2016-10-10 2 views
1
Public Sub Click() 

    Dim objOtherTbls As AdditionalData 

     Set objOtherTbls = Application.CreateAdditionalData 
     objOtherTbls.Add "vessels" 
     objOtherTbls.Add "Export" 

     Application.ExportXML ObjectType:=acExportTable, _ 
        DataSource:="orderSummary", _ 
        DataTarget:="pls.xml", _ 
        AdditionalData:=objOtherTbls 


End Sub 

enter image description hereУплотненный экспорт XML из родителей/детей данных из Access

Как сделать XML вложен и дублирующие поля повторять только один раз?

I would like something like: 

<vessels> 
    <vessels ID> 
     <product Id> 
     <quantity> 
     <product Id> 
     <quantity> 
     <product Id> 
     <quantity> 

Как объединить таблицы и сделать их, как уже упоминалось выше, для того, чтобы только иметь каждое название судна один раз и все элементы этого судна, перечисленных ниже, и вкладками в?

ответ

1

Access использует «отношения», чтобы определить иерархию родителя/ребенка при экспорте к XML. В вашей базе данных, по-видимому, отсутствует Связь между [сосудами] и [Экспорт], поэтому вы получаете «плоский» экспорт XML из двух таблиц, как вы видите в вопросе.

Если вы добавите отношения к базе данных ...

Relationships.png

... то вы получите "вложенный" экспорт XML, что вы ищете:

<vessels> 
    <vessel_id>2</vessel_id> 
    <vessel_name>B</vessel_name> 
</vessels> 
<vessels> 
    <vessel_id>3</vessel_id> 
    <vessel_name>C</vessel_name> 
    <Export> 
    <product_id>10</product_id> 
    <Quantity>10</Quantity> 
    <vessel_id>3</vessel_id> 
    </Export> 
    <Export> 
    <product_id>100</product_id> 
    <Quantity>20</Quantity> 
    <vessel_id>3</vessel_id> 
    </Export> 
    <Export> 
    <product_id>1000</product_id> 
    <Quantity>1</Quantity> 
    <vessel_id>3</vessel_id> 
    </Export> 
    <Export> 
    <product_id>10000</product_id> 
    <Quantity>10</Quantity> 
    <vessel_id>3</vessel_id> 
    </Export> 
    <Export> 
    <product_id>10001</product_id> 
    <Quantity>20</Quantity> 
    <vessel_id>3</vessel_id> 
    </Export> 
    <Export> 
    <product_id>10002</product_id> 
    <Quantity>10</Quantity> 
    <vessel_id>3</vessel_id> 
    </Export> 
</vessels> 
0

Вот быстрый эскиз (SQL-DDL требует ANSI-92 Режим запроса, но может быть воспроизведен с помощью графического пользовательского интерфейса доступа инструменты):

CREATE TABLE vessels 
(vessel_id INT NOT NULL UNIQUE, 
    vessel_name CHAR(1) WITH COMPRESSION NOT NULL UNIQUE); 

CREATE TABLE Export 
(product_id INT NOT NULL UNIQUE, 
    Quantity INT NOT NULL, CHECK (Quantity >= 0), 
    vessel_id INT NOT NULL 
    REFERENCES vessels (vessel_id)); 

INSERT INTO vessels VALUES (1, 'A'); 
INSERT INTO vessels VALUES (2, 'B'); 
INSERT INTO vessels VALUES (3, 'C'); 
INSERT INTO vessels VALUES (4, 'D'); 
INSERT INTO vessels VALUES (5, 'E'); 

INSERT INTO Export VALUES (10, 10, 3); 
INSERT INTO Export VALUES (100, 20, 3); 
INSERT INTO Export VALUES (1000, 1, 3); 
INSERT INTO Export VALUES (10000, 10, 3); 
INSERT INTO Export VALUES (10001, 20, 3); 
INSERT INTO Export VALUES (10002, 10, 3); 
Смежные вопросы