Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VisualFoxPro.doc
Скачиваний:
15
Добавлен:
01.07.2025
Размер:
11 Мб
Скачать
☆

15.6. Редактирование записей таблиц

15.6.1. Общие опции и параметры команд

Описаны в табл. 1.7 и 15.4.

Таблица 15.4

Опции и параметры команд

Опция / параметр

Описание

FIELDS FieldList

Задает список обновляемых (копируемых) полей

FIELDS LIKE Skeleton

Неявно задает список обновляемых (копируемых) полей. В список попадают поля, удовлетворяющие маске Skeleton. Маска Skeleton может содержать символы * и ?

FIELDS EXCEPT Skeleton

Неявно задает список обновляемых (копируемых) полей. В список попадают поля, не удовлетворяющие маске Skeleton

Scope

Описана в табл. 1.7. В случае BLANK, DELETE, REPLACE и RECALL диапазон действия – это текущая запись (NEXT 1)

FOR lExpression

Строка массива добавляется в таблицу, если lExpression вычисляется со значением .T. Операндами lExpression являются в том числе и элементы строки массива ArrayName

FROM ARRAY ArrayName

Задает массив, данные которого вставляются в новую запись. Значение первого элемента строки массива вставляется в первое поле новой записи, второго – во второе и т. д. Число добавленных записей равно числу строк массива. Одномерный массив трактуется как двумерный с одной строкой

FROM MEMVAR

Указывает, что в поля новой записи вставляются значения переменных памяти. Значение переменной памяти m.FieldName вставляется в поле с именем FieldName. Если для поля не существует переменной памяти, то оно остается неизмененным. Обычно переменные памяти создаются командой SCATTER MEMVAR

FROM NAME ObjectName

Задает объект, значения свойств которого вставляются в поля новой записи. Значение свойства ObjectName.FieldName вставляется в поле FieldName. Если для поля не существует свойства, то оно остается пустым. Обычно объект ObjectName создается командой SCATTER NAME. Если тип свойства объекта не соответствует типу поля, то VFP генерирует ошибку

15.6.2. Предварительные замечания

Если поле числовое, а записываемое в него значение слишком велико, то выполняются следующие действия:

  • обрезаются неумещающиеся десятичные знаки, оставшаяся десятичная порция округляется;

  • если значение по-прежнему не вписывается в поле, выполняется попытка записать значение в научной нотации (экспоненциальной форме), при условии, что размер поля не менее 7;

  • если эта попытка неудовлетворительна, то поле заполняется звездочками.

Тип вставляемого в поле значения должен соответствовать типу поля. В противном случае генерируется ошибка.

Все команды игнорируют поля типа General.

Многие команды оперируют опцией FOR, а некоторые – WHERE. При их использовании в сложных выражений могут возникать ошибки 1308 – недостаточен размер стека и 1812 - SQL: слишком длинный оператор. Чтобы их избежать, нужно либо упростить выражения и, возможно, уменьшить их число, либо увеличить уровень сложности, разрешенный в опциях FOR и WHERE. Последнее осуществляется функцией

SYS(3055 [, nComplexity])

за счет задания соответствующего значения nComplexity – числа в диапазоне от 320 (по умолчанию) до 2040. Увеличение nComplexity поднимает порог допустимого уровня сложности. Если значение nComplexity нечетно, то функция приведет его к ближайшей четной величине.

Функция SYS(3055) возвращает установленный на момент ее вызова уровень сложности, разрешенный в опциях FOR и WHERE.

Пример. Вызов TABLEUPDATE( ) для локальной таблицы или вида, не использующей индекса, генерирует длинную опцию WHERE для поиска обновляемой строки. По умолчанию опция WHERE поддерживает 40 полей. Если получена ошибка 1812, то для ее преодоления нужно либо использовать индекс, либо увеличить допустимую сложность опции WHERE, устанавливая его равным 8 * FCOUNT( )

set multilocks on

&& Устанавливаем пессимистическую буферизацию записи

CursorSetProp("Buffering", 2)

&& Выполняются операции с таблицей

&& …

&& Функция FCOUNT( ) возвращает число полей таблицы

&& Обращаясь к SYS(3055), учитываем, что 320 ≤ nComplexity ≤ 2040

Sys(3055, Max(320, Min(2040, 8 * Fcount( ))))

&& Обновляем текущую таблицу

TableUpdate( )

&& Восстанавливаем заданный по умолчанию уровень сложности

Sys(3055, 320)

Большинство примеров выполнено с использованием таблиц базы данных HomeLibrary, рассмотренной в разд. 2.2. Для сокращения кода примеров нередко предполагается, что нужные таблицы уже открыты. Поэтому для воспроизведения примера, выполненного с таким предположением, следует предварительно открыть используемые в примере таблицы.

Если SET DELETED установлен в ON, то записи с пометкой удаления командами, оперирующими с диапазоном записей, игнорируются.

При работе с полями типа Integer (AutoInc) и употреблении команд типа APPEND FROM или INSERT INTO следует позаботиться о надлежащей установке SET AUTOINCERROR.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]