Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Выгрузка данных из TDataSet в XML [D7, XP, 2003]


Страницы:   1 2

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]


> А как сделать так:


Пригласить программиста.
Блин, ну дал же код, ну что там непонятного-то?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо