Перечень статей   Цветовые обозначения   Choose language


Таблица из базы данных

Одиночная таблица

Существует типичная операция просмотра таблицы базы данных: меньшее количество записей демонстрируется в браузере, большее количество записей все еще не запрошено с базы данных. Введем html-элемент dialogue, демонстрирующий записи таблицы базы данных с полосой прокрутки по правому боку (чтобы таблица базы данных демонстрировалась именно в таком виде, а не в виде дерева или куба, свойство type должно быть равно record). В атрибуте roll укажем название таблицы базы данных

<dialogue roll="A"/>

dialogue {
  type: record;
}
или SQL-запрос
<dialogue roll="select * from A where a15=100"/>

dialogue {
  type: record;
}
а в свойствах

Связь с базой данных будет происходить по отдельному TCP-порту по протоколу SQL5. Когда браузер встречает этот html-элемент в процессе загрузки документа, он: Примечание: поле представления (view) A ссылается на ту же самую колонку некой таблицы C, на которую ссылается поля таблицы B, вошедшее в представление.

Отображаемые значения демонстрируются так:


Если пользователь нажмет "стрелку-вниз" на последней полученной записи, то браузер запросит cледующую порцию запросом
select * from A downward a1="v50_1" a2="v50_2" a3="v50_3" limit 50;
Если пользователь нажмет "стрелку-вверх" на первой вновь полученной записи, то браузер запросит предыдущую порцию (которая могла быть уже изменена в базе данных)
select * from A upward a1="v100_1" a2="v100_2" a3="v100_3" limit 50;
Если пользователь пытается ввести значение в ссылающееся (на какую-то главную таблицу) поле, то появляется новое отдельное окно браузера с содержимым главной таблицы (пользователь должен выбрать запись главной таблицы). Если пользователь добавит новую запись и заполнит все ее обязательные ячейки (которые известны из схемы базы данных), а затем подождет время, равное двойному щелчку мыши, то браузер немедленно сохранит добавленную строку. Если пользователь изменит запись, а затем подождет время, равное двойному щелчку мыши, то браузер немедленно сохранит новый варианты записи. Если пользователь удалит запись (кнопкой "Dell" в меню браузера), то браузер удалит ее в СУБД.

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

Отображение столбцов

CSS может сделать некоторые колонки неотображаемыми

dialogue §a2 {
  display: none;
}
Колонки таблицы отображаются в соответствии с CSS, определенным для них. Свойства колонок могут быть равны не только константам (как это в CSS сейчас), но и значениям других колонок (в качестве значения свойства нужно указать имя xml-аттрибута, предварив его знаком "§").
dialogue §a3 {
  color:   §a4;
  font:    §a5;
}

Для каждого столбца свойство header указывает заголовок столбца (по умолчанию заголовок равен названию поля в базе данных).

dialogue §a3 {
  header:  "column header"
}

Нижеследующее значение свойства path означает, что "C" есть главная таблица для таблицы "B", "B" есть главная таблица для поля "§a2", и что браузер визуализирует в отдельном окне сначала содержимое таблицы "C" чтобы выбрать под-набор таблицы "B" (т.е. записи таблицы "B", которые ссылаются на выбранную запись таблицы "C").

dialogue §a2 {
  path:  B C;
}

Дублирование полей в элементах интерфейса

Поля текущей записи (на которой стоит курсор пользователя) могут быть задублированы в input - input должны иметь то же самое значение атрибута roll, что и dialogue, а в атрибуте value должны содержать имена xml-аттрибутов (при этом их атрибут type игнорируется, т.к. определяется схемой базы данных). Изменения, внесенные в текущую запись, отображаются и в input; изменения, внесенные в эти input, отображаются и в текущей записи.

<dialogue roll="A"/>
<input    roll="A" value="a1">
<input    roll="A" value="a2">
<input    roll="A" value="a3">

Отношение "главная-подчиненная" между таблицами в одном документе

Если главная и подчиненная таблицы отображаются в двух dialogue одного html-документа, то в подчиненной демонстрируются только записи, ссылающиеся на текущую запись главной таблицы.

<dialogue roll="M"/>
<dialogue roll="S"/>
Если главная и несколько подчиненных таблиц отображаются каждая в отдельном dialogue одного и того же html-документа, то в подчиненной демонстрируются только записи, ссылающиеся на текущие записи главных таблиц.
<dialogue roll="M1"/>
<dialogue roll="M2"/>
<dialogue roll="M3"/>
<dialogue roll="S"/>

Если подчиненная таблица несколькими своими полями ссылается на главную таблицу, то аттрибут influence главной dialogue указывает значение атрибута id подчиненной dialogue, а аттрибут to главной dialogue указывает название колонки подчиненной таблицы базы данных.

<dialogue roll="M" to="s3"/>
<dialogue roll="M" to="s5"/>
<dialogue roll="M" to="s7"/>
<dialogue roll="S"/>
<dialogue roll="M" influence="id1" to="s3"/>
<dialogue roll="S" id="id1"/>
<dialogue roll="S" id="id2/>
Кроме того, в главной таблице можно указать дополнительные виртуальные колонки, свойство cultivate которых будет содержать имя подчиненной таблицы, а свойство to - ссылающееся поле подчиненной таблицы. Если пользователь щелкнет на ячейке такой виртуальной колонки, появляется новое отдельное окно браузера с теми записями подчиненной таблицы, которые ссылаются на запись главной (чтобы увидеть все записи подчиненной таблицы, нужно нажать кнопку "All" в меню браузера).
dialogue §m20::after               { cultivate:S;   to:s5 }
dialogue §m20::after::after        { cultivate:SS;  to:ss8 }
dialogue §m20::after::after::after { cultivate:SSS; to:sss7 }
Свойство to необязательно, если только одно поле в подчиненной таблице ссылается на главную таблицу.
dialogue §m20::after {
  cultivate: S;
}

P.S.

dialogue с любым значением свойства type (равным record, tree, или cube) может быть главным html-элементом для dialogue также с любым значением свойства type. Сам html-документ, запросы от всех dialogue, содержащихся в нем, ответы на запросы идут последовательно по одному и тому же TCP-соединению (ответы разделены друг от друга и от html-документа баментом <?new/?>, ответы приходят после окончания получения html-документа).



Тюрин Дмитрий



Перечень статей   Цветовые обозначения   Choose language