После выбора режима буферирования и типа блокировки, вы можете разрешить буферирование таблицы или записи.

Для разрешения буферирования

  • Выберите одну из приведенных ниже опций:

    • В Конструкторе форм (Form Designer), установите свойство курсора BufferModeOverride в окружении данных (DataEnvironment) формы.

    или

    • Используйте функцию CURSORSETPROP() для установки свойства Buffering.

Например, вы можете разрешить пессимистическое буферирование строки с помощью приведенного ниже программного кода, помещенного в процедуру события Init формы:

 CopyCode imageСкопировать код
CURSORSETPROP('Buffering', 2)

Затем вы можете поместить код для операции обновления в коде подходящего метода для вашего элемента управления.

Для записи данных в оригинальную таблицу используйте функцию TABLEUPDATE(). Для прекращения редактирования, в случае ошибки обновления или неудачной попытки обновления в результате нарущения правил, используйте функцию TABLEREVERT(), которая действительна даже в случае, когда явное буферирование таблицы не разрешено. Для указания уровня проверки целостности таблицы ниже,чем используемого по умолчанию, вы можете использовать команду SET TABLEVALIDATE.

Приведенный ниже пример показывает, как обновить записи при разрешенном пессимистическом буферировании.

Пример обновления с использованием буферирования записи и таблицы
Программный код Комментарий

OPEN DATABASE testdata

USE customers

CURSORSETPROP('Buffering', 2)

В процедуре события Init формы, открывает таблицу и разрешает пессимистическое буферирование записи.

lModified = .F.

FOR nFieldNum = 1 TO FCOUNT()

IF GETFLDSTATE(nFieldNum) = 2

lModified = .T.

EXIT

ENDIF

ENDFOR

Проходит по полям, проверяя любое поле, которое было изменено.

NoteЗамечание

Этот код может быть помещен в процедуру события Click командной кнопки "Save" или "Update".

IF lModified

nResult = MESSAGEBOX;

("Record has been modified. Save?", ;

4+32+256, "Data Change")

Поиск следующей измененной записи.

IF nResult = 7

TABLEREVERT (.F.)

ENDIF

ENDIF

Представляет текущее значение и дает пользователю опцию сбросить изменения в текушем поле.

SKIP

IF EOF()

MESSAGEBOX( "already at bottom")

SKIP -1

ENDIF

THISFORM.Refresh

SKIP гарантирует, что последнее изменение записано.

Смотрите также