Курсоры.

Курсор - это переменная, содержащая информацию о позиции в некотором файле базы данных. Эта информация включает в себя три аспекта

Наглядно курсор можно представить себе так, как выглядит текущая запись в табличной зоне видео-окна. Селект здесь - это текущий ключ сортировки, а также наложенное на зону представление. Позиция - это табличный HighLight, т.е. выделенная цветом строка, вместо выделения цветом можно было бы применить любой способ, например специальный маркер на рамке зоны. Элемент - значения полей выделенной строки, т.е. собственно текст под HighLight.

Все манипуляции с записями файла базы данных выполняются с помощью курсоров. Например, функции ASL-языка SEARCH, FIRST и т.п. изменяют позицию в курсорах, а также прописывают в элемент считанную с диска запись. SELECT кроме этого изменяет состояние селекта. С помощью операции присваивания в языке можно изменить значение некоторого поля элемента курсора, а процедура REPLACE пропишет элемент на диск.

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

В перспективе предполагается иметь в ASL-языке переменные типа "КУРСОР" и манипулировать с ними как с переменными - присваивать друг другу, передавать в процедуры в качестве параметров и т.п. Правда имеется ограничение - на самом низком системном уровне запрещено выполнять присвоение из курсора, имеющего "сырую" запись.

Каждый курсор принадлежит какой либо транзакции. Вследствие этого в некоторых случаях в курсорах может автоматически изменяться информация о позиции:

Курсоры в ASL-языке.

Как уже отмечалось выше, для каждого файла можно создавать любое количество курсоров. Однако, современный синтаксис языка не позволяет явно заводить переменные-курсоры. Наоборот, предполагается наличие в программе по одному курсору у каждого файла, которые заводятся автоматически, и доступ к ним осуществляется по имени файла. Каждая ASL-программа заводит собственный комплект курсоров. Позиции в этих курсорах на старте программ не определены, за исключением случаев:

  1. определена позиция программных курсоров мастеров RTI.CurZone и RTI.TrgZone

  2. если программа выполняется на транзакции интерактивного редактирования, то в программные курсоры копируются позиции соответствующих редактируемых в этой транзакции файлов. Например, входим в интерактивное редактирование записи файла RWayS, затем переходим в подчиненную зону с RWayJ, делаем вставку записи RWayJ, и программное событие OnBeforeInsert имеет доступ к вставленной записи в RWayJ и редактируемой записи RWayS.

В остальных случаях требуется предварительно выполнить в файле абсолютное позиционирование, либо получить позицию из видеосистемы, например, с помощью ACCESS.