Форум: "Базы";
Текущий архив: 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