Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

TADODataSet получить в виде строки XML [D7]


Андрей Пл ©   (13.01.17 14:21

необходимо содержимое TADODataSet получить в виде строки XML.
подскажите как это сделать?
Что то наподобие свойства TClientDataSet.XMLData


sniknik ©   (13.01.17 14:52[1]

сохрани в файл TADODataSet.SaveToFile(, pfXML);


Андрей Пл ©   (13.01.17 15:25[2]

я данные в компонент TADODataSet  загружаю из EXEL файла
ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source='+fileName + ';' +
     'Mode=Read;Jet OLEDB:System database="";Jet OLEDB:Registry Path="' +
     '";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=35;Jet OL' +
     'EDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;' +
     'Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Pass' +
     'word="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt' +
     ' Database=False;Jet OLEDB:Don'#39't Copy Locale on Compact=False;Jet' +
     ' OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;' +
     ';Extended Properties='#39'Excel 8.0;HDR=Yes;IMEX=1'#39;

 list := TStringList.Create;
 try
   ADOConnection1.Open;
   ADOConnection1.GetTableNames(list, True);

   ADODataSet1.CommandText := 'Select * from [' + list[0] + ']';
   ADODataSet1.Open;
   ADODataSet1.SaveToFile('D:\pfXML.xml', pfXML);

и файл в итоге
имеет следующий вид
<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'
xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'
xmlns:rs='urn:schemas-microsoft-com:rowset'
xmlns:z='#RowsetSchema'>
<s:Schema id='RowsetSchema'>
<s:ElementType name='row' content='eltOnly' rs:updatable='true'>
 <s:AttributeType name='Id' rs:number='1' rs:nullable='true' rs:maydefer='true' rs:writeunknown='true' rs:basetable=''Терминалы City24$''
   rs:basecolumn='Id'>
  <s:datatype dt:type='float' dt:maxLength='8' rs:precision='15' rs:fixedlength='true'/>
 </s:AttributeType>
 <s:AttributeType name='ItemTypeId' rs:number='2' rs:nullable='true' rs:maydefer='true' rs:writeunknown='true'
   rs:basetable=''Терминалы City24$'' rs:basecolumn='ItemTypeId'>
  <s:datatype dt:type='float' dt:maxLength='8' rs:precision='15' rs:fixedlength='true'/>
 </s:AttributeType>
 <s:AttributeType name='ExtId' rs:number='3' rs:nullable='true' rs:maydefer='true' rs:writeunknown='true' rs:basetable=''Терминалы City24$''
   rs:basecolumn='ExtId'>
  <s:datatype dt:type='float' dt:maxLength='8' rs:precision='15' rs:fixedlength='true'/>
 </s:AttributeType>
 <s:AttributeType name='Latitude' rs:number='4' rs:nullable='true' rs:maydefer='true' rs:writeunknown='true'
   rs:basetable=''Терминалы City24$'' rs:basecolumn='Latitude'>
  <s:datatype dt:type='float' dt:maxLength='8' rs:precision='15' rs:fixedlength='true'/>


Андрей Пл ©   (13.01.17 15:27[3]

это не совсем то что мне надо. Мне надо в виде xml типа:
<DATAPACKET Version="2.0">
<METADATA>
 <FIELDS>
  <FIELD attrname="ID" fieldtype="r8"/>
  <FIELD attrname="NAME" fieldtype="string" WIDTH="20"/>
 </FIELDS>
 <PARAMS/>
</METADATA>
<ROWDATA>
 <ROW ID="0" NAME="Îãðàíè÷åííûé"/>
 <ROW ID="1" NAME="Âñåé ñèñòåìû"/>
 <ROW ID="2" NAME="Âñåãî ôèëèàëà"/>
</ROWDATA>
</DATAPACKET>


rrrrr ©   (13.01.17 15:34[4]

сначала закрой первый запрос на получение списка таблиц.


sniknik ©   (13.01.17 16:47[5]

> это не совсем то что мне надо. Мне надо в виде xml типа:
т.е. надо именно так как в TClientDataSet, буква в букву? тогда открывай рекорсет прямо в нем, через провайдер данных и сохраняй с него. провайдер будет типа преобразователя.
а в ADO всегда именно такой как привел, еще есть вариант через адострим, будет точно такой же,
ну и и само собой можно его "руками" сформировать тут вообще как угодно можно сделать.


sniknik ©   (13.01.17 16:57[6]

> через провайдер данных
TDataSetProvider


Андрей Пл ©   (13.01.17 16:59[7]

ну вот что то в этом роде:
 function DataSetToXml(const ADataSet : TADODataSet) : String;
 var
   Provider : TDataSetProvider;
   ClientDataSet : TClientDataset;
 begin
   Provider := TDataSetProvider.Create(nil);
   try
     Provider.Name := 'tmpProvider';
     Provider.DataSet := ADataSet;
     ClientDataSet := TClientDataSet.Create(nil);
     try
       ClientDataSet.Data := Provider.Data;
       ClientDataSet.SaveToFile('D:\AAA.xml',dfXML);
       Result := ClientDataSet.XMLData;
     finally
       FreeAndNil(ClientDataSet);
     end;
   finally
     FreeAndNil(Provider);
   end;
 end;


Андрей Пл ©   (13.01.17 17:00[8]

ClientDataSet.SaveToFile('D:\AAA.xml',dfXML);  это я для проверки впихнул...


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо