ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 17.03.2025

Просмотров: 464

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Обратим внимание на некоторые свойства TTable, которые часто упрощают решение задач.

IndexName – если значение этого свойства не задано, то записи файла показаны в порядке возрастания первичного ключа. Если задать имя вторичного индекса, то записи файла будут показаны по возрастанию этого индекса.

Filter – может содержать условное выражение на полях файла. При наличии фильтра будут показаны лишь удовлетворяющие заданному условию записи.

Filtered – может иметь значения True или False. В зависимости от этого заданный фильтр учитывается или нет.

Кроме упомянутых выше динамических полей можно задавать и статические поля в имеющихся на экране таблицах. Для статических полей можно выбрать более содержательные названия (в том числе и на русском языке) по сравнению с внутренними именами в файле, можно влиять на их внешний вид, можно ввести новые поля, вычисляемые на основе заданных. Недостатком статических полей является то обстоятельство, что при внесении изменений в названия полей в файле они автоматически не будут отражены на экране. Этот недостаток не столь уж и существенный, потому что структуру файлов меняют относительно редко, а если приложение сдано в постоянную эксплуатацию, то пользователи не имеют возможности этого делать. Поэтому использование статических полей желательно для повышения удобства работы с приложением. В одной таблице не может одновременно быть статических и динамических полей. Для создания статических полей надо делать двойной щелчок на иконке объекта Table, откроется пока пустое окно с названием ИМЯ_ФОРМЫ.ИМЯ_ТАБЛИЦЫ статических полей (по умолчанию все поля динамические). При нажатии на этом окне правой клавиши мыши откроется меню для создания и изменения статических полей. Рекомендуем читателю поэкспериментировать и самостоятельно освоить работу со статическими полями.

До сих пор рассматривали создание на экране одной таблицы для представления данных из одного файла базы данных. Переходим к представлению данных из двух связанных файлов в двух таблицах. Если связь между файлами была установлена уже на стадии проектирования базы данных, то для представления этих связанных таблиц на экране необходимо только повторить два раза все описанное выше: создать все объекты два раза и связывать с двумя разными (связанными) файлами. Результат: когда указатель фиксирован на записи ведущего файла, то скроллинг ведомого файла возможен только по записям, связанным с ней. Естественно, что при связи 1:1 скроллинг ведомой таблицы отсутствует полностью.


Связь между двумя файлами может быть создана и во время разработки приложения (при условии, что она не была создана ранее). Рассмотрим это на примере таблиц 1 и 2 из п. 5.2. В разных приложениях могут быть установлены разные связи между файлами и, таким образом, достигается большая гибкость. Обратим внимание на следующие существенные моменты:

  • поля НОМЕР СПЕЦИАЛЬНОСТИ в первом и СПЕЦИАЛЬНОСТЬ во втором файле должны иметь один и тот же тип данных, в нашем случае выбран Short;

  • во втором файле должен быть вторичный индекс по полю СПЕЦИАЛЬНОСТЬ, потому что оно будет участвовать в соединении. В первом файле соответствующее поле ключевое.

Для представления на экране двух связанных файлов необходимо перенести на экран с палитры компонент всё необходимое (Table, DataSource, DBGrid) два раза и связать с файлами, как описано выше в этом параграфе. Для обеспечения связи между таблицами сделаем следующее:

  • Активизируем соответствующий нижней таблице объект Table.

  • Изменим значение свойства Active на False.

  • Выберем из выпадающего списка значение для свойства MasterSource, в данном случае предлагается только одно значение.

  • Активизируем диалоговое окно свойства MasterFields: Field Link Designer. В верхней строке можно выбрать индекс, по которому будет выполняться соединение. По умолчанию предлагается объединить по ключевому полю. Выберем из выпадающего списка имя вторичного индекса, соответствующего полю СПЕЦИАЛЬНОСТЬ (SPEC_IND). Дальнейшие шаги очевидны: надо из двух колонок, соответствующих двум таблицам, выбрать нужные поля и подтвердить свой выбор.

  • Изменим значение свойства Active на True.

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

Рис. 5.2. Связанные таблицы

Показ данных на экране в виде таблицы позволяет представить одновременно несколько записей, но при этом почти нет возможностей выбора внешнего вида (за исключением статических полей). Данные могут быть показаны на экране и в виде формы: на форме одновременно представлена одна запись, но зато имеются широкие возможности добавления пояснительного текста.


5.4.2. Представление данных в виде форм

В таблице можно одновременно представлять несколько записей, каждая из которых занимает одну строку. Это обеспечивает хороший обзор данных, однако сильно ограничивает возможности представления данных в удобном для пользователя виде. Вспомним, что единственным средством улучшения внешнего вида таблицы являются статические поля. Имеется другое стандартное средство представления данных – форма. На форме одновременно имеется одна запись файла, но зато она может быть снабжена подробным пояснительным текстом. Рассмотрим создание формы на базе файла COUNTRY.db, который входит в качестве примера в комплект поставки Delphi. Для создания формы откроем новое приложение (естественно, можно создать новую форму в существующем MDI– или SDI–приложении). На форму перенесем из палитр знакомые нам объекты Table è DataSource. Свойствам упомянутых объектов дадим точно такие же значения, как в предыдущем случае. Для доступа к файлу COUNTRY.db свойству DateВaseName выберем из выпадающего списка значение DBDEMOS. Пояснительный текст на форму можно занести с помощью объектов Label из палитры Standard.

Для представления на форме полей из базы данных используем объект DBEdit из палитры Data Controls. Обращаем внимание на то, что объекты Edit (палитра Standard) DBEdit не взаимозаменяемы, у них разные свойства. Размещаем пояснительный текст и объекты DBEdit на экране в наиболее удобном для будущего пользователя виде. Если форма на экране компьютера должна заменить бланк на бумаге, то целесообразно сохранить привычный для пользователей внешний вид. Свойству DataSource объекта DBEdit дадим традиционное значение. Свойству DataField выбираем из выпадающего списка в качестве значения имя того поля базы данных, которое должно быть представлено. Поля редактирования могут быть предназначены только для чтения (без права изменения данных) или для редактирования.

В отличие от представления данных таблицей, где автоматически вставлены полосы скроллинга для перемещения по файлу, теперь нам предстоит самим позаботиться об этом. Этой цели служит навигатор DBNavigator (палитра Data Controls). DBNavigator – визуальный объект, поэтому для него необходимо выбрать удобное место на экране. Для его связывания с источником данных служит свойство DataSource. По умолчанию он содержит максимально возможный перечень кнопок. Если не все они в данном случае нужны, то их количество может быть уменьшено с помощью свойства VisibleButtons. Слева от имени этого свойства стоит знак + : вспомните, что это означает? Внешний вид полученной формы представлен на рис. 5.3. В DBNavigator оставлено 4 клавиши для передвижения к первой, предыдущей, следующей или последней записи.


На одной форме могут быть представлены и поля разных файлов. Если эти файлы не связаны между собой, то на одном экране находятся две формы, совершенно не связанные между собой, каждая со всеми компонентами, действующими независимо друг от друга. Формами можно представить и связанные файлы. Связь устанавливается такими же способами, как при представлении базы данных таблицами.

Рис. 5.3. Представление данных в виде формы

Если между файлами имеется связь 1:N, то навигатор первой формы позволяет передвигаться по всему файлу, а навигатор второй формы – только по записям, соответствующим текущей записи в первом файле.


5.4.3. Совместное использование таблицы и формы

Одновременно на экране могут быть размещены таблица и форма. Случай, когда они соответствуют двум разным, между собой не связанным файлам, сводится к описанным выше. Поэтому предположим, что между файлами имеется связь 1:N (ведущий – ведомый). Тогда целесообразно представить данные из ведущего файла в виде формы, а данные из ведомого файла – в виде таблицы.

Представим в таком виде данные из табл. 1 и 2 (п. 5.2). Результат показан на рис. 5.4.

Рис. 5.4. Представление данных в виде формы и таблицы

Очевидно, что ведущей в данном случае является таблица 1, потому что по каждой специальности учатся много студентов, а каждый студент учится по одной специальности. Приведенный пример работает следующим образом. Навигатор формы позволяет нам передвигаться по всем записям первого (ведущего) файла; полоса скроллинга таблицы – только по тем записям второго файла, которые соответствуют показанной на форме записи. В нашем случае по студентам одной специальности. При передвижении к следующей записи в файле специальностей автоматически меняется и содержимое таблицы.

Рассмотрим реализацию. Создание файлов мы подробно рассмотрели раньше. Обратим лишь внимание на следующие существенные моменты:

  • поля СПЕЦИАЛЬНОСТЬ в первом и СПЕЦИАЛЬНОСТЬ во втором файле должны иметь один и тот же тип данных, в нашем случае выбран Short;

  • во втором файле должен быть вторичный индекс по полю СПЕЦИАЛЬНОСТЬ, потому что оно будет участвовать в соединении. В первом файле соответствующее поле ключевое.

Реализация приложения не составляет труда. В верхней части создадим форму, в нижней – таблицу. Для улучшения внешнего вида создадим в таблице статические поля. Для обеспечения связи между формой и таблицей сделаем следующее:

  • Активизируем соответствующий таблице объект Table.

  • Выберем из выпадающего списка значение для свойства MasterSource, в данном случае предлагается только одно значение.

  • Активизируем диалоговое окно свойства MasterFields: Field Link Designer. В верхней строке можно выбрать индекс, по которому будет выполняться соединение. По умолчанию предлагают объединить по ключевому полю. Выберем из выпадающего списка имя вторичного индекса, соответствующего полю СПЕЦИАЛЬНОСТЬ (SPEC_IND). Дальнейшие шаги очевидны: надо из двух колонок, соответствующих двум таблицам, выбрать нужные поля и подтвердить свой выбор.