MVP Logo

Материализуя идеи

Не поднимешься в горы — не узнаешь высоты неба; не спустишься в бездну — не узнаешь толщи земли.

Сценарии доступа к удаленным датасетам только для чтения, для чтения и записи.
Кратенько, можно сказать, шпора.

Сценарий только для чтения на клиенте:

  1. На стороне сервера определять _серверные_ методы, возвращающие датасеты
  2. На стороне клиента используем TSqlServerMethod
  3. На время ре-генерации клиентских модулей доступа к методам сервера надо отменять авторизацию сервера
  4. То же надо делать и для запросов полей данных клиентом с сервера
  5. Удаленные серверные датасеты цепляются цепочкой TSQLConnection<-TSqlServerMethod<-TDataSetProvider<-TClientDataSet<-TDataSource

 

Чтение-апдейты со стороны клиента (TDSProviderConnection):

  1. На стороне клиента: TSQLConnection<-TDSProviderConnection(+specify Server Class Name)<-TClientDataSet(RemoteServer->TDSProviderConnection variable name, ProviderName->server method's dataset provider variable name)<-TDataSource
  2. Далее-из этого документа (см. также ссылки по теме в блоке справа) Имеется два способа отправки изменений, которые мы сделали на клиенте, назад

на сервер: автоматический и ручной. В итоге они вызывают один и тот же метод, но вызов
осуществляется автоматически или с участием пользователя. Каждый из них имеет свои
преимущества и недостатки.
При автоматическом подходе мы можем использовать события OnAfterInsert, OnAfterPost и
OnAfterDelete компонента TClientDataSet, поскольку это методы, которые внесли изменения в
данные. В обработчиках событий, которые могут использоваться совместно в единой реализации,
мы можем вызвать метод ApplyUpdates компонента TClientDataSet, отправляя изменения, которые
также вызвали изменения данных, назад на сервер для их возврата в базу данных. 28
Если во время обновления что-то идет не так (например, не удается найти запись), мы можем
получить сообщение в событии OnReconcileError компонента TClientDataSet, которое более
подробно рассматривается в разделе 3.2.3.
При ручном способе возврата обновлений на сервер DataSnap также используется метод
ApplyUpdates компонента TCIientDataSet, но на этот раз метод не должен вызываться в
обработчиках событий OnAfterInsert, OnAfterPost и OnAfterDelete. Вместо этого мы должны
добавить в форму клиента кнопку, которая разрешит пользователю явным образом возвращать
обновления на сервер.
Преимущество автоматического вызова ApplyUpdates, конечно, заключается в том, что
пользователь никогда не забудет применить изменения на сервере. А недостаток заключается в
отсутствии возможности отмены: после ввода данные отправляются на сервер. С другой стороны,
при использовании ручного способа все изменения сохраняются на стороне клиента — в памяти
компонента TClientDataSet. Это дает возможность пользователю отменять отдельные части
изменений: последнее изменение, какое-то конкретное изменение или все изменения, которые
находятся в процессе ожидания. Нажатие кнопки обновления позволяет явным образом вызывать
метод ApplyUpdates, когда пользователь готов к этому. Потенциальная опасность заключается в
том, что пользователь может забыть нажать кнопку обновления, поэтому нам нужно добавить
проверку в форму или приложение, чтобы избежать их закрытия до тех пор, пока в TClientDataSet
остаются изменения.

Яндекс.Метрика

Сейчас один гость и ни одного зарегистрированного пользователя на сайте

25.02.2020  ©2020 - ExactSoft - All rights reserved