REMSEL


Библиотека

V32.EXE

Синтаксис

REMSEL(file: IDENT;
       { VAR field: ANYTYPE; 
         value: ANYTYPE } );

Описание

Процедура удаляет все записи текущего селекта файла file, удовлетворяющие условию фильтра, наложенного при помощи произвольного количества пар необязательных параметров field и value. Каждая пара необязательных параметров задает равенство, равенства объединяются в условие фильтра конъюнкцией. Первый в паре параметр field обязан быть полем файла file, но не обязан входить в индексы файла. Второй параметр value задает значение и обязан быть совместим с field по сравнению.

В курсоре файла file должен быть определен селект, в противном случае будет выброшено исключение 363. Определенность текущей позиции не требуется. После выполнения REMSEL текущая позиция станет неопределенной, но установленный селект сохранится. Т.о., если из-за наличия фильтра будут удалены не все записи селекта, последующий FIRST спозиционируется на первую из оставшихся.

При включенном контроле ссылочной целостности базы данных вместе с записями файла file будут удалены связанные с ними записи транзитивных BORROW-файлов. Контроль целостности работает точно также, как при выполнении процедуры REMOVE.

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

Процедура никак не блокирует записи селекта, неудовлетворяющие условиям фильтра. Процедура может отображать индикатор выполнения с текстом: "Удаление записей. Ждите".

В целом результат работы процедуры REMSEL аналогичен результату последовательных вызовов REMOVE для всех записей селекта, удовлетворяющих условию фильтра, однако REMSEL гораздо эффективнее и меньше загружает сеть. Процедура реализована на единственном серверном запросе. На все время выполнения процедуры сервер удерживает под захватом обрабатываемый файл, а при включенном контроле целостности - и все связанные с ним BORROW-файлы, в результате чего другие подключения при попытке обращения к этим файлам будут ждать окончания выполнения REMSEL; через пару секунд ожидания у них отобразится индикатор ожидания с текстом: "Доступ к файлу временно запрещен. Причина: Удаление записи".

Исключительные ситуации

Файл file не существует Исключение 16
Указанное в фильтре поле не является полем файла file Исключение 19
В фильтре указано массивовое поле файла file Исключение 10
Не определен селект в файле file Исключение 363
Пользователь не имеет прав удаления (Delete) на файл file или, при включенном контроле целостности БД, на один из транзитивно связанных BORROW-файлов, имеющих записи, связанные с удаляемой записью файла file Исключение 352
Попытка выполнения операции модификации для подключаемого файла, открытого на чтение Исключение 941
Только при включенном контроле целостности БД: один из USER-файлов файла file (связь с BORROW-файлами здесь не рассматривается) имеет записи, ссылающуюся на удаляемые записи Исключение 223
Только при включенном контроле целостности БД: пользователь не имеет прав чтения (Scan) на один из транзитивных BORROW-файлов, имеющих записи, связанные с удаляемыми Исключение 224

Пример

Фрагмент

SELECT(RWayS, TSN, , 0);
REMSEL(RWayS, BoxNbr, 17, Gap, 1);
REMSEL(RWayS, BoxNbr, 22, Gap, 1);

удалит записи файла RWayS, в которых RWayS.TSN=0, RWayS.Gap=1, а  RWayS.BoxNbr=17 или 22

См. также