Работа с многотабличной БД (технология BDE)

 

Задание 1

Создать с помощью Delphi приложение для синхронного вывода и обработки данных из БД, где данные имеют формат.db. Рекомендуется использовать созданную ранее БД Employee2 (см. упражнения ПрактичИС_02_03).

Дополнительные условия

Для просмотра и редактирования данных, содержащихся в таблице будем использовать окна строчного редактора (компоненты типа Edit). Таким образом, в целях упрощения (чтобы избежать преобразования типов данных), тип полей таблицы Name1, которые будут выводиться в форме, должен быть текстовым:

□ «Фамилия», «Имя», «Отчество», «Телефон», «Индекс», «Город», «Адрес», «Дата рождения» — текстовые поля;

□ «Пол» — поле типа Boolean.

Для отображения текстовых полей и поля «Дата рождения» будем использовать компоненты TDBEdit. Логические поля удобнее отображать с помощью флажков — компонентов TDBCheckBox. Кроме того, на форму необходимо поместить элемент TDBNavigator для обеспечения навигации по набору данных, а также несколько обычных элементов TLabel, с помощью которых будем пояснять назначение полей ввода.

Порядок выполнения

1. Создать в Delphi с помощью утилиты Database Desktop базу данных, приведенную к третьей нормальной форме (таблицы Name, Empl, Post) и сохранить ее под именем Employee2 в отдельной папке в том же что и ранее разделе.

Для базы создать Алиас (см. приложение), иначе потом нельзя будет подключить формы и таблицы приложений BDE, ADO.

Имя поля должно иметь префикс по начальной букве названия таблицы (т.е одинаковые поля в разных таблицах будут отличаться префиксом, например, N_Id и E_Id –код физического лица в разных таблицах). Рекомендуемые названия полей приведены в таблице 1.

Таблица 1

Содержание Имя поля (в таблице к имени добавить префикс) Тип

Name

Код физ. Лица N_Id  
Имя N_Name Символьный
Отчество N_Patronymic Символьный
Фамилия N_Surname Символьный
Пол N_Sex Логический
Дата рождения N_Birthday Дата
Почтовый индекс N_Index Числовой
Город N_City Символьный
Улица, дом, кв N_Street Символьный
Телефон N_Phone Символьный

Empl

Код сотрудника E_IdEmpl  
Код должности E_IdPost  
Рейтинг E_Rating Числовой короткий
Дата приема E_AdmissData Дата
Дата увольнения E_DismissData Дата

Post

Код должности P_IdPost  
Должность P_Post Символьный
Разряд P_Sort Числовой короткий
Зарплата P_Salary Денежный

 

Типы полей кода физического лица, кода сотрудника и кода должности выбрать в соответствии с логикой данных.

2. Заполнить базу на 25-30 записей физических лиц, по 6-8 должностей и несколько разрядов. Допускается использовать ранее созданные данные или данные из других БД.

 

3. Создать форму для синхронного вывода данных на основе технологии BDE. Дополнительные сведения по проектированию содержатся в Приложении.

Такая форма, например, может иметь вид, представленный на рис.06.1:

 

Рис.06.1. Форма для работы с синхронным изменением данных.

4. Отладить работу приложения и предъявить преподавателю.

 

 

Выборка данных

Одной из задач, наиболее часто возникающих при работе с базами данных, является выборка данных, то есть извлечение из базы данных информации, отвечающей ряду требований, заданных пользователем.

 

 

Упражнения 10-6-1

Этот учебный файл без изменений сохранять в отдельном файле, а файлы таблиц с выполняемой самостоятельно работой под своим именем сохранять отдельно во вложенной папке с именем Delphi_BD. Оба объекта и все другие рабочие файлы сохранять в папке "Временная_05_06", которую поместить в папку "Мои документы".

На занятия всем слушателям приносить личные дискеты и в конце занятий копировать на них выполняемые задания.

Проработать пример использования компонентов доступа к данным через SQL-запросы.

 

Задание 1

Используя механизм доступа к данным SQL из Delphi, создать табличную форму, и осуществить ее заполнение данными из указанной пользователем таблицы, находящейся в базе данных, созданной ранее с помощью Access.

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

 

Порядок выполнения

Поскольку для доступа к базам данных MS Access удобнее применять технологию ADO, то в рассматриваемом примере будем использовать компонент TADOQuery.

Последовательность действий при осуществлении доступа к данным с использованием SQL-запросов примерно следующая:

1. Для создания нового приложения запустите Delphi и выполните команду File ► New Application.

2. Разместите на форме компоненты TADOQuery (используя вкладку ADO палитры компонентов) и TDataSource. Последний необходим для связи набора данных ADO с компонентами визуализации данных и расположен на вкладке Data Access палитры компонентов.

3. Подключите базу данных.mdb, созданную в Access на предыдущих занятиях. Для этого используйте свойство ConnectionString компонента TADOQuery.

Используйте ту же последовательность действий, что и на предыдущем занятии при подключении базы данных, для компонента TADOTable.

 

ПРИМЕЧАНИЕ-----------------------------------------------------------

В отличие от TADOTable класс TADOQuery не имеет свойств, в которых указывается связанная с ним таблица базы данных. При его использовании информация поступает в набор данных в результате выполнения SQL-запроса, заданного в свойстве SQL.

 

4. Для задания запроса щелкните на кнопке с многоточием в поле ввода свойства SQL в инспекторе объектов компонента ADOQuery1. При этом откроется окно простого текстового редактора, в котором формируется запрос. Сформируйте запрос, как показано на рис. 11.1. Его назначение состоит в возвращении выборки данных, содержащей все поля и все записи таблицы «Товары» базы данных.

5. Щелкните на кнопке Code Editor. Теперь текст запроса будет отображаться в окне редактора кода (рис. 11.2), причем ключевые слова языка SQL будут выделяться полужирным шрифтом, что снижает вероятность ошибок при написании запроса.

Рис. 11.1. Окно редактора SQL-запросов

Рис. 11.2. Текст SQL-запроса в редакторе кода

СОВЕТ-----------------------------------------------------------------—

При использовании компонента доступа к данным TQuery для задания SQL-запроса можно использовать визуальный редактор запросов SQL Builder, который вызывается командой SQL Builder контекстного меню компонента TQuery, помещенного на форму. Однако он плохо работает с базами данных, в которых имена полей заданы кириллицей (выдаются различные малопонятные сообщения об ошибках).

6. Выполните настройку источника данных TDataSource. Она производится так же, как и в случае использования компонента TADOTable — в свойстве DataSet указывается имя объекта доступа к данным (по умолчанию — ADOQuery1).

Далее необходимо разместить на форме необходимые элементы управления и выполнить их настройку.

7. Выберите следующие элементы:

□ компонент Memo, который будет использоваться для отображения и редактирования текста запроса;

□ компонент отображения данных TDBGrid — для отображения результатов выполнения запроса;

□ кнопка TButton — для подачи команды на выполнение запроса (назвать – "Выполнить запрос").

Примерный вариант размещения на форме необходимых компонентов показан на рис.11.3.

8. Для настройки компонента визуализации полей базы данных TDBGrid в его свойстве DataSource укажите имя источника данных (по умолчанию — DataSource1).

9. Следующий этап — реализация процедур открытия и закрытия набора данных. Если в результате выполнения SQL-запроса возвращаются данные, для его выполнения необходимо воспользоваться методом Open класса TADOQuery.

Как и в предыдущем задании, данный метод следует выполнять при запуске приложения, например в обработчике события OnShow главной формы. При этом происходит выполнение запроса, заданного в свойстве SQL, а результаты его выполнения отобразятся в таблице DBGrid1.

10. При закрытии приложения следует, как и в предыдущем упражнении, закрыть и набор данных. Вызовите метод Close в обработчике события OnClose главной формы.

Рис. 11.3. Размещение элементов управления на форме

 

11. Для кнопки "Выполнить запрос" надо написать обработчик события OnClick. (Это понадобится в дальнейшем для возможности изменения текста запроса с последующим выполнением его без перекомпиляции программы). При нажатии на кнопку должен выполняться запрос (в результате выполнения запроса возвращаются данные). При нажатии на кнопку следует выполнить (запрограммировать) следующие действия:

□ проверить состояние набора данных; если набор данных открыт, то следует закрыть его;

□ передать текст запроса из компонента memSQL в свойство SQL компонента ADOQuery1;

□ открыть набор данных, вызвав метод Open компонента ADOQuery1.

Для справки текст (но не буквально, т.к. используются другие имена и есть незначительные ошибки, которые Вы не должны делать, если владеете предыдущим материалом) для модуля разработанной формы приведен в листинге 11.1.

 

12. Сохраните файлы проекта в отдельной вложенной папке и запустите программу на выполнение (напомним, что при этом автоматически откомпилированное приложение будет помещено в эту же папку). После его запуска в компоненте DBGrid1 на форме отобразится информация, содержащаяся в таблице с указанным Вами именем из подключенной базы данных с расширением.mdb. Закройте приложение.

13. Для модификации приложения добавьте кнопку выхода из программы и проверьте работоспособность.

 

 

Вопросы к защите:

1. Каким образом осуществляется связь с нужной базой данных?

2. Каким образом осуществляется обращение к необходимой таблице?

 

Листинг 11.1. Главный модуль приложения

unit SQL_main;

Interface

Uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, Db, AOODB. StdCtrls, ExtCtrls. DBTables;

Type

TfrmMain = class(TForm) ADOQueryl: TADOQuery;

DataSource1: TDataSource;

DBGridl: TDBGrid;

memSQL: TMemo: btnExecSQL: TButton;

procedure FormShow(Sender: TObject);

procedure FormClose(Sender: TObject;

var Action: TCloseAction);

procedure btnExecSQLClick(Sender: TObject);

Private

{ Private declarations }

Public

{ Public declarations }

end;

Var

frmMain: TfrmMain;

implementation {$R *.DFM}

procedure TfrmMain.FormShow(Sender: TObject);

Begin

memSQL.Lines.Clear;

memSQL.Lines,Assign(AOOQueryl.SQL);

end;

procedure TfrmMain.ForraClose(Sender: TObject;

var Action: TCloseAction);

Begin

if ADOQueryl.Active then ADOQueryl.Close;

end;

procedure TfrmMain.btnExecSQLClick(Sender: TObject);

Begin

if ADOQueryl.Active then ADOQueryl.Close;

ADOQueryl.SQL.Clear:

ADOQueryl.SQL.Assign(memSQL.Lines);

ADOQueryl.Open;

end;

End.

 

 

Упражнения 10-6-2

Введение


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: