CONCURRENTADD(file: IDENT;
index: IDENT;
{ indexFieldValue: ANYTYPE; }
{ fileField:
FIELDIDENT;
addValue: FLOAT });
Выполняет конкурентное увеличение значений полей fileField файла file указанной записи на соответствующие величины addValue.
Интерфейс и результат работы процедуры CONCURRENTADD аналогичны процедуре ADD, но в отличии от нее CONCURRENTADD - это конкурентная операция.
Условно можно считать, что работа состоит из следующих этапов:
После успешного выполнения процедуры текущая позиция всегда определена (OCCURE вернет 1) и соответствует обрабатываемой записи. Если индекс index совпадает с текущим индексом курсора файла file, и обрабатываемая запись попадает в селект курсора файла file, то индекс и селект в курсоре не меняется. Иначе текущим становится индекс index без зафиксированных полей (селект на 0 полей).
Подробнее о том, как система обрабатывает конкурентные операции см. здесь.
CONCURRENTADD(File, FileIndex,
FileIndexField1Value, FileIndexField2Value + 2,
FileField, -1,
FileArrayField[3], 4.3);
В файле File устанавливает текущим индекс FileIndex, состоящий из двух полей. По индексу FileIndex ищет запись со значением FileIndexField1Value первого поля индекса FileIndex и значением FileIndexField2Value + 2 второго поля индекса FileIndex. Если такая запись не нашлась, то выполняется вставка. Затем формируется псевдоэкземпляр, в котором сказано, что значение поля FileField нужно увеличить на -1, т.е. уменьшить на 1, а значение 3-го элемента массивового поля FileArrayField увеличить на 4.3.
fileField не является полем файла file | Исключение 19 |
Тип поля fileField не определен или является массивом | Исключение 10 |
Поле fileField или значение addValue имеют не числовой тип | Исключение 7 |
Поле fileField имеет пустое значение | Исключение 290 |
Переполнение при вычислении значения поля fileField | Исключение 48 |
Попытка выполнения операции модификации для подключаемого файла, открытого на чтение | Исключение 941 |
Поле fileField файла file, указанное в параметрах процедуры CONCURRENTADD, имеет пустое значение по умолчанию | Исключение 954 |
Поле fileField файла file, указанное в параметрах процедуры CONCURRENTADD или CONCURRENTRESET, входит в состав индекса файла | Исключение 955 |
Указан неуникальный индекс либо значения не всех его полей | Исключение 959 |
Файл File не находится в конкурентном режиме | Исключение 962 |
Исходное значение записи файла file не удовлетворяет файловому фильтру (см. TABLE.Filter) | Исключение 396 |
Последовательное (в любом порядке) выполнение CONCURRENTRESET и CONCURRENTADD (или CONCURRENTADDONLY) | Исключение 960 |
Только при включенном контроле целостности БД: исходная запись ссылается на справочную запись, не удовлетворяющую файловому фильтру (см. TABLE.Filter) | Исключение 219 |
Только при включенном контроле целостности БД: исходная запись ссылается на несуществующую справочную запись | Исключение 218 |