Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Failid.DOC
Скачиваний:
14
Добавлен:
31.03.2015
Размер:
266.24 Кб
Скачать

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

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

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

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

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

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

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

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

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

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

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

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

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

5.5. Внесение изменений в файл

До сих пор мы ограничились просмотром уже существующих файлов. Не менее важным является и внесение изменений в файлы. Обычно различают три вида изменений:

  • добавление новых записей;

  • изменение записей;

  • удаление записей.

Все перечисленные изменения могут быть выполнены через Database Desktop. Для этого надо войти в него, открыть обновляемый файл, перейти в режим редактирования и внести необходимые изменения. Так целесообразно поступить при большом количестве изменений. Не забудьте, что один и тот же файл не может быть одновременно открыт из Delphi и из Database Desktop.

1

2

3

4

5

6

7

8

9

10

Рис. 5.5. DBNavigator

Изменения могут быть внесены и во время работы приложения. Лучше всего это делать с помощью DBNavigator как для таблиц, так и для форм. В приведенных примерах были использованы только четыре его кнопки для передвижения по файлу. Полностью DBNavigator представлен на рис. 5.5.

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

При работе с формами, как было показано раньше, без них не обойтись. Назначение кнопок:

First

– начало файла;

Previous

– на одну запись назад;

Next

– на одну запись вперед;

Last

– конец файла;

Add

– добавление новой записи перед текущей;

Delete

– удаление текущей записи;

Edit

– переход в режим редактирования;

Post

– записывать внесенные изменения в файл;

Cancel

– отменить внесенные изменения;

Refresh

– приводить весь файл в соответствие с определенными изменениями.

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

  • ReadOnly y Table, если этому свойству присвоить значение True, то изменения во время выполнения приложения невозможны;

  • AutoEdit y DataSource, если этому свойству присвоить значение False, то редактирование запрещено, но во время выполнения приложения можно переходить в режим редак­ти­ро­вания;

  • ReadOnly y DBEdit, если этому свойству присвоить значение True, то редактирование во время выполнения этого поля невозможно.

Очевидно, что свойства объектов Table и DataSource относятся ко всем полям. После этих уточнений рассмотрим назначения клавиш. Клавиша 7 переводит таблицу или форму в режим редактирования, после чего можно внести изменения, т.е. по сути свойство AutoEdit y DataSource получит значение True. После этого можно внести изменения в любое поле. Но эти изменения не сразу будут перенесены в файл. Если Вы убедились в правильности изменений, то нажатием клавиши 8 они будут перенесены; клавиша 9 отменяет их. Клавиша 10 вызывает обновление всего файла с учетом внесенных изменений. Например, если в результате внесенных изменений записи должны быть переупорядочены, то после нажатия клавиши 10 они появятся на экране в новой очередности. Назначение клавиши 5 и 6 понятно из названий. Вопрос: что надо делать после набора значений всех полей, чтобы они оказались в файле?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]