Чтобы посмотреть этот PDF файл с форматированием и разметкой, скачайте его и откройте на своем компьютере.
Инструкция №
5
:
«
Создание соединения с БД и вывода данных в приложении
»
Часть 1. Введение.
Научившись использовать свойства и методы компонентов (объектов) как в коде͕ так и при
первичной настройке͕ перейдем к разработке СУБД.
Вспомним͕ что каждая новая
форма порождает соз
дание нового модуля (
Unit
). Так же моно
создать модуль͕ который не будет привязан к форме. Делается это через меню
File
-
New
-
Unit
.
И еще один важный момент͗ до настоящего момента мы работали с визуальными компонентами
на визуальны
х формах. Сегодня мы будем работать с не визуальными компонентами. Размещение таких
компонентов на обычной форме не приводит ни к чему͕ ибо они не видны в запущенном приложении.
Но если таких компонентов много͕ то они начинают откровенно захламлять
ваше рабочее
пространство и появляется необходимость их куда
-
нибудь спрятать. На такую форму͕ которая сама будет
не видна. И такая форма называется
Data
Module
.
Создается она все из того же меню
File
-
New
-
Data
Module
.
Это такая же форма͕ как и
Form
,
то
лько при запуске она не видима.
И͕ естественно͕ если вы захотите обратиться к компонентам на
Data
Module
из других форм͕
необходимо сообщить этим формам о том͕ что этот
Data
Module
и его
Unit
существуют.
Как их связать?
1) Сначала нужно сохранит ваш
проект͕ включая модули главной формы и модуля данных. Не
забываем про имена файлов.
2) Далее заходим в
Unit
главной формы и пишем в разделе
Implementation
ключевое слово
uses
и
указываем имя файла модуля
Data
Module
͕ которое дали ему при сохранении͕ ибо ко
мпилятор будет
искать этот файл на жестком диске.
// Совет͗ измените свойство
Name
у
Data
Module
на что
-
нибудь более короткое͕ типа «
DM
»͕ так
как будем часто обращаться к содержимому этой формы.
MainU
(
MainUnit
)
–
название модуля главной формы͕ данно
е при сохранении.
DMU (DataModuleUnit)
–
название
модуля
Data Module
.
Кстати͕ взгляните на скриншот выше. Найдите описание типа нашей формы͗
Сразу можно
определить͕ какие компоненты (и их классы) находятся на форме. Также сюда будут
добавляться объявления наших обработчиков событий (
onClick
,
onChange
).
Перед тем͕ как начать разрабатывать интерфейс СУБД͕ к
Delphi
необходимо установить
дополните
льные сторонние компоненты͕ которые во много раз расширят возможности системы. Этот пакет
называется
Dev
eloper
Express
VCL
build
53
(53
–
это версия сборки достаточно свежая).
После установки этого пакета и удачного запуска среды
Delphi
͕ у нас появятся но
вые вкладки на
палитре компонентов͗
Компонентов тут огромное множество. Они используются в профессиональной сфере и͕ обычно͕
не распространяются бесплатно.
Но из всего разнообразия мы будем использовать компонент
cxGrid
–
аналог
dbGrid
из вкладки
Data
Controls
.
cxGrid
настолько сильный компонент͕ что в списке его свойств и методо
в можно потеряться!
Но мы с вами обязаны в этом разобраться!
Часть 2.
Интерфейс
.
Цель этой инструкции͗
вывести на экран содержимое какой
-
нибудь таблицы. Научиться управлять
указателем в таблице и извлекать данные средствами
Delphi
.
1) Создаем новый проект. Теперь уже такой͕ который будет дополняться от занятия к занятию
нарастающим методом.
И помимо основ
ной формы создаем также модуль данных͕ у которого сразу же
меняем свойство
Name
с
«
DataModule
1
»
на что
-
нибудь более короткое.
2) На модуле данных размещаем компоненты из вкладки
ADO
:
Вкладка
ADO
:
-
ADOConnection
–
для
соединения приложения с БД͖
-
ADOQuery
–
для отправки запро
сов к БД и получения результата͖
Вкладка
Data
Access
:
-
DataSource
–
для преобразования результата
ADOQuery
в понятный для таблиц вид.
Не забываем про имена компонентов. Что бы было ясно сразу͕ для чего они предназначены.
3) Далее
изучаем свойства и методы этих компонентов͕ позволяющие осуществить
соединение
:
Компонент
ADOConnection
:
-
ConnectionString
–
предложение͕ включающее в себя параметры соединения к БД͕
разделенные точкой с запятой. А для удобства настройки
компонента͕ существует интерфейс. Вызывается
он двойным нажатием по компоненту или кнопке с тремя точками напротив свойств
а͖
-
Connected
–
включение/
отключение соединения͖
-
LoginPrompt
–
быстрый логин к БД. Отключает назойливый запрос пароля при включен
ии
Connected
на
true
.
Компонент
ADO
Query
:
-
SQL
–
главное свойство͕ хранящее запрос к БД͖
-
Connection
–
указатель на
ADOConnection
;
-
Active
–
включение набора
данных. Включен не будет͕ если не написать
SQL
запрос и не
указать
Connection
;
-
Open
–
открытие набора данных. Отправка запроса к БД. Не путать с
обычным
включением (
Active
);
-
ExecSQL
–
открытие набора
данных. Но в отличие от
Open
не возвращает результата.
Используется при модифицирующих запросах
UPDATE
,
INSERT
или
;
-
Close
–
закры
тие набора.
Компонент
DataSource
:
-
DataSet
–
указатель на набор данных
ADOQuery
.
// Если запрос модифицирующий
данные
͕ то он не возвращает результата и͕ следовательно͕ не
требует преобразования этого результата при помощи
DataSource
.
То есть
нет необходимости привязывать
DataSource
к
ADOQuery
͕ если при помощи
ADOQuery
вы отправляете к БД
запросы на
UPDATE
,
INSERT
или
.
4)
Соединяем
ADOConnection
с БД через интерфейс настройки. На первой вкладке выбираем
провайдера. Для баз на основе
MS
Access
2003 используется
JET
4.0
OLE
DB
;
Далее указываем путь к файлу БД. Пользователь͗
Admin
. Пароль пустой. Проверяем соединение͖
Во вкладке «дополнительно» указываем права доступа на
ReadWrite
;
Во вкладке «все» можно указать пароль к БД͕ если он был настроен внутри системы͕ при помощи
параметра
JET
OLEDB
Database
Password
.
В свойстве компонента
ADOQuery
Connection
указываем на компонент соединения.
Далее соединяем
ADOQuery
с
DataSource
.
Отключа
ем проверку пароля и включаем соединение у
ADOConnection
.
И пишем простой
SQL
-
запрос на выборку данных из какой
-
нибудь информативной таблицы͕ типа
список продуктов͕ в соответствующем свойстве
SQL
набора данных. Переставляем
Active
на
true
.
Если
ошибок нет͕
то отправка прошла успешно
и можно просмотреть
результат.
А как этот результат
отобразить?
Переходим на главное окно нашего приложения и перемещаем туда компонент
cxGrid
из вкладки
DevExpress
.
На
компоненте
есть
кнопки
:
-
cxGrid
1;
-
cxGridLevel
1;
-
cxGridTableView
1;
-
Customize
;
Нам нужно настроить отображение информации в таблице. Нажимаем на кнопку
cxGridTableView
1
на самом компоненте и видим͕ что открылся список его свойств. Их много. Самое
главное͕ что нужно сделать сейчас͕ это связать таблицу с источником данных. Ищем свойство
DataSource
в
группе
DataController
и указываем на необходимый источник.
//Что бы убр
ать серую полосу сверху таблицы͕ отключаем параметр в свойствах объекта͗
OptionsView
–
GroupByBox
Настройки и свойства͕ относящиеся к таблице в целом͕ можно увидеть͕ нажав на кнопку
cxGrid
1
.
5)
После того͕ как набор данных
ADOQuery
был активирован через свойство
Active
и проведена
связь таблицы с
Connection
,
нам нужно как
-
то отобразить информацию.
Жмем на кнопку
Customize
и справа замечаем поле͕ в должны быть отображены поля из набора.
Но их нет. Поэтому жмем на
Fields
и по
лучаем полный список полей из таблицы.
При нажатии на любое из них͕ появится соответствующий набор свойств поля. Можно настроить
ширину колонки в таблице͕ ее заголовок и возможность редактирования. Это все делается на клиентском
приложении͕ следовательно͕
не влияет на базу данных.
Удаляем не нужные для клиента поля из списка͕ редактируем заголовки и нажимаем
Close
.
Запустите приложение и убедитесь͕ что все отлично работает.
Заметили͕ что при выборе поля в таблице его можно сразу изменить? Это плохо.
Нельзя доверять
клиентам. Поэтому зайдите в настойки полей через
Customize
и поставьте у каждого поля
Options
-
Editing
в значение «ложь»͕ запретив изменение колонок.
Отображение сделали. Теперь бы вынести компоненты для редактирования содержимого.
6)
Создайте на интерфейсе отдельную панель и разместите на ней
из вкладки
Data
Controls
компоненты͗
-
DBNavigator
–
компонент управления указателем в наборе данных и редактирования
данных͖
-
DBEdit
–
аналог обычного
Edit
͕ только он может привязаться
непосредственно к набору и
отображать значение какой
-
либо выделенной ячейки.
А так же вынесите надписи для отображения названий столбцов.
DBEdit
должно быть столько͕ сколько вы выносите столбцов на отображение информации. При
помощи этого компонента буде
м менять содержимое.
Поэтому
͕ если в вашей таблице имеются поля͕ которые можно редактировать͕ тогда их все же
надо отобразить.
В примере используется таблица продуктов магазина. И интерфейс должен позволить поменять у
них название͕ цену͕ колич
ество единиц товара в коробке и количество товара в остатке на складе.
Не забываем про имена компонентов!
Сейчас наши надписи
label
ничего толкового не отображают. Давайте дадим им нормальные
надписи. Но не вручную͕ а автоматически. Что бы само приложение давало им названия͕ исходя из того͕
как мы назвали заголовки в таблице
cxGrid
.
Следовательно͕ находим нужное событие. Например «пр
и запуске приложения». Такое есть.
Нажимаем на форму и ищем событие «
OnActivate
»͕ которое срабатывает каждый раз͕ когда активируется
экранная форма. А внутри пишем код͕ который присваивает свойствам
Caption
у наших
Label
те значения͕
которые хранятся в заг
оловках таблицы.
Не пугайтесь длинных названий. При вводе назван
ия формы и постановки «точки» вам выпадет
список͕ где выбираем необходимую колонку
cxGrid
и считываем у нее заголовок͕ присваивая нужному
Label
.
Осталось
только
связать
DBEdit
и
DBNavigator
через их свойства
DataSource
к набору данных
(
ADOQuery
)
͕ который использует наша таблица.
После указания набора͕ у компонентов
DBEdit
надо указать столбец
DataField
͕ который будет
отображаться на экране
.
В итоге имеем͗
// Навигатор
может управлять указателем͕ добавлять новые строки͕ сохранять изменения и
удалять их.
// А через компоненты вывода можно редактировать содержимое таблицы.
7) Теперь вынесите на форму не визуальный компонент
MainMenu
из вкладки
Standart
и дважды
кликните п
о нему.
При помощи него можно создавать многоуровневые меню.
Задание для самостоятельной работы͗ Создайте кнопку выхода из приложения.