![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выгрузка данных из TDataSet в XML [D7, XP, 2003]
alexis © (2011-09-21 11:29:00)Такой код:
with XMLDocument1 do
begin
DocumentElement:=AddChild('main');
end;
XmlRoot:=XMLDocument1.ChildNodes['main'];
with XmlRoot do
begin
AddChild('Kod_OIV');
ChildValues['Kod_OIV']:=OIVDs.FieldByName('ID').AsString;
AddChild('NAIM_OIV');
ChildValues['NAIM_OIV']:=OIVDs.FieldByName('NAIM').AsString;
TaskNode:=XmlRoot.AddChild('Task');
with TaskNode do
begin
while not TaskDS.Eof do
begin
AddChild('Kod_Task');
AddChild('NAIM_Task');
ChildValues['Kod_Task']:=TaskDs.FieldByName('ID').AsString;
ChildValues['NAIM_Task']:=TaskDs.FieldByName('NAIM').AsString;
TaskDS.Next;
end;
end;
end ;
В файле получаю:
<?xml version="1.0" encoding="UNICODE"?>
-<main><Kod_OIV>3</Kod_OIV><NAIM_OIV>хххххх хххххх</NAIM_OIV>-<Task><Kod_Task>10</Kod_Task><NAIM_Task>ххххх хххххх</NAIM_Task><Kod_Task/><NAIM_Task/><Kod_Task/><NAIM_Task/><Kod_Task/><NAIM_Task/></Task></main>
Почему данные из датасет выгружаются только в первый элемент TaskNode?
alexis (2011-10-11 10:13:00) [1]И всего то? Спасибо! Все работает.
asail (2011-10-10 19:28:00) [2]
> Медвежонок Пятачок © (10.10.11 17:35) [37]
> перед выгрузкой.
> причем на точку
Ага. И не забыть вернуть взад потом...
Медвежонок Пятачок (2011-10-10 17:35:00) [3]перед открытием.
перед выгрузкой.
причем на точку.
RWolf (2011-10-10 17:33:00) [4]можно попытаться установить DecimalSeparator перед открытием.
alexis (2011-10-10 17:27:00) [5]Объясните, пожалуйста, следующее.
Выгружаю данные из TDataSet в XML. Данные типа Float выгружаются с запятой в качестве разделителя дробной части. Все ок.
При открытии через связку TXMLTransformProvider и TClientDataSet в TDBGrid отображается только целая часть. Если в качестве разделителся стоит точка, то отображается все ок.
Что не так делаю?
alexis (2011-09-27 13:26:00) [6]Вот такая структура файла имеет право на жизнь?
<OIV NAME_OIV="QQQ" KOD_ID="3">
<Task Naim_Task="aaa" Kod_Task="8">
<Base ID="2" Naim="sss" Plan="2,84" Fakt="2,84" Offer=""/>
<Base ID="6" Naim="qqqqq" Plan="123" Fakt="123" Offer="123"/>
<Func Id_Func="2" Naim_Func="ddd">
<BaseF ID="4" Naim="fff" Plan="4330" Fakt="4330" Offer=""/>
</Func>
</Task>
</OIV>
Открываю такой файл в TClietnDataSet, поле Kod_Task заполнено только у первой записи, у остальных пустое. Если убрать одну из таблиц (Base или Func) в файле трансформации, то поле заполняется корректно.
Плохиш (2011-09-27 12:12:00) [7]
> А как сделать так:
> <OIV ID="1" NAIM="xxx" <Task Kod_Task="1" Name_Task="..
> "/><Task Kod_Task="2" Name_Task=".."/></OIV>
>
Для этого надо переписать стандарт xml.
alexis (2011-09-27 11:53:00) [8]Так я делать научился
<OIV ID="1" NAIM="xxx">
<Task Kod_Task="1" Name_Task=".."/>
<Task Kod_Task="2" Name_Task=".."/>
</OIV>
А как сделать так:
<OIV ID="1" NAIM="xxx" <Task Kod_Task="1" Name_Task=".."/><Task Kod_Task="2" Name_Task=".."/></OIV>
alexis (2011-09-22 13:33:00) [9]Видимо это XML mapper не может делать файл трансформации с вложением больше трех. Вручную файл трансформации дописал, заработало.
CleintDataSet использую правки данных в xml файле, что то типа небольшой локальной БД. Потом десятки таких файлов с одинаковой структурой и разными записями будут снова грузиться в БД (где такие записи уже есть и надо их проапдейтить). Другого способа изменить удаленно записи БД не нашел (доступа к БД удаленно нет).
Ega23 (2011-09-22 13:21:00) [10]
> Сколько уровней вложенности xml файла поддерживает TClietnDataSet?
Никогда ему не доверял. Либо выгружал из MSSQL сразу в XML (есть там такая фича), либо ручками.
Не, по-быстрому посмотреть - это сойдёт. Но какую-то сложную структуру строить чё-та как-то сцыкотно...
alexis (2011-09-22 12:33:00) [11]Еще вопрос. Сколько уровней вложенности xml файла поддерживает TClietnDataSet?
Чего то на 4-м вложенном датасете все работать перестает
Плохиш (2011-09-21 16:21:00) [12]
> Ega23 © (21.09.11 15:39) [27]
>
>
Ты не умничай, ты код давай.
Нафига нужен форум, если все будут справку читать?
Ega23 (2011-09-21 15:39:00) [13]
> Дальше поинтерессовался как сделать так:
Посмотри, как к IXMLNode добавляются атрибуты.
alexis (2011-09-21 15:17:00) [14]
> Ega23 © (21.09.11 15:11) [25]
>
> Правильно, именно это он и даёт. Ты же этого хотел?
Все верно, за что вам большое спасибо.
Дальше поинтерессовался как сделать так:
<OIV ID="1" NAIM="xxx">
<Task Kod_Task="1" Name_Task=".."/>
<Task Kod_Task="2" Name_Task=".."/>
</OIV>
Не то чтобы мне очень надо, просто в базу гружу файлы такого формата, поэтому и интерессно как они получились.
Ega23 (2011-09-21 15:11:00) [15]
> Ваш код дает
Правильно, именно это он и даёт. Ты же этого хотел?
alexis (2011-09-21 14:36:00) [16]Удалено модератором
Плохиш (2011-09-21 14:23:00) [17]Удалено модератором
alexis (2011-09-21 14:09:00) [18]
> Плохиш © (21.09.11 13:49) [19]
Чего то я подзабыл немецкий, почти 20 лет со школы прошло.
alexis (2011-09-21 14:07:00) [19]
> Блин, ну дал же код, ну что там непонятного-то?
Программисты они за деньги работают, а я за бесплатно.
Ваш код дает
<Task>
<Kod_Task>10</Kod_Task>
<NAIM_Task>...</NAIM_Task>
</Task>
<Task>
<Kod_Task>11</Kod_Task>
<NAIM_Task>...</NAIM_Task>
</Task>
Буду искать где я ошибся
Ega23 (2011-09-21 13:50:00) [20]
> А как сделать так:
Пригласить программиста.
Блин, ну дал же код, ну что там непонятного-то?