ADD(file: IDENT;
index: IDENT;
[ VAR oc: SCAL[2] ];
{ indexFieldValue: ANYTYPE; }
{ VAR fileField: FLOAT;
addValue: FLOAT });
ADD(file: IDENT;
index: IDENT;
{ indexFieldValue: ANYTYPE; }
{ VAR fileField: FLOAT;
addValue: FLOAT }
): SCAL[2];
Выполняет увеличение значений полей fileField файла file указанной записи на соответствующие величины addValue.
Условно можно считать, что работа состоит из трех этапов.
После успешного выполнения процедуры текущая позиция всегда определена (OCCURE вернет 1) и соответствует обрабатываемой записи. Если индекс index совпадает с текущим индексом курсора файла file, и обрабатываемая запись попадает в селект курсора файла file, то индекс и селект в курсоре не меняется. Иначе текущим становится индекс index без зафиксированных полей (селект на 0 полей).
Возвращаемое значение в режиме функции или значение параметра oc в режиме процедуры означает "Искомая запись к моменту вызова ADD уже существовала", т.е. вставка новой записи не выполнялась, а модифицировалась существующая запись.
Контроль ссылочной целостности БД поддерживается частично. Считается (не проверяется), что поля fileField не входят в индексы, по которым организована связь с другими файлами. Однако при включенном контроле целостности (начиная с V14.54.2) проверяется наличие справочных записей, соответственно могут быть выброшены исключения 217, 218, 219, 220.
ADD(File, FileIndex, ,
FileIndexField1Value, FileIndexField2Value + 2,
File.FileField, -1,
File.FileArrayField[3], 4.3);
В файле File устанавливает текущим индекс FileIndex, состоящий из двух полей. По индексу FileIndex ищет запись со значением FileIndexField1Value первого поля индекса FileIndex и значением FileIndexField2Value + 2 второго поля индекса FileIndex. Если такая запись не нашлась, то выполняется вставка. Затем значение поля FileField увеличивается на -1, т.е. уменьшается на 1, а значение 3-го элемента массивового поля FileArrayField увеличивается на 4.3. Результирующая запись прописывается на диск, а в ASL-программе позиция с этой записью становится текущей.
fileField не является полем файла file | Исключение 19 |
Тип поля fileField не определен или является массивом | Исключение 10 |
Поле fileField или значение addValue имеют не числовой тип | Исключение 7 |
Поле fileField модифицируемой записи имеет пустое значение | Исключение 290 |
Переполнение при вычислении значения поля fileField | Исключение 48 |
Попытка выполнения операции модификации для подключаемого файла, открытого на чтение | Исключение 941 |
Указан неуникальный индекс либо значения не всех его полей | Исключение 959 |
Исходное значение записи файла file не удовлетворяет файловому фильтру (см. TABLE.Filter) | Исключение 396 |
Новое значение записи файла file не удовлетворяет файловому фильтру (см. TABLE.Filter) | Исключение 397 |
Выполнение процедуры, когда файла file находится в конкурентном режиме, и модифицируемая запись не заблокирована ни разделяемо, ни монопольно (подробнее см. конкурентные операции модификации) | Исключение 960 |
Только при включенном контроле целостности БД: исходная запись ссылается на справочную запись, не удовлетворяющую файловому фильтру (см. TABLE.Filter) | Исключение 219 |
Только при включенном контроле целостности БД: исходная запись ссылается на несуществующую справочную запись | Исключение 218 |
Только при включенном контроле целостности БД: новый экземпляр записи ссылается на справочную запись, не удовлетворяющую файловому фильтру (см. TABLE.Filter) | Исключение 217 |
Только при включенном контроле целостности БД: новое значение записи файла file нарушает ссылочную целостность, так как поля связи со справочником имеют такие значения, что в справочном файле нет соответствующей записи | Исключение 220 |