Лист |
Лист это имя физической таблицы, которая является корневой для данного видимого элемента. Лист может находиться в одном из 3-х режимов: table, viewTable, noTableNavigation.
<лист> = (table <имя-узла>) | viewTable | noTableNavigation {, eventNavigation | cartesian };
Ключевое слово table связывает редактор с физической таблицей <имя-узла>.
При попытке пользователя перейти на следующую, предыдущую, первую или последнюю запись из базы данных считывается соответственно следующая, предыдущая, первая или последняя запись в указанной таблице, при этом учитываются ограничения, накладываемые на таблицу в логической таблице. По умолчанию в качестве корневой таблицы для панели выбирается первая корневая таблица логической таблицы.
Если необходимо организовать ввод соотношения 1:N или M:N, то для этого необходимо описать два видимых элемента, один элемент с корневой таблицей реляционного отношения, а другой элемент с подчиненной.
Ключевое слово viewTable связывает редактор с логической таблицей. В результате в данной области ввода будет видна вся логическая таблица. Пользователь будет видеть перед собой результат предложения select, на котором построена выборка.
Пример:
create view as select * from Depart,Employee where (( Depart.code == Employee.NRec )); browse empAndDep; // в области ввода будут видны сотрудники viewTable; // и отделы сгруппированные по отделам. fields Depart.name; Employee.name; end;
В данном примере в табличном редакторе empAndDep отображается полный список сотрудников с указанием отдела в котором они работают, сгруппированный по отделам. Тот же список можно получить, например, из SQL предложения
select Depart.name,Employee.name from Employee,Depart where (( Depart.code == Employee.code ));
Если логическая таблица требует внешней выгрузки, то можно использовать только viewTable. При попытке использовать синтаксическую конструкцию table <имя> для логической таблицы, реализованной на внешней выборке, будет выводиться некорректная (не соответствующая логической таблице) информация.
Ключевое слово noTableNavigation указывает, что редактор не связан ни с какой таблицей. Данный режим может быть полезен, если редактор не содержит полей базы данных.
Пример:
create view var buttonState: string;; screen scrButtonTest; noTableNavigation; fields buttonState; buttons cmButton1, [fixing, icon testBmp1]; cmButton2, default; cmState; cmSunken; cmRaised; << Состояние кнопки: .@@@@@@@@@@@@@@@ <. Fixing .> <. Default .> <. Get State .> <. Set sunken .> <. Set raised .> >> end;
Атрибут eventNavigation используется, чтобы переключить навигацию на событийный механизм.
При этом способе вместо прямой работы с логической либо физической таблицей будут генерироваться события главному окну интерфейса cmDoGetFirst, cmDoGetLast, cmDoGetNext, cmDoGetPrev, cmDoFind, cmGetAddr, cmGetDirect.
Модификация полей в этом режиме отслеживается в событии cmCheckField. События модификации таблиц cmUpdateRecord, cmInsertRecord, cmDeleteRecord, cmCheckRecord не генерируются. Обрабатывать их нельзя.
События позиционирования cmGetAddr и cmGetDirect работают с позицией. Событие cmGetAddr выдается только при отключенном флаге itfNavigationByTable. В этом случае данное событие возвращает ядру системы число, являющееся позицией в списке через процедуру ReturnPosition. Получить значение из VIPа можно функцией SetPosition. Типом представления позиции в списках, не связанных с таблицами, является comp.
При наличии в окне /интерфейсе нескольких browse, screen или tree в режиме noTableNavigation переменная Target при приходе вышеуказанных событий будет содержать значение для сравнения с именем броузера, по которому в данный момент осуществляется навигация.
Примеры: "Пример навигации по таблице с посылкой событий. ", "Пример навигации по массиву с поиском. ", "Пример навигации по дереву на массиве. ", "Пример навигации по смешанному дереву. ".
Атрибут cartesian может быть использован, если необходимо отобразить декартово произведение таблиц в одной области ввода. При наличии этого атрибута записи в области ввода будут видны как результат предложения select из корневой таблицы области ввода и всех к ней подцепленных. (По умолчанию видно все записи из корневой таблицы и для каждой такой записи по одной из всех подцепляемых).
При перемещении по записям таблицы 'Проекты' в верхней панели, в нижней будут прорисовываться все сотрудники, задействованные в данном проекте.
interface empProjView; create view as select * from Employee,Project,EmpProj where ((Project.code==EmpProj.proj and EmpProj.emp==Employee.code)); screen projectScreen; table Project; fields Project_name : protect; Project_code : protect; end; browse projectEmployees; table EmpProj; fields Employee_name : protect; end; end.
Пример навигации по таблице с посылкой событий
Пример навигации по массиву с поиском