В рассмотренном примере связь между таблицами устанавливается при выполнении приложения. Обычно таблицы связывают на этапе разработки через Инспектор объектов. При этом для установки свойства MasterFields можно использовать редактор полей связи (Field link Designer). В списке Detail Fields выбирается поле подчиненной таблицы, а в списке Master Fields – поле главной таблицы (рис. 10).
Рис. 10. Редактор полей связи
После нажатия кнопки Add выбранные поля связываются, что отображается в списке Joined Fields. Заполнение свойства MasterFields происходит после закрытия окна при нажатии кнопки OK.
В Delphi для работы с наборами данных таблиц применяются компоненты Table, Query, Decision Query и StoredProc.
Компонент Table представляет набор данных, который в некоторый момент времени может быть связан с одной таблицей БД. Расположение БД, с таблицами которой выполняются операции, указывает свойство DataBaseName типа String (рис. 11). Значением свойства является имя каталога, в котором расположены БД, или псевдоним, ссылающийся на этот каталог.
Рис. 11. Свойства компонента Tableв инспекторе объектов
Связь между таблицей и компонентом Table устанавливается через его свойство TableName типа TFileName, которое определяет имя таблицы (и имя файла, содержащего данные). По умолчанию в набор данных Table попадают все записи связанной с ним таблицы. Для отбора данных можно использовать фильтрацию.
Для того чтобы запретить пользователю изменять записи, можно использовать свойство ReadOnly типа Boolean. По умолчанию это свойство имеет значение False. Это означает, что пользователь может редактировать записи.
Установить текущий индекс можно с помощью свойства IndexNameтипа String. Текущий индекс выбирается из списка индексов, которые были заданы при создании таблицы. На этапе разработки приложения все возможные значения свойств IndexNameсодержат раскрывающиеся списки, доступные в Инспекторе объектов.
Наборы данных могут находиться в открытом или закрытом состоянии, на что указывает свойство Active типа Boolean. Если свойству Active установлено значение True, то набор данных открыт. Если значение свойства Active равно False (по умолчанию), то набор данных закрыт и его связь с БД разорвана.
Для вывода содержимого набора данных в табличном виде удобно использовать сетку, представленную компонентом DBGrid. Внешний вид сетки соответствует внутренней структуре таблицы БД и набора данных, при этом строке сетки соответствует запись, а столбцу – поле.
Компонент DataSource – источник данных. Используется как промежуточное звено между набором данных и визуальными компонентами, с помощью которых пользователь управляет этим набором данных. Для указания набора данных, с которым связан источник данных, используется свойство DataSet типа TDataSet последнего. Визуальные компоненты связаны с источником данных через свои свойства DataSource при проектировании в Инспекторе объектов.
Вариант 1
1. Спроектировать базу данных в первой, второй и третьей нормальных формах для ежедневного учета работы водителей в трамвайном депо. Учет ведется на основании документа – путевой лист. В путевом листе содержится следующая информация: дата, маршрут, график, смена, табельный номер водителя, фамилия, время начала работы, время окончания работы, номер вагона, простои на линии. Простои содержат следующую информацию: код простоя, начало простоя, окончание простоя. За водителем закреплен номер вагона и номер маршрута. Водитель может работать и на другом вагоне, и на другом маршруте. График содержит: идеальное (по графику) время начала работы, время окончания работы, номер маршрута, номер смены.
2. Создать запросы, в которых необходимо:
· вывести коды простоев за последний месяц, которые произошли в первую смену;
· вывести список водителей, работающих на “своем” и на “другом” маршруте;
· вывести табельные номера водителей, работающих по две смены в день.
3. С помощью запроса создать таблицу “Опасные маршруты”, содержащую список маршрутов, у которых за последний месяц были простои по вине дорожно-транспортных происшествий.
4. В путевом листе измените поле “Дата”, проставив текущую дату для маршрута № 2.
5. Определить, сколько простоев было по кодам простоя за последний месяц на каждом маршруте.
6. Вывести информацию о всех графиках для любого маршрута, заданного пользователем в режиме диалога.
7. Создать формы для ввода справочной информации (о водителе, маршруте, вагонах, простоях, графиках для каждого маршрута), а также текущей информации для путевого листа.
8. Создать многотабличную форму с помощью Мастера форм. Главная форма – путевой лист, подчиненная – информация о простоях.
9. С помощью Мастера отчетов создать отчет на основе таблицы “Путевой лист”, сгруппировав данные по табельному номеру водителя. Вывести дату, номер маршрута, номер графика, номер смены, номер вагона, реальное время начала и окончания работы. Отсортировать данные по дате.
Вариант 2
1. Спроектировать базу данных в первой, второй и третьей нормальных формах для организации компьютерного учета перемещения узлов трамвая в ходе ремонтов. В накладной необходимо учитывать следующую информацию: номер трамвая, номер узла, дату установки узла на трамвай, дату снятия узла с трамвая, причину снятия узла, фамилию слесаря, получившего задание. Для слесаря определенной квалификации оформляются отдельно две накладные (для снятия или установки узлов вагона).
2. Создать запросы, в которых необходимо:
· вывести номера вагонов, в которых за последний месяц устанавливали один тип узла, например колесную пару;
· вывести номера узлов, которые были установлены и сняты в течение последнего квартала.
3. С помощью запроса создать таблицу ”Часто заменяемые узлы”, в которой вывести список названий узлов, снятых с вагона по причине, например, перегорания предохранителей в течение последнего квартала.
4. Обновить информацию о слесаре, который снимал детали по причине перегорания предохранителей, например: 01.01.2006.
5. Определить, сколько было замен узлов за определенный период на каждом вагоне.
6. Вывести информацию о всех вагонах, в которых произошли замены любого узла, заданного пользователем в режиме диалога.
7. Создать формы для ввода справочной информации (о вагоне, узле, слесаре, причинах замены узлов), а также текущей информации по накладной для установки узла на вагон и накладной для снятия узла с вагона.
8. Создать многотабличную форму с помощью Мастера форм. Главная форма – накладная для установки узла на вагон. Подчиненная – накладная для снятия узла с вагона.
9. С помощью Мастера отчетов создать отчет на основе таблицы “Накладная для установки узла на вагон”, сгруппировав данные по номеру вагона. Вывести номер узла, дату установки узла. Отсортировать данные по номеру узла.
Вариант 3
1. Спроектировать базу данных в первой, второй и третьей нормальных формах для учета расхода электроэнергии в трамвайном управлении. На предприятии имеется три подстанции. На каждой подстанции стоит по три электросчетчика. Каждый счетчик фиксирует показания соответствующего участка. Ежемесячно работник предприятия должен отчитаться в показаниях счетчика и рассчитать расход электроэнергии в денежном выражении. С 23.00 до 6.00 действует ночной тариф, также существуют выходной (суббота, воскресенье) и праздничный тарифы. Показания всех счетчиков фиксируются при смене тарифа.
2. Создать запросы, в которых необходимо:
· вывести количество электроэнергии, которое потребила подстанция “Южная” в ночное время за последний месяц;
· вывести дату, когда показания счетчика не менялись, например в случае аварии на подстанции.
3. С помощью запроса создать таблицу “Наиболее потребляемые участки”, в которой будет список участков, где потребление электроэнергии за последний месяц в дневное время суток составило более 1000 кВт.
4. Увеличить цену тарифа на 20 % для дневного тарифа.
5. Определить количество потраченной электроэнергии на каждом участке за последний месяц. Сгруппировать по тарифам.
6. Вывести информацию о тарифах (название, время действия, цена), заданных пользователем в режиме диалога.
7. Создать формы для ввода справочной информации (о подстанции, счетчиках, тарифах), а также текущей информации для учета электроэнергии.
8. Создать многотабличную форму с помощью Мастера форм. Главная форма – учетная карточка электроэнергии, подчиненная – информация о тарифах.
9. С помощью Мастера отчетов создать отчет на основе таблицы “Учетная карточка”, сгруппировав данные по номеру счетчика, тарифу. Вывести дату, время, показания счетчика. Вычислить количество электроэнергии, потребляемой по каждому тарифу.
Вариант 4
1. Спроектировать базу данных в первой, второй и третьей нормальных формах для учета перемещения комплектующих деталей компьютеров на предприятии: инвентарный номер компьютера, название и номер комплектующей детали, дата установки, рабочее место. Предприятие имеет несколько отделов, в каждом отделе несколько рабочих мест. Должности работников в разных отделах могут быть одинаковыми.
2. Создать запросы, в которых необходимо:
· вывести инвентарный номер и наименование ПК, на которые за последний месяц установили один тип комплектующих деталей, например CDROM;
· вывести список работников, на ПК которых устанавливались комплектующие детали в последний месяц.
3. С помощью запроса создать таблицу ‘‘Комплектующие детали для директора’’, в которой был список комплектующих деталей, установленных на ПК директора за последний месяц.
4. Для комплектующих деталей типа CDROM обновить наименование ’’Устройство для чтения компакт-дисков’’.
5. Определить, сколько рабочих мест в каждом отделе было модернизировано (установлены комплектующие детали) за последний год.