powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Rad Studio 10.2.3 DataSnapServer
6 сообщений из 6, страница 1 из 1
Rad Studio 10.2.3 DataSnapServer
    #39793745
Mediv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.
Есть сервер приложений (DataSnapServer) в котором описано n-ое кол-во методов и находятся все Query компоненты доступа к БД.
Клиентское приложение подключается с помощью TSQLConnection через TDSProviderConnection. В клиентском приложении работа построена на ClientDataSet-ах. В TDSProviderConnection есть поддержка интерфейса IAppServer и через него можно выполнить сохранение изменений в ClientDataSet-ах c помощью метода As_ApplyUpdates
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
  IAppServer = interface(IDispatch)
    ['{1AEFCC20-7A24-11D2-98B0-C69BEB4B5B6D}']
    function  AS_ApplyUpdates(const ProviderName: OleStr; Delta: OleVariant;
                              MaxErrors: Integer; out ErrorCount: Integer; var OwnerData: OleVariant): OleVariant; safecall;
    function  AS_GetRecords(const ProviderName: OleStr; Count: Integer; out RecsOut: Integer;
                            Options: Integer; const CommandText: OleStr;
                            var Params: OleVariant; var OwnerData: OleVariant): OleVariant; safecall;
    function  AS_DataRequest(const ProviderName: OleStr; Data: OleVariant): OleVariant; safecall;
    function  AS_GetProviderNames: OleVariant; safecall;
    function  AS_GetParams(const ProviderName: OleStr; var OwnerData: OleVariant): OleVariant; safecall;
    function  AS_RowRequest(const ProviderName: OleStr; Row: OleVariant; RequestType: Integer;
                            var OwnerData: OleVariant): OleVariant; safecall;
    procedure AS_Execute(const ProviderName: OleStr; const CommandText: OleStr;
                         var Params: OleVariant; var OwnerData: OleVariant); safecall;
  end;



Сохранение изменений в ClientDataSet-ах нужно перенести на сторону сервера приложений, т.е. нужно через метод как то передать или ссылку на TDSProviderConnection(через GetServer получу IAppServer) или на сам интерфейс.
Если указать IAppServer в качестве параметра в методе на сервере приложений, то на клиенту метод не сгенерируется, т.к. нет поддержки такого типа данных в DataSnapServer.
Пробовал передавать TDSProviderConnection в качестве параметра, метод на клиенте генерится, но не отрабатывает.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
// Вызов метода на клиенте
procedure TForm3.Button2Click(Sender: TObject);
var aClient: TDMClient;
begin
  SQLConnection1.Connected := True;
  aClient := TDMClient.Create(SQLConnection1.DBXConnection);
  try
    aClient.Test2(DSProviderConnection1);
  finally
    aClient.Free;
  end;
end;

// Сгенерированный метод с помощью TSQLConnection
function TDMClient.Test2(AConn: TDSProviderConnection): Boolean;
begin
  if FTest2Command = nil then
  begin
    FTest2Command := FDBXConnection.CreateCommand;
    FTest2Command.CommandType := TDBXCommandTypes.DSServerMethod;
    FTest2Command.Text := 'TDM.Test2';
    FTest2Command.Prepare;
  end;
  if not Assigned(AConn) then
    FTest2Command.Parameters[0].Value.SetNull
  else
  begin
    FMarshal := TDBXClientCommand(FTest2Command.Parameters[0].ConnectionHandler).GetJSONMarshaler;
    try
      FTest2Command.Parameters[0].Value.SetJSONValue(FMarshal.Marshal(AConn), True);                       // ОШИБКА !!!
      if FInstanceOwner then
        AConn.Free
    finally
      FreeAndNil(FMarshal)
    end
  end;
  FTest2Command.ExecuteUpdate;
  Result := FTest2Command.Parameters[1].Value.GetBoolean;
end;



Ошибка :
Код: pascal
1.
2.
3.
4.
5.
6.
7.
---------------------------
Debugger Exception Notification
---------------------------
Project DSClient.exe raised exception class EConversionError with message 'Internal: Type tkPointer is not currently supported'.
---------------------------
Break   Continue   Help   
---------------------------



Подскажите решение, если оно есть.
Спасибо.
...
Рейтинг: 0 / 0
Rad Studio 10.2.3 DataSnapServer
    #39793752
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MedivСохранение изменений в ClientDataSet-ах нужно перенести на сторону сервера приложенийчто бы это значило?
я datasnap никогда не юзал и возможно поэтому не пойму вопроса т.к. пользуюсь обычным мидасом и сохранение изменений в cds, привязанных к провайдерам аппсервера автоматически и происходит на этом сервере, в простейшем случае вызовом метода cds.ApplyUpdates. что вы пытаетесь сделать не пойму
...
Рейтинг: 0 / 0
Rad Studio 10.2.3 DataSnapServer
    #39793757
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Передаваемые экземпляры классов должны быть DTO, а не тяжелые компоненты...
Он же сериализует поля в JSON при передаче... А в TDSProviderConnection по любому есть поля типа Pointer. А Pointer не является допустимым типом для DTO.
...
Рейтинг: 0 / 0
Rad Studio 10.2.3 DataSnapServer
    #39793888
MaratIsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mediv,
тупиковая вещь - Datasnap
...
Рейтинг: 0 / 0
Rad Studio 10.2.3 DataSnapServer
    #39794433
Mediv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X-Cite, Спасибо
...
Рейтинг: 0 / 0
Rad Studio 10.2.3 DataSnapServer
    #39794676
Mediv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если кому интересно, то реализация методов интерфейса IAppServer есть в юните Datasnap.DSProviderDataModuleAdapter, проблема решена, всем спасибо.

Код: pascal
1.
2.
3.
TDM = class(TDSServerModule)
....
Self.Providers[AProvider].ApplyUpdates(Delta, 0, ErrCount, OwnerData)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Rad Studio 10.2.3 DataSnapServer
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]