• Как продвинуть сайт на первые места?
    Вы создали или только планируете создать свой сайт, но не знаете, как продвигать? Продвижение сайта – это не просто процесс, а целый комплекс мероприятий, направленных на увеличение его посещаемости и повышение его позиций в поисковых системах.
    Ускорение продвижения
    Если вам трудно попасть на первые места в поиске самостоятельно, попробуйте технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Если ни один запрос у вас не продвинется в Топ10 за месяц, то в SeoHammer за бустер вернут деньги.
    Начать продвижение сайта


  • Иллюстрированный самоучитель по Delphi 7 для профессионалов

    Кэширование и редактирование данных

    После получения записей от провайдера набор данных сохраняется в локальном буфере памяти. И все вносимые изменения после применения метода Post также сохраняются локально и не пересылаются на сервер. Буфер изменений доступен при помощи свойства:

    property Delta: OleVariant;
    

    Для передачи изменений на сервер используется метод:

    function ApplyUpdates(MaxErrors: Integer);
    Integer; virtual;
    

    Где параметр MaxErrors задает число ошибок, которые игнорируются при сохранении данных на сервере. Если параметр равен -1, сохранение на сервере прерывается при первой же ошибке. Метод возвращает число сохраненных записей.

    После выполнения метода ApplyUpdates все записи, сохранить которые не удалось, возвращаются клиенту в локальный буфер Delta.

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

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

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

    property ChangeCount: Integer;
    

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

    procedure CancelUpdates;
    

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

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

    property BeforeApplyUpdates: TRemoteEvent;
    property AfterApplyUpdates: TRemoteEvent;
    

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

    procedure RefreshRecord;
    

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

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

    property BeforeRowRequest: TRemoteEvent;
    property AfterRowRequest: TRemoteEvent;
    

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

    function UndoLastChange(FollowChange: Boolean): Boolean;
    

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

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

    function UpdateStatus: TUpdateStatus; override;
    

    …который возвращает значение типа:

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

    …означающее состояние текущей записи:

    • usUnmodified – запись осталась неизменной;
    • usModified – запись была изменена;
    • uslnserted – запись была добавлена;
    • usDeleted – запись была удалена.

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

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

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

    property StatusFilter: TUpdateStatusSet;
    

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

    ClientDataSet.StatusFilter: = usDeleted;
    

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

    Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.