-
необходимо содержимое TADODataSet получить в виде строки XML. подскажите как это сделать? Что то наподобие свойства TClientDataSet.XMLData
-
сохрани в файл TADODataSet.SaveToFile(, pfXML);
-
я данные в компонент 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'/>
-
это не совсем то что мне надо. Мне надо в виде 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>
-
сначала закрой первый запрос на получение списка таблиц.
-
> это не совсем то что мне надо. Мне надо в виде xml типа: т.е. надо именно так как в TClientDataSet, буква в букву? тогда открывай рекорсет прямо в нем, через провайдер данных и сохраняй с него. провайдер будет типа преобразователя. а в ADO всегда именно такой как привел, еще есть вариант через адострим, будет точно такой же, ну и и само собой можно его "руками" сформировать тут вообще как угодно можно сделать.
-
> через провайдер данных TDataSetProvider
-
ну вот что то в этом роде: 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;
-
ClientDataSet.SaveToFile('D:\AAA.xml',dfXML); это я для проверки впихнул...
|