Конференция "Основная" » TADODataSet получить в виде строки XML [D7]
 
  • Андрей Пл © (13.01.17 14:21) [0]
    необходимо содержимое 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);

     это я для проверки впихнул...
 
Конференция "Основная" » TADODataSet получить в виде строки XML [D7]
Есть новые Нет новых   [118615   +66][b:0][p:0.002]