Пример вывода таблицы базы данных в компоненте DBGrid
Условие задачи
Дана база данных «05_01_00_005_db.mdb«, сформированная в системе Microsoft Access.
База данных содержит три таблицы Student, Subject и Session.
Структура таблиц следующая.
Таблица Student.
Таблица Subject (Дисциплина).
Таблица Session (Сессия).
Таблицы связаны между собой по такой схеме (рис. 1):
Рис. 1. Схема связей между таблицами
Создать приложение, в котором выводится содержимое таблиц в таком виде.
Для вывода использовать компонент типа TDBGrid.
Данные полей взять из таблиц как показано ниже.
Выполнение
1. Запуск Borland C++ Builder
Создать проект типа «VCL Form Application». Сохранить проект.
2. Размещение компонент на форме
Из палитры компонентов Tool Palette выносим на форму такие компоненты:
- компонент типа TLabel для вывода информационного сообщения (рис. 2);
- из вкладки «Data Access» компонент типа TDataSource (рис. 3);
- из вкладки «DBGo» компоненты типа TADOConnection (рис. 4);
- из вкладки «DBGo» компонент типа TADOQuery (рис. 5);
- из вкладки «Data Controls» компонент типа TDBGrid для визуализации таблицы (рис. 6).
Также, для вывода данных из базы данных, возможно использование компонент TADOTable из вкладыша DBGo.
В данном случае компонент типа TADOQuery используется вместо TADOTable, поскольку данные в DBGrid формируются из трех таблиц. Использование компонента TADOTable есть целесообразным в том случае, если нужно вывести только одну таблицу из базы данных.
В компоненте TADOQuery будет задан SQL-запрос, который сформирует одну таблицу из трех в соответствии с условием задачи.
Рис. 2. Размещение компонента типа TLabel на палитре инструментов
Рис. 3. Размещение компонента типа TDataSource на форме
Рис. 4. Компонент TADOConnection
Рис. 5. Компонент TADOQuery из вкладыша dbGo
Рис. 6. Компонент TDBGrid из вкладыша dbGo
В результате вынесения вышеупомянутых компонент на форму, в C++ Builder будет сформированы объекты-переменные с такими именами: Label1, DataSource1, ADOQuery1, ADOConnection1, DBGrid1.
3. Схема взаимодействия между компонентами
В нашем случае, схема взаимодействия между компонентами имеет вид, как показан на рис. 7.
Рис. 7. Схема взаимодействия между компонентами и базой данных
Первым этапом есть установление связи между приложением и базой данных. Этот процесс подробно описывается здесь.
Процесс связывания приложения с базой данных происходит в по принципу мастера.
В результате формируется свойство ConnectionString компонента ADOConnection1. Это свойство указывает на размещение файла базы данных «05_01_00_005_db.mdb«.
После формирования свойства ConnectionString важно установить свойство LoginPrompt компонента ADOConnection1 в значение false. Это нужно для доступа к записям базы данных без ввода пароля.
Чтобы связать другие компоненты между собою, выполняем такие действия:
- в компоненте ADOQuery1 свойство Connection = ADOConnection1;
- в компоненте DataSource1 свойство DataSet = ADOQuery1;
- в компоненте DBGrid1 свойство DataSource = DataSource1.
4. Свойство SQL компонента ADOQuery1
Следующим шагом есть настройка свойства «SQL» компонента ADOQuery1. В этом свойстве нужно задать строку SQL-запроса, который будет формироваться для вывода данных из базы данных.
В соответствии с условием задачи, может быть сформирована таблица, которая включает в себя поля из трех таблиц базы данных.
Сформируем SQL-запрос таким образом, чтобы выбирались все данные из всех таблиц. А потом в компоненте DBGrid1 оставим только нужные поля.
Вызовем свойство «SQL» компонента ADOQuery1. Для этого делаем клик на кнопке «…» (рис. 8).
Рис. 8. Свойство SQL компонента ADOQuery1
В результате открывается окно редактора, в котором нужно набрать текст SQL-запроса. Вводим такой текст:
SELECT * FROM [Session], [Student], [Subject]
Таким образом, отображаем все поля с трех таблиц.
Рис. 9. Редактор для создания SQL-запроса
Нажимаем на кнопке «ОК«.
5. Формирование полей в редакторе полей компонента ADOQuery1.
После нажатия на «OK» вызовем окно редактора полей компонента ADOQuery1. Делаем клик правой кнопкой мыши на ADOQuery1 и в контекстном меню вызовем команду «Fields Editor…«.
Рис. 10. Вызов редактора полей «Fields Editor…» компонента ADOQuery1
В результате откроется окно редактора полей Form1->ADOQuery1 (рис. 11).
Рис. 11. Редактор полей компонента ADOQuery1
Делаем правый клик мышкой и в контекстном меню выбираем команду «Add All Fields» (рис. 12). Это означает, что добавляем к обработке все поля, которые получаются в результате SQL-запроса.
Рис. 12. Команда «Add All Fields«
После выбора команды окно редактора полей примет вид как изображено на рисунке 13.
Рис. 13. Редактор полей с выбранными всеми полями трех таблиц
Формируем окно редактора полей таким образом, чтобы оно имело вид как показано на рисунке 14. Чтобы удалить поле из списка, нужно из контекстного меню (правый клик мышкой) выбрать команду Delete.
Рис. 14. Поля, которые нужны в соответствии с условием задачи
Каждому полю в редакторе полей системой создается соответствующий объект, который можно редактировать в Object Inspector.
После этого можно закрыть редактор полей.
6. Активация ADOQuery1
Устанавливаем свойство Active=true в компоненте ADOQuery1. После этого в компоненте DBGrid1 отобразятся все шесть полей с ADOQuery1 (рис. 15).
Рис. 15. Свойство Active компонента ADOQuery1
7. Формирование DBGrid1
В компоненте DBGrid1 отображаются поля из ADOQuery1.
Теперь можно редактировать размеры формы и компонента DBGrid1.
Чтобы лучшее отобразить компоненты в DBGrid1, вызовем редактор полей DBGrid1. Для этого сделаем правый клик мышкой на DBGrid1 и в контекстном меню (рис. 16) выбираем «Columns Editor…«.
Рис. 16. Вызов редактора «Columns Editor…» компонента DBGrid1
В результате откроется окно «Editing DBGrid1 -> Columns«. Работа с редактором «Columns Editor» похожа с работой в редакторе полей компонента ADOQuery1.
Добавляем все поля с помощью команды «Add All Fields» (рис. 17).
Рис. 17. Команда «Add All Fields«
Окно редактора примет вид как показано на рисунке 18.
Рис. 18. Поля, которые могут обрабатываться в DBGrid1
Теперь есть возможность выделять соответствующее поле (например, Session.Year) и обрабатывать его внешний вид.
Также с помощью мышки можно изменять порядок следования полей одного за одним. Простым перетягиванием упорядочим поля так как показано на рисунке 19. Такой порядок следования полей отвечает порядку следования в таблице из условия задачи.
Рис. 19. Приведение в порядок полей в соответствии с условием задачи
Если выделить поле Session.Year, то в Object Inspector можно увидеть, что ему отвечает объект-переменная с именем DBGrid1.Columns[0]. Аналогично полю Semester отвечает объект-переменная с именем DBGrid1.Columns[1]. Так же со смещением номеров колонок создаются объекты для других полей.
Используя эти объекты-переменные можно редактировать внешний вид колонок (полей), которые отображаются в DBGrid1.
Так, например, можно установить центрирование заголовков полей, текст заголовков полей, выравнивание основных данных в полях и прочее.
На рис. 20 видно как изменяется центрирование заголовка компонента DBGrid1.
Рис. 20. Центрирование заголовка
После корректировки формы и всех полей DBGrid1, форма приложения будет иметь приблизительно такой вид (рис. 21).
Рис. 21. Форма приложения после редактирования DBGrid1 и корректировки формы
Теперь можно запустить приложение на выполнение.