Форум: "Базы";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];
ВнизADO в XML Найти похожие ветки
← →
Юрий Сидоров (2002-06-21 05:29) [0]Здравствуйте !
Мне надо вывести ADO DataSet в XML поток. Делаю следующее:
FConnection.DefaultInterface.CursorLocation := adUseClient;
FStream := TFileStream.Create("skladsf.xml", fmCreate);
FStreamAdapter := TStreamAdapter.Create(FStream, soOwned);
FConnection.Open("Provider=SQLOLEDB;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Pv;Data Source=SERVER", "", "", 0);
FCommand.DefaultInterface.Set_ActiveConnection(FConnection.DefaultInterface);
FCommand.DefaultInterface.CommandType := adCmdText;
FCommand.DefaultInterface.CommandText := "select Ident, Name from Sklads order by Ident";
FCommand.DefaultInterface.Properties["Output Stream"].Value := FStreamAdapter as IStream;
Parameters := Null;
FCommand.DefaultInterface.Execute(RecordsAffected, Parameters, adExecuteStream);
Получаю ошибку:
"Streaming not supported over multiple column result"
Подскажите, как сделать правильно. Спасибо.
← →
Dok_3D (2002-06-21 07:50) [1]Слушай, я не знаю, зачем тебе XML в поток нужно загнать,
но ты не пробовал так:
ADODataSet1.SaveToFile("skladsf.xml", pfXML);
FStream := TFileStream.Create("skladsf.xml", fmRead);
// Сейчас твой XML в потоке
FStream.Free;
← →
Юрий Сидоров (2002-06-21 10:02) [2]Да.
Так работает, но хотелось изящней,
не возиться с временными именами файлов и др.
Дело в том, что это будет работать как сервис, в многопоточном режиме.
← →
Дмитрий Баранов (2002-06-21 10:28) [3]http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1022673091&n=1
( уже раз четвертый ссылку даю, наверное :)
← →
alexandervasjuk (2002-06-21 10:36) [4]почему бы не
ADODataSet1.SaveToFile("skladsf.xml", pfXML);
← →
AlexanderVasjuk (2002-06-21 10:41) [5]Пардон
ADODataSet1.SaveToStream...
← →
Дмитрий Баранов (2002-06-21 10:47) [6]Пропал раздел куда-то, еще полчаса назад был... В двух словах - после импорта библиотеки типов ADO работать надо не с компонентами ADOExpress, а с родными MS-интерфесами. У ADO.Recordset есть метод Save, можно сохранить его в формате XML в ADO.Stream или в XMLDOMDocument.
← →
Fiend (2002-06-21 11:09) [7]Даю фишку от Дмитрия Баранова, ему кстати ОТДЕЛЬНОЕ СПАСИБО отменя за помощь в этой же проблемме.
procedure TForm1.Button1Click(Sender: TObject);
var
adoCmd,
adoConn,
adoStreamQuery,
outStrm,
txtResults,
CmdStream: OleVariant;
sConn: WideString;
sQuery: WideString;
Str: WideString;
Dummy: integer;
begin
sConn := "Provider=SQLOLEDB.1;Password=;Persist Security Info=True;User ID=;Initial Catalog=banko;Data Source=;
adoConn := CreateOleObject("ADODB.Connection");
adoStreamQuery := CreateOleObject("ADODB.Stream");
adoConn.ConnectionString := sConn;
adoConn.Open;
adoCmd := CreateOleObject("ADODB.Command") ;
adoCmd.ActiveConnection := adoConn;
sQuery := "<ROOT xmlns:sql=""urn:schemas-microsoft-com:xml-sql"">";
sQuery := sQuery + "<sql:query>SELECT top 100 * FROM company FOR XML AUTO</sql:query>";
sQuery := sQuery + "</ROOT>";
adoStreamQuery.Open;
adoStreamQuery.WriteText(sQuery, adWriteChar);
adoStreamQuery.Position := 0;
adoCmd.CommandStream := adoStreamQuery; // " Set the command object"s command to the input stream set above
adoCmd.Dialect := "{5D531CB2-E6Ed-11D2-B252-00C04F681B71}"; .
outStrm := CreateOleObject("ADODB.Stream");
outStrm.Open;
adoCmd.Properties["Output Stream"] := outStrm;
adoCmd.Execute(Dummy, 0, adExecuteStream);
STR:=outStrm.ReadText(outStrm.size);
ShowMessage(STR);
end;
Тут все просто. В общих словах - ADORecordset можно сохранить в ADO.Stream или IXMLDomDocument
См здесь
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1022673091&n=1
С уважением,
Дмитрий Баранов
void@tourdom.ru
← →
kig (2002-06-21 12:53) [8]А зачем такие навороты при сохранении в поток?
Так не проще?
uses
ComObj, ADODB_TLB;
procedure TForm1.Button1Click(Sender: TObject);
var
r: Recordset;
s: Stream;
begin
r := CreateComObject(CLASS_Recordset) as Recordset;
r.CursorLocation := adUseClient;
r.Open("select * from Customers",
"Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Northwind;Data Source=BLADE",
adOpenKeyset, adLockReadOnly, -1);
r.MoveLast ;
s := CreateComObject(CLASS_Stream) as Stream;
(r as _Recordset).Save(s, adPersistXML);
s.Position := 0;
Memo1.Text := s.ReadText(adReadAll);
end;
← →
kig (2002-06-21 13:10) [9]Вообще-то
r.MoveLast ;
можно пропустить...
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.011 c