Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-47544
tsarevep
2002-06-25 20:42
2002.07.15
PageControl


1-47287
mike.dld
2002-06-30 12:55
2002.07.15
Здравствуйте, Мастера!


1-47363
andrey_pst
2002-07-02 06:32
2002.07.15
Как определить, загружена ли программа ?


1-47340
PSZ
2002-07-01 15:42
2002.07.15
Как Caption на TButton написать в несколько строк ?


1-47574
Karen
2002-06-28 11:52
2002.07.15
Что это?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский