![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Всем добрый день!
Мне нужно из двух таблиц access экспортировать записи в xml. Пытаюсь сделать так: Код:
var
XmlDoc: TXmlDocument;
addroot, addnewchild: IXMLNode;
begin
ADOQ.SQL.Text :='select Dep, Name_user, Mail_user, id_user, id_dep_u from tab_users, Ttab_dep where id_user = id_dep_u';
ADOQ.Open;
XmlDoc := TXmlDocument.Create(nil);
XmlDoc.Active := true;
XMLDocument1.Active := true;
XmlDoc.Version := '1.0';
XmlDoc.Encoding := 'UTF-8';
addroot := XmlDoc.AddChild('City');
while Not ADOQ.Eof do
begin
addnewchild := root.AddChild('Dep');
addnewchild.SetAttribute(WideString('NameDep'), ADOQ.FieldByName('Dep').AsString);
addnewchild := addnewchild .AddChild('User');
addnewchild.SetAttribute(WideString('Name'),ADOQ.FieldByName('Name_user').AsString);
addnewchild.SetAttribute(WideString('Mail'),ADOQ.FieldByName('Mail_user').AsString);
end;
ADOQ.Next
XmlDoc.SaveToFile('C:\users.xml');
end;Получаю файл с таким форматом: Код HTML:
Но мне нужно чтобы элемнеты были сгрупированы вот так: Код HTML:
Может кто-нибудь подсказать как сделать группировку? Если я думаю в правильном направлении нужно сделать цикл в запросе, который обходил бы поле id_dep_u? Или цикл при добавлении Код:
addnewchild := addnewchild .AddChild('User')Никак не придумаю) Последний раз редактировалось markII, 13.05.2022 в 14:51. |
|
#2
|
|||
|
|||
|
Можно проще. Просто проверяй на изменене значения в поле Dep и только в этом случае создавай новый узел.
Как-то так: Код:
DepName := '';
DepNode := Nil;
addroot := XmlDoc.AddChild('City');
while Not ADOQ.Eof do
begin
if DepName <> ADOQ.FieldByName('Dep').AsString Then
begin
DepNode := root.AddChild('Dep');
DepNode.SetAttribute(WideString('NameDep'), ADOQ.FieldByName('Dep').AsString);
DepName := ADOQ.FieldByName('Dep').AsString;
end;
addnewchild := DepNode.AddChild('User');
addnewchild.SetAttribute(WideString('Name'),ADOQ.FieldByName('Name_user').AsString);
addnewchild.SetAttribute(WideString('Mail'),ADOQ.FieldByName('Mail_user').AsString);
ADOQ.Next
end;Последний раз редактировалось lmikle, 13.05.2022 в 21:04. |
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
markII (14.05.2022)
| ||
|
#3
|
|||
|
|||
|
Цитата:
Спасибо! Все получилось, правда не сразу). Не хватало еще сортировки по id_dep. Последний раз редактировалось markII, 14.05.2022 в 04:05. |
|
#4
|
|||
|
|||
|
Ну да, предполагается, что датасет отсортирован.
|
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
markII (19.05.2022)
| ||