Возвращает номер Записи для последующей корректироки данных в буферизированной Таблице или Курсоре.

GETNEXTMODIFIED(nRecordNumber [, cTableAlias | nWorkArea] [, lNoFire])

Параметры

nRecordNumber

Определяет номер Записи, после которой данная функция GETNEXTMODIFIED( ) выполняет поиск следующей Записи для корректировки данных. Если данный параметр nRecordNumber = 0, то поиск следующей Записи для корректировки данных выполняется с первой записи буферизированной Таблицы.

cTableAlias

Определяет Алиас Таблицы или Курсора, для которых функция GETNEXTMODIFIED( ) возвращает номер следующей Записи для корректировки данных.

nWorkArea

Определяет номер рабочей области, в которой открыта Таблица или Курсор, для которых функция GETNEXTMODIFIED( ) возвращает номер следующей Записи для корректировки Данных.

Если вы не указываете данный параметр, GETNEXTMODIFIED( ) возвращает номер Записи текущей Таблицы, открытой в текущей рабочей области.

lNoFire

Определяет Подавление (игнорирование) всех существующих Правил (rules) изменения в таблице Базы Данных.

Expand imageВозвращаемое значение

Числового типа (Numeric)

Expand imageКомментарии

GETNEXTMODIFIED( ) = 0, то больше нет Записей для корректировки, расположенных после указанной Записи в данной функции. Пэтому, если вы выполняете изменения данных только в одной Записи, вам достаточно выполнить команду перехода на первуюзапись Таблицы: GO TOP,   позиционировать указатель на запись, расположенную перед вашей Записью. Данные в Записи считаются измененными, если выполнено изменение одного лишь поля записи (или данные в записи восстановлены), или изменен статус удаления данной записи таблицы.

GETNEXTMODIFIED( ) работает только с Буферизированными Таблицами или Курсорами. Изменение статуса буферизации выполняется с использованием функции CURSORSETPROP( ).

Пока Триггеры не изменяются функцией GETNEXTMODIFIED( ), lNoFire подавляет только Правила изменения Полей и Записей, а также ситуации возникновения ошибки: "Uniqueness of index ID is violated". lNoFire предохраняет сохранение на диск временных данных в буфере, например таких данных, которые содержатся в соответствующих Контролах Формы, или в рабочих Курсорах.

Expand imageПример

В следующем программном коде используется GETNEXTMODIFIED( ), функция, для проверки изменения Записи в буферизированной Таблице. Обычно, изменения данных выполняются пользователем в Форме Редактирования. Для данного примера, изменения выполняются с использованием команды SQL UPDATE. Для демонстрации работы программного кода с использованием метода GetNextModified, Таблица открывается из Базы Данных Sample, устанавливается режим Оптимистической Буферизации для Записи Таблицы, выполняются необходимые изменения.

Функция GetNextModified( ) вызавается с параметром = 0, что указывает на корректировку первой записи в буфере. Далее выполняется цикл корректировки Записей, основанный на значении переменной MaxOrdAmt. Выполненные изменения Отменяются, если значение этой переменной MaxOrdAmt > 8500. GetNextModified( ) вызывается повторно, в этом случае корректируется текущая Запись Таблицы, чтобы получить следующий номер Записи для корректировки в буфере. Если GetNextModified( ) = 0, это означает, что нет больше некорректированных Записей, цикл заканчивается. Вызывается функция TableRevert(.t.) - для отмены выполненных изменений в исходной Таблице, данные возвращаются в свое начальное состояние.

 CopyCode imageКопировать Код
LOCAL lnCurRec
CLEAR
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'data\testdata')
USE Customer

* Enable table buffering.
SET MULTILOCKS ON
=CURSORSETPROP("Buffering", 5, "customer")

* Increase MAXORDAMT by 10% for customers in Mexico.
UPDATE Customer SET MaxOrdAmt=MaxOrdAmt * 1.1 WHERE Country = "Mexico"

* Start with the first modified record.
lnCurRec = GETNEXTMODIFIED(0)

* DO until all modified records are processed.
DO WHILE .T.

* Move to the current modified record.
GOTO (m.lnCurRec)

* Process modified row here.
? Customer.Company, Customer.MaxOrdAmt
IF Customer.MaxOrdAmt > 8500
=TABLEREVERT(.F.)
ENDIF
?? Customer.MaxOrdAmt

* Get the next modified record from here.
lnCurRec = GETNEXTMODIFIED(m.lnCurRec)

IF m.lnCurRec = 0 && No more modified records.
EXIT
ENDIF

ENDDO

=TABLEREVERT(.T.) && Restore sample data and discard all changes.

Expand imageСм. также