Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2015, 16:35   #1
delphi159
Подтвердите свой е-майл
 
Регистрация: 27.01.2015
Сообщений: 28
По умолчанию soap-->clientdataset-->DBGrid

Здравствуйте!
Пишу клиента Web сервиса. ТЗ такое: надо из полученного soap-ответа формировать xml пакет,назначить clientdataset-у и отображать его в DBGrid-е.
Ответ от сервера получаю и он отображается в Memo, а потом уже проблемы...
Есть 2 обработчика нажатия на кнопке 'GetServiceUsers', который возврашает список пользователей и Button_IPClick-возврашает IP клиента.
см. здесь http://f-bit.ru/692917
Пока есть только один обработчик нажатия на кнопке 'GetServiceUsers' всё работает правильно-в memo возвращается xml, а в DbGrid-е отображается clientdataset, полученный от SoapResponse:

Код:
procedure TForm1.Button_ServiceUsersClick(Sender: TObject);
var
  Fwbs: WayBillsSoap;
  Frt: get_service_users;
  FUser: get_service_usersResponse;
  FXMLNode: IXMLNode;
  FIndex: Integer;
begin

  Fwbs := GetWayBillsSoap(false, '', nil);
  Frt := get_service_users.Create;
  with Frt do
  begin
    user_name := 'satesto2';
    user_password := '123456';
  end;

  try
    FUser := Fwbs.get_service_users(Frt);
    Memo.Text := FUser.get_service_usersResult.XMLNode.Xml;

    with wbs, FUser.get_service_usersResult do
    begin
      if Active then Active := false;

      CreateDataSet;

      for FIndex := 0 to XMLNode.ChildNodes.Count - 1 do
      begin
        Append;
        FieldByName('Id').AsString := XMLNode.ChildNodes[FIndex].ChildValues['ID'];
        FieldByName('UserName').AsString := VarToStrDef(XMLNode.ChildNodes[FIndex].ChildValues['USER_NAME'], '');
        FieldByName('Un').AsString := VarToStrDef(XMLNode.ChildNodes[FIndex].ChildValues['UN_ID'], '');
        FieldByName('IP').AsString := VarToStrDef(XMLNode.ChildNodes[FIndex].ChildValues['IP'], '');
        FieldByName('Name').AsString := VarToStrDef(XMLNode.ChildNodes[FIndex].ChildValues['NAME'], '');
        Post;
      end;
    end;

  finally
    FreeAndNil(Frt);
    FreeAndNil(FUser);
    THTTPRIO(Fwbs).Free;
  end;

end;
но как-только добавляю другую процедуру ServiceUsers, который возвращает IP-адрес моего компьютера, выводится ощибка: Undeclared identifier XMLNode.


Код:
procedure TForm1.Button_IPClick(Sender: TObject);
var
  Fwbs: WayBillsSoap;
  IP: what_is_my_ip;
  IPResp:what_is_my_ipResponse;
//  FXMLNode: IXMLNode;
  FIndex: Integer;
begin

  Fwbs := GetWayBillsSoap(false, '', nil);
  Frt := what_is_my_ip.Create;
  try
    IPResp := Fwbs.what_Is_My_Ip(IP);
    Memo.Text := FUser.what_is_my_ipResult.XMLNode.Xml;

//  with clientdataset1, FUser.what_is_my_ipResult do
//  begin
      if clientdataset1.Active then clientdataset1.Active := false;
      clientdataset1.CreateDataSet;

 for FIndex := 0 to XMLNode.ChildNodes.Count - 1 do
   begin
     clientdataset1.Append;
     сlientdataset1.FieldByName('what_is_my_ip').AsString:=
             IPResp.what_is_my_ip           
                 Result.XMLNode.ChildNodes[FIndex].ChildValues['what_is_my_ip'];
     Post;
   end;
 // end;

  finally
    FreeAndNil(IP);
    FreeAndNil(IPResp);
    THTTPRIO(Fwbs).Free;
  end;
end;

Uses выглядит так:

Код:
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, WayBillService, Vcl.StdCtrls, Soap.SOAPHTTPClient,
  Vcl.Buttons, Vcl.ExtCtrls, Vcl.Grids,
  Vcl.DBGrids,  Data.DB, Datasnap.DBClient, Xml.XMLIntf, Xml.xmldom;
добавление и удаление в Uses Xml.XMLIntf, Xml.xmldom для второго ничего не меняет, а первая процедура работает и бех них.

Кроме этого. в первом процедуре
Код:
Memo.Text := FUser.what_is_my_ipResult.XMLNode.Xml;
не вызивает ощибку, а во втором ругается:Undeclared identifier XMLNode.
Если исправлю на:
Код:
  Memo.Text := FUser.what_is_my_ipResult
тогда работает, но почему так пройсходит?

Последний раз редактировалось delphi159; 29.09.2015 в 16:52.
delphi159 вне форума Ответить с цитированием
Старый 29.09.2015, 16:51   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
what_is_my_ipResult
Как выглядит описание типа этого свойства?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.09.2015, 17:48   #3
delphi159
Подтвердите свой е-майл
 
Регистрация: 27.01.2015
Сообщений: 28
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Как выглядит описание типа этого свойства?
http://services.rs.ge/WayBillService...=what_is_my_ip
delphi159 вне форума Ответить с цитированием
Старый 30.09.2015, 01:37   #4
delphi159
Подтвердите свой е-майл
 
Регистрация: 27.01.2015
Сообщений: 28
По умолчанию

Вопрос решен. Свойство get_service_usersResult имеет тип get_service_usersResult (TXMLData),
а свойство what_is_my_ipResult строковое и поэтому не "понимает" MLNode.
delphi159 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ClientDataSet и DBGrid - вместимость bilibian Общие вопросы Delphi 4 24.08.2014 16:07
Qt SOAP bumb Qt и кроссплатформенное программирование С/С++ 5 13.03.2013 13:37
SOAP vprsc C# (си шарп) 0 06.12.2012 00:17
SOAP 1.2 C++ korolcov C/C++ Сетевое программирование 0 02.11.2012 14:08
данные из dbgrid в quickreport соединение через clientdataset Leila_4ever Общие вопросы Delphi 0 11.06.2011 19:51