Добавить материал и получить бесплатное свидетельство о публикации в СМИ
Эл. №ФС77-60625 от 20.01.2015
Инфоурок / Информатика / Конспекты / Лабораторная работа №12. Подключение БД в приложение Delphi. ADO технология

Лабораторная работа №12. Подключение БД в приложение Delphi. ADO технология

  • Информатика

Поделитесь материалом с коллегами:

Лабораторная работа№ 12

Подключение БД в приложение Delphi. ADO технология

С.В. Каверин

Цель работы. Ознакомится с компонентами ADOConnection, ADOTable и DataSource для связи БД с Delphi. Существенно, что технология ADO позволяет получить доступ к базам данных СУБД Access.

Постановка задачи. Создать клиентское приложение для работы с БД «Товар». Приложение имеет главную форму (окно), две рабочие формы (окна) и модуля данных. Главное окно содержит меню вызова таблиц БД (рисунок 1). Выбор пункта меню вызывает соответствующее окно для работы с тремя таблицами. Таблицы можно редактировать и добавлять новыми записями.

hello_html_m1c932543.png

Рисунок 1 – Начальное окно главной формы приложения

В модуле данных размещаются компоненты связи приложения с БД.

Порядок выполнения работы:

  1. Создаем главную форму приложения. Размещаем на ней компонент Меню для выбора нужных таблиц.

  2. Связываем БД «Товар» с нашим приложением.

  3. Создаем две подчиненные формы. На первой будут таблицы «Заказы», «Товары» и «Клиенты». На второй – «Сотрудники», «Поставщик» и «Поставка».

Необходимые компоненты

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

ADOConnection – используется для подключения приложения к БД (закладка dbGO или в поздний версиях ADO).

ADOTable (таблица ADO)– связывается с конкретной таблицей БД (закладка dbGO или в поздний версиях ADO);

DataSource (источник данных) – компонент, используется как связка данных из таблиц, с отображающими и управляющими компонентами Delphi (закладка Data Access);

DBGrid – таблица, позволяющая вывести содержимое таблицы БД на пользовательскую форму (закладка Data Controls);

DBNavigator – кнопочная панель, которая обеспечивает перемещение указателя текущей записи таблицы, активизацию режима редактирования, добавление и удаление записей (закладка Data Controls).

1 Создание нового приложения

1.1 Запускаем Delphi. Выбираем File -> New-> VCL Forms Application. Сохраняем модуль Unit1 и проект приложения под именем Tovar.dpr в своей папке. В эту же папку помещаем файл БД Товар.accdb.

1.2 Сделаем нашу форму главной MDI формой (многодокументный интерфейс). Для этого в инспекторе объектов в свойствах Form1 свойство FormStyle установим в fsMDIForm. Форма стала стартовой.

1.3 В свойстве Caption главной формы пишем «Информационная система Товар».

1.4 Добавим на форму компонент TMainMenu из вкладки Standard. Щелкнем дважды мышкой на компоненте MainMenu1 и увидим окно для создания меню.

hello_html_42042f36.png

Рисунок 2 – Настройка компоненты MainMenu1

Выставляем курсор на «прямоугольник» и в появившемся инспекторе свойств пишем Таблицы (рисунок 2), нажимаем Enter. Перемещаем курсор на «прямоугольник» ниже «Таблицы». В появившемся инспекторе свойств пишем «ЗаказыТоварыКлиенты» и нажимаем Enter, а потом – «СотрудникиПоставщикПоставка». Перемещаем курсор на «прямоугольник» правее «Таблицы» и пишем «Справка».

1.4 Компилируем и запускаем программу (F9).

2 Привязка БД «Товар.accdb» к приложению

2.1 Командой File / New / Data Module (в категории Delphi Files) добавьте в проект новый модуль данных. Дайте ему имя dm (для краткости) и сохраните его как DatMod.pas в папку приложения.

2.2 Положите на модуль dm компонент ADOConnection (в закладке dbGo). Компонент ADOConnection1 позволит привязать БД Товар.accdb к приложению.

Настраивается компонент ADOConnection. Дважды щелкните на этом компоненте. В открывшемся окне установите источник связи, выбрав Use Connection String (рисунок 3).

hello_html_1913cf80.png

Рисунок 3 – Окно модуля данных

Нажмите кнопку Build..., перейдите на закладку «Поставщик данных» и выберите Microsoft Office 12.0 Access Database Engine Provider (рисунок 4). Нажмите кнопку Далее.

hello_html_m6c33dabd.png

Рисунок 4 – Окно свойств связи с данными

Перейдите за закладку Соединение, введите в строку Источник данных имя нашей БД, как показано на рисунке 5. Если для доступа к БД необходим пароль и идентификатор пользователя, то их надо указать (по умолчанию к БД, созданной в MS Access, доступ есть у пользователя Admin, но пароль не нужен). После этого нажмите кнопку Проверить подключение, чтобы проверить подключается ли БД Товар.accdb. Если будет дан ответ «Проверка подключения выполнена», то щелкая по кнопке ОК закрыть все окна.

hello_html_ma4d6ee1.png

Рисунок 5 – Подключение БД Товар.accdb к приложению

2.3 Установим свойства ADOConnection в Инспекторе объектов:

  • LoginPrompt = False – запрос имени и пароля пользователя отключен.

  • Mode = cmShareDenyNone.

  • Connected = True – подключение к базе активировано.

3 Связывание таблиц БД с приложением

3.1 Положите на модуль данных dm компоненты ADOTable (закладка dbGo) и DataSource (закладка DataAccess).

3.2 Для удобства работы дайте им имена TabZakaz и dsZakaz, соответственно. Для этого в инспекторе объектов ADOTable1 в свойство Name записываем TabZakaz, а в инспекторе объектов DataSource1 в свойство Name записываем dsZakaz.

3.3 Подключим таблицу TabZakaz к компоненту ADOConnection1 и к одноименной таблице «Заказы» нашей БД (рисунок 6).

В инспекторе объектов таблицы TabZakaz устанавливаем свойства:

  • Connection = ADOConnection1.

  • TableName = Заказы.

  • Active = True (! это свойство устанавливать в последнюю очередь).

hello_html_405b5067.png

Рисунок 6 – Установка свойств компонента TabZakaz (ADOTable1)

3.4 В инспекторе объектов компонента dsZakaz (бывшая DataSource1) установите свойство DataSet = TabZakaz (рисунок 7).


hello_html_563367c9.png

Рисунок 7 – Установка свойств компонента dsZakaz (DataSource1)

После определения свойств исчезнут красные знаки вопроса слева от компонентов в окне Stucture, что говорит о готовности компонента к работе.

3.5 Двойным щелчком на компоненте TabZakaz откроем Окно редактора полей, щелкнем в окне правой кнопкой мыши и в контекстном меню выберем команду Add all fields. Окно редактора заполнится списком всех полей таблицы Заказы. Если щелкнуть на любом поле в окне редактора полей, то в окне инспектора объектов станут доступными свойства объекта-поля.

hello_html_m25eca851.png

Рисунок 8 – Добавление полей в компонент TabZakaz

3.6 Поступая аналогичным образом, установите в модуль dm соответствующие компоненты для таблиц «Товары» (компоненты TabTovar, dsTovar), «Клиенты» (компоненты TabKlient, dsKlient), «Сотрудники» (компоненты TabSotrydniki, dsSotrydniki), «Поставщик» (компоненты TabPostavshik, dsPostavshik), «Поставка» (компоненты TabPostavka, dsPostavka).

3.7 Сохраняем проект – File -> Save All.

!!! База данных Товар.accdb подключена к клиентскому приложению, и все таблицы привязаны к компонентам Delphi.

4 Разработка рабочих форм для работы с таблицами БД

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

Разработка для пункта меню «ЗаказыТоварыКлиенты».

4.1 Создаем новую форму File->New->Form-Delphi. Сохраняем модуль с именем Unit2 (предлагается по умолчанию).

4.2 В инспекторе объектов для Unit2 устанавливаем свойство:

Caption = «Заказы» «Товары» «Клиенты»;

Visible = False // При запуске приложения – окно невидимо.

4.3 Знакомим Form1 и Form2.

4.3.1 Делаем активной Form1 (щелкнем по Unit1, а затем по форме). Далее File->Use Unit.. (Использовать модуль), где в контекстном меню выбираем Unit2 и жмем OK (рисунок 9). Теперь форма Form1 знает о существовании Form2, в коде Unit1 в разделе implementation прописалась строка hello_html_m2099ccc7.png (проверьте это нажав F12).

hello_html_m39132dfb.png

Рисунок 9 – Знакомство форм Form1 с Form2

4.3.2 Делаем активной Form2. Далее, File->Use Unit.. и в контекстном меню выбираем Unit1 и жмем OK. Форма Form2 знает о Form1 (проверьте).

hello_html_m2c36c215.png

Рисунок 10 – Вид окна для пункта ЗаказыТоварыКлиенты

4.4 Переходим на Form1. Щелкаем дважды мышкой по компоненту MainMenu1, а затем дважды по пункту ЗаказыТоварыКлиенты. Пишем код.

procedure TForm1.N2Click(Sender: TObject);

begin

Form2.Show; // Метод Show выводит на экран окно Form2

end;

4.5 Оформляем Form2. Окончательный вид окна показан на рисунке 10.

4.5.1 Знакомим Form1 и Form2 с модулем DatMod (см. 4.3.1 и 4.3.2).

4.5.1 Положим на Form2 три компонента GroupBox (закладка Standard) и используя свойства Caption дайте им заголовки «Заказы» (для GroupBox1), «Товары» (для GroupBox2) и «Клиенты» (для GroupBox3).

4.5.2 Положите в GroupBox1 сетку DbGrid1 (закладка Data Controls). Для DbGrid1 свяжите свойство DataSource с источником данных dsZakaz. В Окне редактора полей (двойной клик по DbGrid1) выберите команду Add all fields.

hello_html_5aef2cf5.png

Проделайте ту же операцию для «Товары» и «Клиенты».

4.6 Сохраняем (File -> Save All) и компилируем (F9) проект.

4.7 Положите в GroupBox1 под сетку DbGrid1 компонент DBNavigator (закладка Data Controls). В инспекторе DBNavigator свойство DataSource = dsZakaz.

Проделайте ту же операцию для «Товары» и «Клиенты».

4.8 Вывод картинки. В бокс GroupBox2 (Товары) положите компонент Image (вкладка Additional) для визуализации изображений товаров, а также компонент Label (вкладка Standart) для поясняющего текста.

Разрабатываемое приложение предполагает, что папка foto с изображениями товаров находятся в каталоге таблицы базы данных. Во время добавления информации в базу данных пользователь вводит в поле Изображение таблицы Товары имя файла (с расширением) картинки, а во время просмотра картинка автоматически появляется в поле Image1. Картинки могут иметь расширения bmp или jpeg.

4.9 Пишем код отображения фото. Переходим в модуль dm (DatMod).

Заходим в Код (F12). Чтобы приложение понимало формат файлов *.jpg, добавьте в список USES (в блоке implementation) имя модуля JPEG, т.е. hello_html_m723302ab.png. Для формата BMP – ничего делать не надо.

Возвращаемся к форме dm (F12). Выделяем компонент TabTovar, в Инспекторе переходим во вкладку Events и выбираем событие AfterScroll (двойной клик).

hello_html_7c618161.png

В окне кода для модуля dm (DatMod) пишем код

hello_html_mde90363.png

Краткое пояснение. Событие AfterScrool происходит всякий раз после перехода к другой записи таблицы. Процедура Tdm.TabTovarAfterScroll анализирует содержимое поля 'Изображение' таблицы TabTovar и, если оно не пустое, выводит картинку из папки foto. В переменной PicPath сохранится полный путь к папке с приложением, а в переменной PicName – содержимое ячейки поля 'Изображение' в записи с курсором. Функция ExtractFilePath(ParamStr(0)) возвращает путь к папке, где запущено приложение, возвращает тип string. Методы TabTovar.FieldValues['Изображение'] и TabTovar.FieldByName('Изображение').AsString – два способа извлечь содержимое из ячейки текущей записи поля 'Изображение'. Метод LoadFromFile(PicPath+PicName) загружает картинку из файла.

4.10 Сохраняем (File -> Save All) и компилируем (F9) проект. Если при этом может выскочить сообщение о том, что в приложении есть обращение на несуществующий объект:

hello_html_4b25596c.png.

Ничего страшного. Просто мы сначала создали модуль dm (DatMod), а потом Form2 (Unit2), и это прописалось в модуле Tovar.pas. Поэтому при запуске приложения создается модуль dm, при этом процедура Tdm.TabTovarAfterScroll ссылается на форму Form2, которой еще нет. Чтобы обойти эту ситуацию откройте файл Tovar.dpr и поменяйте местами соответствующие строчки:

hello_html_m51bc82e7.png

4.11 Сохраняем (File -> Save All) и компилируем (F9) проект.

Задание. Создайте форму Form3 и проведите разработку окна для работы с пунктом меню «СотрудникиПоставщикПоставка». Не забудьте в выбранных таблицах (модуль dm) установить свойство Active = True.

5 Закрытие главной формы

Чтобы внесенные пользователем изменения в таблицы были сохранены в БД «Товар» в Access, таблицы в Delphi по окончании работы необходимо закрыть. Для этого используем метод Close. Для закрытия главной формы (и приложения в целом) используем метод Free – закрывает форму и освобождает память. Отметим, что если главную форму закрыть, то рабочие формы закрываются автоматически.

5.1 Переходим на Form1. Устанавливаем кнопку BitBtn1 (вкладка Additional). В инспекторе BitBtn1 устанавливаем свойство Kind = bkClose.

5.2 В инспекторе BitBtn1 заходим в Events и вызываем обработчик события OnClick (Двойным щелчком).

hello_html_m6d19184.png

В открывшемся окне Code пишем команду на закрытие Form1.

hello_html_m58888997.png

Пояснение. При попытке закрытия приложения (команда Form1.Free) автоматически возникает событие OnCloseQuery. Обработчик события автоматически получает логическую переменную CanClose. По умолчанию эта переменная имеет значение True, и форму можно закрыть. Если параметр CanClose в значении False, то закрытие формы отменяется. Такую возможность используем для подтверждения закрытия главной формы Form1 с помощью MessageDlg(). Здесь при закрытии Form1 выдается типичный запрос на подтверждение операции – Yes и No.

5.3 В инспекторе Form1 заходим в Events и вызываем обработчик события OnCloseQuery (двойным щелчком).

В открывшемся окне Code пишем код обработчика события OnCloseQuery (запрос на закрытие).

hello_html_63e14cb1.png

6 Задания для самостоятельной работы

По аналогии с построенным рамочным проектом «Информационная система Товар», созданной на основе БД Access и приложения Delphi, спроектируйте и реализуйте информационную систему согласно Вашему варианту. В качестве базы данных используйте базу данных, разработанную в лабораторной работе №11. Помните, любые новшества только приветствуются. Например, поле Memo можно вывести отдельно от записи в таблице.

Литература

Фленов М.Е. Библия Delphi //СПб.: БХВ-Петербург.-2011.-688с.


Выберите курс повышения квалификации со скидкой 50%:

Автор
Дата добавления 25.07.2016
Раздел Информатика
Подраздел Конспекты
Просмотров258
Номер материала ДБ-146832
Получить свидетельство о публикации

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