ACCESS


Библиотека

V32.EXE

Синтаксис

ACCESS(file: IDENT)[ : SCAL[2] ];

Описание

Работа включает в себя несколько этапов:

  1. Если в курсоре таблицы file с начала ASL-программы ни разу не выполнялось позиционирование, то предпринимается попытка получить позицию из курсора мастера зоны видеоокна, на которой выполняется данная ASL-программа, или ее транзитивно порождающих зон. Для этого
    1. На первом этапе пытается получить позицию непосредственно из курсоров мастеров зон. Начиная с зоны видеоокна, на которой выполняется данная ASL-программа, в сторону родительских зон просматриваются все транзитивно порождающие зоны не только этого окна, но и всей цепочки порождающих окон вплоть до независимого окна включительно (см. Принципы построения видеоокон и Межоконное взаимодействие в видеосистеме), и ищется зона с мастером file. Если такая зона нашлась то из ее курсора информация о позиции копируется в курсор программы
    2. Если первый этап не дал положительного результата, то на втором этапе выполняется попытка получить позицию из транзитивных справочников мастеров зон. Снова выполняется проход по порождающим зонам. Из мастера каждой зоны строится путь в file. Если удалось, причем каждый шаг пути ведет в справочник или исторический BORROW, то выполняется конформ, и полученная позиция таблицы file копируется в курсор программы.

    3. Если второй этап не дал положительного результата, то если ACCESS вызвана, как функция, она возвращает 0, если как процедура, выбрасывает исключение 978 с текстом "Таблица FileName не достигается из зоны ZoneNo окна WindowName".
    4. Если полученная позиция не определена, то ACCESS-функция возвращает 0, а процедура выбрасывает исключение 980.
    Если позиционирования в курсоре file к моменту вызова ACCESS уже были, то позиция в курсоре не меняется. При этом если позиция в курсоре не определена, ACCESS-функция возвращает 0, а процедура выбрасывает исключение 978 с текстом "Не установлена текущая запись в таблице FileName"
  2. Текущая позиция курсора file адаптируется к ASL по стандартному правилу, причем вне зависимости от того, выполнялось ли в п.1 копирование позиции из курсора зоны.
  3. Если окно в состоянии заготовки (такое может быть, например, в событии OnInitializeZoneFilters), функция ACCESS возвращает 0.

ACCESS можно условно отнести к группе процедур позиционирования, а общий смысл результата понимать как "текущая позиция в таблице определена". И значит (начиная с версии 14.198.030) после выполнения ACCESS, как и после любой другой процедуры позиционирования, устанавливающей позицию внутри TRY-блока, позиция на выходе из TRY определяется его атрибутом RESTORE_CURSORS.

См. также