Технологии подключения к базам данных и работа с ними
Автор: MRsmit • Июнь 2, 2022 • Лабораторная работа • 2,340 Слов (10 Страниц) • 180 Просмотры
ЛАБОРАТОРНАЯ РАБОТА №9
Технологии подключения к базам данных и работа с ними
Цель лабораторной работы:
- Изучить компоненты для работы базами данных;
- Изучить методы для работы компонентов подключения к базам данных;
- Изучить запросы к базам данных.
9.1. Компонент TDBGrid для отображения графической информации
Для визуализации набора данных используется компонент TDBGrid (рис. 9.1). Класс TDBCustomGrid и класс TCustomGrid – это родительские классы компонента TDBGrid. Компонент делиться на столбцы (поля ввода данных) и строки (записи). Рассмотрим основные свойства данного компонента (табл. 9.1).
Таблица 9.1 Свойства компонента TDBGrid
Свойства | Описание |
Name | Имя экземпляра класса |
DataSource | В этом свойстве указывают имя компонента TDataSource для связи БД с компонентом TDBGrid |
Columns | Хранит в себе коллекцию состоящих из столбцов таблицы. Позволяет для каждого столбца применить индивидуальные свойства, например цвет |
Options | Определяет параметры отображения таблицы:
|
ReadOnly | Задает параметр разрешающий или запрещающий пользователю редактировать данные в таблице |
TitleFont | Задает шрифт, выводимых заголовков столбцов таблицы |
FixedColor | Задает цвет неподвижных ячеек таблицы |
Рисунок 9.8. Внешний вид проекта во вкадке TabSheet1
- Сделайте активным вкладку TabSheet2 компонента PageControl1. Как видно, она пустая. В итоге её внешний вид будет как на рисунке 9.9.
- Расположите Panel6 на компоненте PageControl1 во вкладке TabSheet2. Расположение Panel6 должно быть клиентским по отношение к PageControl1, по высоте занимает половину высоты PageControl1. В свойстве Padding компонента Panel6 задайте 5 пикселей для всех сторон.
- Расположите DBGrid2 на компоненте Panel6. Расположение DBGrid2 быть клиентским по отношению к Panel6. Задайте отступ в 3 пикселя по верхнему, левому и правому краям. Найдите свойство DataSource и выберите значение DataSource2. На DBGrid2 должны появиться поля и строки таблицы Sattelites.
- Ниже, под Panel6 расположите компонент RadioGroup2 с точно такими же свойствами, что были определены для RadioGroup1.
- Правее от RadioGroup2 разместите компонент Panel7. Свойству Caption назначьте значение Поиск. На нём же разместите компоненты: 1) Label7 со свойством Caption Наберите поиск, 2) Edit6 без текста и 3) Button4 со свойством Caption Поиск.
- Правее от Panel7, добавьте компонент Panel8 со следующими компонентами:
- Label8 со свойством Caption Название;
- Label9 со свойством Caption Планета;
- Label10 со свойством Caption Диаметр;
- Label11 со свойством Caption Масса;
- Edit7 без текста;
- DBLookupComboBox1;
- Edit8 без текста;
- Edit9 без текста;
- Button5 со свойством Caption Выполнить.
[pic 1]
Рисунок 9.9. Внешний вид проекта во вкадке TabSheet1
- На рис. 9.9 на DBGrid2 представлены столбцы ID_спутник, Планета, FK_planets, Диаметр, Масса. Однако в проекте вы увидите несоответствие, которое касается того, что столбец Планета отсутствует. Если взглянуть на рисунок 9.10, то можно увидеть связь один ко многим между двумя таблицами - Planets и Sattelites. Понятно, что планета может иметь ни одного спутника, либо множество. Связь проходит по первичному ключу атрибута - ID_planets таблицы Planets к атрибуту FK_planets таблицы Sattelites. Т.е., когда мы работаем с таблицей Sattelites, в атрибуте FK_planets мы видим, к какой планете относится данный спутник. Однако это значение цифровое, относящееся к первичному ключу. Чтобы вместо цифрового значения отображалось текстовое, т.е. название планеты, необходимо поработать с подставляемыми полями.
[pic 2]
Рисунок 9.10. Схема данных таблиц
- Для этого в окне Structure (Структура проекта), раскройте ветки до Sattelites {ADOTable1} как указано на рис.9.11, и на ветке Fields нажмите на ПКМ. Появится меню, в котом выберите Add fields...[pic 3]
[pic 4]
Рисунок 9.11 Структура проекта
- Появится окно добавления полей таблицы. Выделите все поля и нажмите ОК. Затем повторите это действие для этой же ветки, но только выберите New field....
- Появится окно добавление нового поля, в данном случае, подставляемого (Lookup) (рис. 9.12). Для этого в поле Field нажмите на переключатель Lookup. В поле Field properties в ячейке Name напишите имя Планета. В ячейке Component автомотически появится имя компонента - ADOTable2Планета. Переименуйте в ADOTable2tab. В ячейке Type выберите String, т.к. необходимо выводить в подставляемое поле строковую переменную, содержащую название планеты. Размер (Size) укажите 30.
- В поле Lookup defenition в Key Fields, в качечестве поля, которое будет ссылаться на первичный ключ, укажите FK_planets таблицы Sattelites. В Dataset укажите ADOTable1, т.е. тот компонент, который работает с таблицей Planets. В Lookup Keys укажите, собственно, поле с первичным ключом таблицы Planets, на который ссылается поле FK_planets таблицы Sattelites. А в качестве результирующего поля Result field укажите поле Планета. Это позволит увидеть не цифровое значение планеты таблицы Planets, выводимое через компонент ADOTable2 на компонент DBGrid2, а стоящее за ним название планеты.
- Нажмите кнопку OK. После этого DBGrid2 ничего не отобразит, т.к. свойство Active компонента ADOTable2 примет значение false. Вновь задайте значение true.
[pic 5]
Рисунок 9.12 Структура проекта
- Новое поле Планета будет отображатся последним в окне структуры проекта. Для нашего проекта его необходимо переместить в третью позицию сверху (во вторую, если считать с нуля). Для этого достаточно в структуре проекта нажать на {ADOTable2tab} левой клавишей мыши и не отпуская перетащить к позиции 2 (рис. 9.13).
[pic 6]
Рисунок 9.13 Структура проекта с добавленным новым полем
- Также рассмотрим подробнее компонент DBLookupComboBox1. С помощью данного компонента в нашем проекте можно выводить набор данных одной таблицы, основанных на значениях другой. В нашем случае, ставя указатель на любую строку в таблице Sattelites, мы получаем данные с таблице Planets, а именно название планеты. Для того, чтобы вывести названия всех значений, имеющихся по полю Планета таблицы Planets, для того чтобы использовать их в таблице Sattelites, например для добавления записей в последнюю таблицу, но так, чтобы в качестве передаваемого значения использовалось не название планеты, а значение поля с первичным ключом, содержащимся в таблице Planets. Когда в DBLookupComboBox1 выберается название планеты, то свойство KeyValue данного компонента как раз и принимает значение поля с первичным ключом (свойство KeyField) в строке которой находится планета.
- В свойствах ListSource, ListField и KeyField компонента DBLookupComboBox1 пропишите следующие значения:
- ListSource: DataSource1;
- ListField: Планета;
- KeyField: ID_planets.
- Код проекта приведён ниже:
Код Unit1.h
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
...