Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.15;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.032 c
1-47273
sibo
2002-06-30 02:12
2002.07.15
Listbox and .txt


8-47603
CaspeRForeveR
2002-03-04 14:59
2002.07.15
Подскажите где можно скачать RxRichEdit.????


14-47749
Snake2000
2002-06-11 09:07
2002.07.15
Проблема с Sound Blaster Live! Player 5.1


1-47459
MPro
2002-07-03 15:08
2002.07.15
Макрос Excel.


8-47616
DSG
2002-03-11 15:43
2002.07.15
Отрисовка