Witam, czy wie ktoś może w jaki sposób można spreparować wyniki zapytania SQL w ADOQuery, tak aby można je było wysłać w formie XML'a jako odpowiedz SOAP? jakiego typu użyć w rezultacie metody? Mam Delphi 2007 Pro.

- Rejestracja:około 22 lata
- Ostatnio:około 5 lat
- Postów:448
W zeszlym tygodniu bylo CodeGear RoadShow 2008 - XML w Praktyce
byl tam poruszany temat jak odebranego xml'a zaladowac do TDataSet i wyswietlic np w TDBGrid.
Ciebie co prawda interesuje odwrotny proces ale moze cos dla siebie tam znajdziesz:
prezentacja
www.codegear.pl/seminaria/rs2008/rs_2008_XML.pdf
plik z przykladem
www.codegear.pl/seminaria/rs2008/FoodServiceClient.zip
- Rejestracja:ponad 18 lat
- Ostatnio:prawie 14 lat
- Postów:16
No niestety nie mam już więcej pomysłów jak pakuje zwykle stringi to w efekcie dostaje coś takiego:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<NS1:ReturnUsersResponse xmlns:NS1="urn:MyWebServerIntf-IMyWebServer">
<return xsi:type="xsd:string"><![CDATA[<Table>
<USER>
<NAME>imie1</NAME>
<PASSWORD>password1</PASSWORD>
<FULLNAME>fullname1</FULLNAME>
<EMAIL>email1</EMAIL>
<COMPANY>company1</COMPANY>
<FUNCTION>function1</FUNCTION>
<ADDRESS>adres1</ADDRESS>
<ADDRESS2>adres2</ADDRESS2>
</USER>...
...
</Table>]]></return>
</NS1:ReturnUsersResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
przy pomocy kodu:
function TMyWebServer.ReturnUsers : String;
var
tempString : string;
Connection : TADOConnection;
Query : TADOQuery;
I : integer;
begin
Connection := TADOConnection.Create(nil);
Connection.ConnectionString := '{connection string}';
Connection.LoginPrompt := false;
Connection.Open();
Query := TADOQuery.Create(nil);
Query.Connection := Connection;
Query.SQL.Add('SELECT ...');
Query.Open;
Query.First;
tempString := '<Table>' + sLineBreak;
for I := 0 to 20 do
begin
tempString := tempString + ' <USER>' + sLineBreak;
tempString := tempString + ' <NAME>' + Query.FieldByName('UserName').AsString + '</NAME>' + sLineBreak;
tempString := tempString + ' <PASSWORD>' + Query.FieldByName('PASS').AsString + '</PASSWORD>' + sLineBreak;
tempString := tempString + ' <FULLNAME>' + Query.FieldByName('FullName').AsString+ '</FULLNAME>' + sLineBreak;
tempString := tempString + ' <EMAIL>' + Query.FieldByName('Email').AsString + '</EMAIL>' + sLineBreak;
tempString := tempString + ' <COMPANY>' + Query.FieldByName('UserField0').AsString + '</COMPANY>' + sLineBreak;
tempString := tempString + ' <FUNCTION>' + Query.FieldByName('UserField1').AsString + '</FUNCTION>' + sLineBreak;
tempString := tempString + ' <ADDRESS>' + Query.FieldByName('UserField2').AsString + '</ADDRESS>' + sLineBreak;
tempString := tempString + ' <ADDRESS2>' + Query.FieldByName('UserField3').AsString + '</ADDRESS2>' + sLineBreak;
tempString := tempString + ' </USER>' + sLineBreak;
Query.Next;
end;
tempString := tempString + '</Table>';
result := tempString;
end;
Przez to CDATA wszystko wewnątrz to zwykły tekst, a przecież nie o to w xmlu chodzi...

- Rejestracja:około 22 lata
- Ostatnio:około 5 lat
- Postów:448
zajzyj tu (moze juz to robiles)
XML w Delphi
Najwazniejsze zaczyna sie od akapitu:
Tworzenie interfejsów.
masz tam opisane jak z dokumentu xml zrobic sobie klase.
bedziesz mogl po tem do takie struktury zapakowac dane w obiektowy sposob np:
begin
Zamowienie.Zamawiajacy.Nazwa := TDataSet.fieldbyname('NazwaZamawiajacego').asstring;
for i := x to y do
Zamowienie.Towary.add(ListaTowarow[i]);
Zamowienie.Kwaota := 1354.23;
itd.......
a na koniec
wyslijXmlPrzezSiec(Zamowienie.XML);
end;
jest to technologia ktorej warto poswiecic chwile czasu...
z drugiej strony podstawowe efekty uzyskasz bardzo szybko.
- Rejestracja:ponad 18 lat
- Ostatnio:prawie 14 lat
- Postów:16
W końcu mi się udało przy użyciu kodu ze strony http://exposureroom.com/members/skumar.aspx/tutorials/post/3