Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.06.24;
Скачать: [xml.tar.bz2];

Вниз

Как получить результат выполнения процедуры в формате XML   Найти похожие ветки 

 
BACEK   (2002-05-29 15:51) [0]

Необходимо в Delphi 5 с использованием ADO получить результат работы хранимой процедуры из MSSQL, результаты представлены в формате XML.


 
Дмитрий Баранов   (2002-05-29 16:51) [1]

1) AdoQuery.SaveToFile("...xml");
2) FOR XML CLAUSE в Books online (подробностей не знаю, почитаете)
3) (imho самое удобное) - самому написать хранимую процедуру-конвертер


 
BACEK   (2002-05-29 17:11) [2]

На данный момент задача сводиться к считыванию результата выполнения хранимой процедуры, которая возвращает необходимую информацию в формате XML. СЧИТАТЬ данные из ADOCommand в текстовую переменную вот в чем проблема !!!


 
Дмитрий Баранов   (2002-05-29 17:17) [3]

Тэкс,
1) AdoCommand или AdoStoredProc? Я вот только что поэкспериментировал со вторым - все чудесно в DBMemo вывелось
2) Может, абраказябры выводит? Так это UTF...


 
BACEK   (2002-05-29 17:50) [4]

Кинь пример


 
BACEK   (2002-05-29 18:37) [5]

И как перекодировать данные полученные в UTF в нормальный вид.


 
Дмитрий Баранов   (2002-05-29 18:44) [6]

Чего-то я пальцы растопырил - тысячу извинений :))
Поэкспериментировал с FOR XML - получается рекордсет с BLOB-полями. Теоретически можно сохранить это дело в MemoryStream, потом привести к WideChar, только хрен его знает, включается ли в этот stream Unicode byte-order mark (FEFF). Щас поковыряюсь...


 
Дмитрий Баранов   (2002-05-29 21:35) [7]

Перевод с VB -
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q272269


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=...;Data Source=BANKOSERV";

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; //" Reset the position in the stream, otherwise it will be at EOS

adoCmd.CommandStream := adoStreamQuery; // " Set the command object"s command to the input stream set above
adoCmd.Dialect := "{5D531CB2-E6Ed-11D2-B252-00C04F681B71}"; //Set the dialect for the command stream to be a SQL query.
outStrm := CreateOleObject("ADODB.Stream");
outStrm.Open;
adoCmd.Properties["Output Stream"] := outStrm;
adoCmd.Execute(Dummy, 0, adExecuteStream);
outStrm.SaveToFile("C:\test.txt");
end;

Ну вот, кроме SaveToFile у ADODB.Stream есть методы Write и WriteText. Правда, сохраняется один хрен - в UTF-8, чего с ним делать - так с лету не скажу...


 
Дмитрий Баранов   (2002-05-29 21:41) [8]

Ну все, лови :))
...
outStrm.Open;
adoCmd.Properties["Output Stream"] := outStrm;
adoCmd.Execute(Dummy, 0, adExecuteStream);
//outStrm.SaveToFile("C:\test.txt");
STR:=outStrm.ReadText(outStrm.size);
ShowMessage(STR);


 
BACEK   (2002-05-30 09:28) [9]

Дим огромное спасибо - вроде получяется. Буду дальше разбираться. Надо еще схему подключить.


 
Дмитрий Баранов   (2002-05-30 12:00) [10]

Да не за что, только надо еще OleVariant`ы к чертям - импортируй библиотеку типов ADO 2.7.


 
BACEK   (2002-05-30 14:29) [11]

type_library -> создать юнит -> прописать его в uses

А потом как его использовать? Подскажи напримере следующего кода:

adoConn := CreateOleObject("ADODB.Connection");
adoStreamQuery := CreateOleObject("ADODB.Stream");
adoConn.ConnectionString := sConn;
adoConn.Open;
adoCmd := CreateOleObject("ADODB.Command") ;
adoCmd.ActiveConnection := adoConn;

как это выглядеть будет если использовать библиотеку типов ADO 2.7?


 
Дмитрий Баранов   (2002-05-30 21:47) [12]

procedure TForm1.Button1Click(Sender: TObject);
var Dummy: OleVariant;
rs: _Recordset;
X: WideString;
begin
cnn.Open( // cnn - TConnection из type library
"Provider=SQLOLEDB.1;Password=1;Persist Security Info=True;User ID=sa;Initial Catalog=Northwind;Data Source=IT01",
"sa",
"1",
0);
rs:=cnn.Execute("select top 100 * from Employees for XML AUTO", Dummy, adCmdText);
rs.Save(Stream1.DefaultInterface, adPersistXML);
X:=Stream1.ReadText(Stream1.Size);
Memo1.Lines.Text:=X;
end;


 
Дмитрий Баранов   (2002-05-31 00:27) [13]

... это - как НЕ надо делать :))
(надеюсь, что эту ветку в потрепаться - не перенесут)
тогда уж импортируй и MSXML

var rs: _Recordset;
Qr: WideString;
D : OleVariant;
Doc: IXMLDOMDocument2;
CoDoc: CoDomDocument;
begin
Doc:=CoDoc.Create;
cnn.Open( // cnn - TConnection из type library
"Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Initial Catalog=Northwind;Data Source=IT01",
"sa",
"1",
0);
Qr:="select * from employees";
rs := cnn.Execute(QR, D, adCmdText);
rs.Save(Doc, adPersistXML);
Memo1.Lines.Text:=Doc.xml;
end;



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.06.24;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.008 c
3-77320
Shrek
2002-05-31 23:31
2002.06.24
Ну очень простой вопрос!


1-77362
Jony
2002-06-13 11:47
2002.06.24
Выделение символов быстрого запуска в меню.


14-77581
Dimka Maslov
2002-05-20 16:08
2002.06.24
UBPFD


1-77368
Stas Ant
2002-06-13 13:19
2002.06.24
Чужая Dll, в win98 работает а в W2K и W2K Server пишет что библи


6-77520
Иван
2002-04-05 11:16
2002.06.24
Уважаемые господа, у меня мольба о помощи





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