Лист Назад В начало Вперед

Лист это имя физической таблицы, которая является корневой для данного видимого элемента. Лист может находиться в одном из 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.

Оглавление раздела

Пример навигации по таблице с посылкой событий

Пример навигации по массиву с поиском

Пример навигации по дереву на массиве

Пример навигации по смешанному дереву