C++. Пример вывода таблицы базы данных в компоненте DBGrid в C++ Builder




Пример вывода таблицы базы данных в компоненте DBGrid

Условие задачи

Дана база данных «05_01_00_005_db.mdb«, сформированная в системе Microsoft Access.

База данных содержит три таблицы Student, Subject и Session.

Структура таблиц следующая.

Таблица Student.

05_01_00_005_table01r

Таблица Subject (Дисциплина).

05_01_00_005_table02r

Таблица Session (Сессия).

05_01_00_005_table03r

Таблицы связаны между собой по такой схеме (рис. 1):

05_01_00_005_01_

Рис. 1. Схема связей между таблицами

 Создать приложение, в котором выводится содержимое таблиц в таком виде.

05_01_00_005_table04r

Для вывода использовать компонент типа TDBGrid.

 Данные полей взять из таблиц как показано ниже.

05_01_00_005_table05r

 

Выполнение

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-запрос, который сформирует одну таблицу из трех в соответствии с условием задачи.

05_01_00_005_02_

Рис. 2. Размещение компонента типа TLabel на палитре инструментов

05_01_00_005_03_

Рис. 3. Размещение компонента типа TDataSource на форме

05_01_00_005_04_

Рис. 4. Компонент TADOConnection

05_01_00_005_05_

Рис. 5. Компонент TADOQuery из вкладыша dbGo

05_01_00_005_06_

Рис. 6. Компонент TDBGrid из вкладыша dbGo

 В результате вынесения вышеупомянутых компонент на форму, в C++ Builder будет сформированы объекты-переменные с такими именами: Label1, DataSource1, ADOQuery1, ADOConnection1, DBGrid1.

 

3. Схема взаимодействия между компонентами

 В нашем случае, схема взаимодействия между компонентами имеет вид, как показан на рис. 7.

05_01_00_005_07r

Рис. 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).

05_01_00_005_08_

Рис. 8. Свойство SQL компонента ADOQuery1

 В результате открывается окно редактора, в котором нужно набрать текст SQL-запроса. Вводим такой текст:

SELECT * FROM [Session], [Student], [Subject]

Таким образом, отображаем все поля с трех таблиц.

05_01_00_005_09_

Рис. 9. Редактор для создания SQL-запроса

 Нажимаем на кнопке «ОК«.

 

5. Формирование полей в редакторе полей компонента ADOQuery1.

После нажатия на «OK» вызовем окно редактора полей компонента ADOQuery1. Делаем клик правой кнопкой мыши на ADOQuery1 и в контекстном меню вызовем команду «Fields Editor…«.

05_01_00_005_10_

Рис. 10. Вызов редактора полей «Fields Editor…» компонента ADOQuery1

В результате откроется окно редактора полей Form1->ADOQuery1 (рис. 11).

05_01_00_005_11_

Рис. 11. Редактор полей компонента ADOQuery1

Делаем правый клик мышкой и в контекстном меню выбираем команду «Add All Fields» (рис. 12). Это означает, что добавляем к обработке все поля, которые получаются в результате SQL-запроса.

05_01_00_005_12_

Рис. 12. Команда «Add All Fields«

После выбора команды окно редактора полей примет вид как изображено на рисунке 13.

05_01_00_005_13_

Рис. 13. Редактор полей с выбранными всеми полями трех таблиц

Формируем окно редактора полей таким образом, чтобы оно имело вид как показано на рисунке 14. Чтобы удалить поле из списка, нужно из контекстного меню (правый клик мышкой) выбрать команду Delete.

05_01_00_005_14_

Рис. 14. Поля, которые нужны в соответствии с условием задачи

Каждому полю в редакторе полей системой создается соответствующий объект, который можно редактировать в Object Inspector.

 После этого можно закрыть редактор полей.

 

6. Активация ADOQuery1

Устанавливаем свойство Active=true в компоненте ADOQuery1. После этого в компоненте DBGrid1 отобразятся все шесть полей с ADOQuery1 (рис. 15).

05_01_00_005_15_

Рис. 15. Свойство Active компонента ADOQuery1

 

7. Формирование DBGrid1

В компоненте DBGrid1 отображаются поля из ADOQuery1.

Теперь можно редактировать размеры формы и компонента DBGrid1.

Чтобы лучшее отобразить компоненты в DBGrid1, вызовем редактор полей DBGrid1. Для этого сделаем правый клик мышкой на DBGrid1 и в контекстном меню (рис. 16) выбираем «Columns Editor…«.

05_01_00_005_16_

Рис. 16. Вызов редактора «Columns Editor…» компонента DBGrid1

В результате откроется окно «Editing DBGrid1 -> Columns«. Работа с редактором «Columns Editor» похожа с работой в редакторе полей компонента ADOQuery1.

Добавляем все поля с помощью команды «Add All Fields» (рис. 17).

05_01_00_005_17_

Рис. 17. Команда «Add All Fields«

 Окно редактора примет вид как показано на рисунке 18.

05_01_00_005_18_

Рис. 18. Поля, которые могут обрабатываться в DBGrid1

 Теперь есть возможность выделять соответствующее поле (например, Session.Year) и обрабатывать его внешний вид.

 Также с помощью мышки можно изменять порядок следования полей одного за одним. Простым перетягиванием упорядочим поля так как показано на рисунке 19. Такой порядок следования полей отвечает порядку следования в таблице из условия задачи.

05_01_00_005_19_

Рис. 19. Приведение в порядок полей в соответствии с условием задачи

 Если выделить поле Session.Year, то в Object Inspector можно увидеть, что ему отвечает объект-переменная с именем DBGrid1.Columns[0]. Аналогично полю Semester отвечает объект-переменная с именем DBGrid1.Columns[1]. Так же со смещением номеров колонок создаются объекты для других полей.

 Используя эти объекты-переменные можно редактировать внешний вид колонок (полей), которые отображаются в DBGrid1.
Так, например, можно установить центрирование заголовков полей, текст заголовков полей, выравнивание основных данных в полях и прочее.

 На рис. 20 видно как изменяется центрирование заголовка компонента DBGrid1.

05_01_00_005_20r

Рис. 20. Центрирование заголовка

 После корректировки формы и всех полей DBGrid1, форма приложения будет иметь приблизительно такой вид (рис. 21).

05_01_00_005_21r

Рис. 21. Форма приложения после редактирования DBGrid1 и корректировки формы

 Теперь можно запустить приложение на выполнение.