Главная страница
    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.013 c
3-47174
Egor_M
2002-06-18 13:04
2002.07.15
Цветная DBGrid


1-47367
DoommY
2002-07-02 07:52
2002.07.15
Как поместить в список все компаненты на форме (имена, заголовки)


1-47584
AFROLOV
2002-06-28 11:43
2002.07.15
Ошибка при работе с DLL


4-47865
JaMin
2002-05-06 16:39
2002.07.15
Мастера спасайте!!!


7-47853
XEL
2002-04-24 23:11
2002.07.15
ИЗМЕНЯТЬ СКОРОСТЬ CD-ROM ПРОГРАМНО?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский