Если клиентское приложение будет редко изменять свои наборы данных, сохранение изменений на сервере можно связать с методом-обработчиком AfterPost:

procedure TForml.ClientDataSetAfterPost(DataSet: TDataSet);
begin
ClientDataSet.ApplyUpdates(-lb-end;

Свойство только для чтения

property ChangeCount: Integer;

возвращает общее число изменений, содержащееся в буфере Delta. Для очистки буфера изменений используется метод

procedure CancelUpdates;

После вызова метода свойство ChangeCount принимает значение 0.

До и после сохранения изменений на сервере соответственно вызываются методы-обработчики

property Bef oreApplyUpdates : TRemoteEvent;
property Af terApplyUpdates : TEeirDteEvent;

Несмотря на сделанные локально многократные изменения, запись может быть восстановлена в первоначальном виде. Метод

procedure RefreshRecord;

получает от провайдера первоначальный вариант текущей записи, сохраненный на сервере.

19 Зак 559

При этом (и при всех других случаях, когда компонент запрашивает обновление текущей записи) вызываются методы-обработчики

property BeforeRowRequest: TRemoteEvent;
property AfterRowRequest: TRarefceEvent;

Но что делать, если необходимо восстановить удаленную запись? В обычном наборе данных после сохранения это невозможно. В компоненте TClientDataSet существует метод

function UndoLastChange (FollowChange: Boolean): Boolean;

который возвращает набор данных к состоянию до последней выполненной операции редактирования, добавления или удаления записи. Если параметр FollowChange имеет значение True, курсор набора данных будет установлен на восстановленную запись.

О состоянии текущей записи позволяет судить метод

function UpdateStatus: TUpdateStatus; override; который возвращает значение типа

TUpdateStatus = (usUnmodified, usModified, uslnserted, usDeleted) ;

означающее состояние текущей записи: usUnmodified - запись осталась неизменной; usModif ied - запись была изменена; uslnserted - запись была добавлена; usDeleted - запись была удалена.

Например, при закрытии набора данных можно выполнить проверку:

if ClientDataSet.UpdateStatus = usMcdified then ShowMessage('Record was changed');

На основе типа можно управлять видимостью записей в наборе данных. Свойство

property StatusFilter: TUpdateStatusSet;

определяет, какой тип записей будет отображаться в наборе данных. Например:

ClientDataSet.StatusFilter := usDeleted;

отобразит в наборе данных только удаленные записи (при этом изменения не сохранены на сервере).

Управление запросом на сервере

Компонент TClientDataSet может не только эффективно управлять своим набором данных, но и влиять на выполнение серверного компонента, с которым он связан через провайдер.

Свойство

property CommandText: string;

содержит текст запроса SQL, имя таблицы или хранимой процедуры в зависимости от типа серверного компонента.

Изменив значение этого свойства на клиенте, можно, например, модифицировать запрос SQL на сервере. Но для этого в свойстве options соответствующего компонента-провайдера TDataSetProvider должно быть установлено значение

poAllowCommandText := True;

⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в Delphi 7



Новости за месяц

  • Июнь
    2017
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс