Webservices i SQL w Delphi

0

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.

0

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

0

Dzięki bardzo.

0

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...

0

zajzyj tu (moze juz to robiles)
http://4programmers.net/Delphi/Artyku%C5%82y/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.

0

W końcu mi się udało przy użyciu kodu ze strony http://exposureroom.com/members/skumar.aspx/tutorials/post/3

1 użytkowników online, w tym zalogowanych: 0, gości: 1