labs_db
.pdf
11
Методические указания
Для создания SQL-запроса в СУБД Access необходимо выполнить следующие действия:
выбрать в окне базы данных в списке Объекты тип создаваемого объекта– Запросы;
выбрать режим создания запроса Создание запроса в режиме конст-
руктора;
не добавляя таблиц или запросов, нажать кнопку Закрыть в диало-
говом окне Добавление таблицы;
выбрать в меню Вид команду Режим SQL;
ввести в окне редактора SQL текст оператора SQL. Каждый запрос может содержать только один оператор SQL.
Для запуска запроса нажмите кнопку Запуск на панели инструментов.
ЛАБОРАТОРНАЯ РАБОТА № 4 ПРИЛОЖЕНИЕ ДЛЯ ПРОСМОТРА ТАБЛИЦЫ
Разработать приложение в С++ Builder для просмотра таблицы базы данных. Пример формы для просмотра таблицы книг приведен на рис. 1. Варианты заданий приведены в табл. 7.
|
Рис. 1. Форма для просмотра таблицы книг |
||
|
Варианты заданий |
Таблица 7 |
|
|
|
||
№ |
Таблица базы данных |
№ |
Таблица базы данных |
1 |
Предприятие |
9 |
Поставщик |
2 |
Товар |
10 |
Экзамен |
3 |
Студент |
11 |
Поставщик |
4 |
Читатель |
12 |
Учебный план |
5 |
Филиал фирмы |
13 |
Студент |
6 |
Выпускник |
14 |
Заказчик |
7 |
Расписание экзаменов групп |
15 |
Кассета |
8 |
Преподаватель |
|
|
12
Методические указания
Для создания приложения необходимо выполнить следующие дейст-
вия:
1.Запустить C++ Builder и создать новый проект (FileNewApplication). Дать осмысленное имя главной форме приложения, например, frmMain (свойство Name).
2.Добавить в проект модуль данных– особый тип формы, служащий для размещения и группировки невизуальных компонент, необходимых для работы с базой данных (FileNewDataModule). Дать осмысленное имя модулю данных, например, dmMain.
3.Сохранить проект (File Save All). Имена файлов с исходным текстом желательно формировать на основе имен соответствующих форм, на-
пример, frmMainUnit и dmMainUnit.
4.Добавить в модуль данных компоненты для связи компонента визуализации данных с базой данных: ADOConnection, ADOTable с закладки
ADO и DataSource с закладки DateAccess. ADOConnection – компонент,
который связывает приложение с базой данных. ADOTable– компонент, «представляющий» в приложении одну из таблиц базы данных. DataSource – компонент для связи набора данных (в разрабатываемом приложении набор данных представлен компонентом ADOTable) с компонентами визуализации данных.
5.Дать осмысленные имена компонентам модуля данных. Компонент ADOConnection в простом проекте, можно назвать dbConnection. Компонент ADOTable всегда связан с таблицей базы данных и, поэтому желательно включить в имя компонента имя таблицы, например, tblBooks. Компонент DataSource в разрабатываемом приложении связан с конкретной таблицей, но в других приложениях, которые будут выполняться на основе проекта просмотра таблицы, он будет связан с запросами, поэтому его можно назвать dsMain.
6.Задать свойства компонента ADOConnection.
Задайте тип базы данных и имя файла с базой данных в свойстве
ConnectionString. Для этого:
вызовите двойным щелчком на свойстве ConnectionString диалоговое окно для ввода строки соединения;
включите переключатель Use Connection String для формирования строки соединения в режиме диалога и нажмите кнопку Build;
на закладке Поставщик данных выберите тип базы данных– Microsoft Jet 4.0 OLE DB Provider, который используется для баз данных Access, и укажите имя файла с базой данных.
Отмените вывод окна запроса пароля при соединении с базой данных, установив свойство LoginPromt в false.
13
7.Задать свойства компонента ADOTable.
Установите связь компонента с базой данных через компонент ADOConnection. Для этого выберите в свойстве Connection настроенный ранее компонент dbConnection.
Задайте имя таблицы базы данных, с которой будет работать приложение. Для этого установите в свойстве TableName имя таблицы, выбрав его из списка таблиц базы данных.
8.Задать свойства компонента DataSource.
Установите связь источника данных с набором данных. Для этого в свойстве DataSet укажите настроенный ранее компонент ADOTable.
9.Сделать доступной базу данных для главной формы приложения. Для этого подключите модуль данных к модулю главной формы, добавив строку #include “dmMainUnit.h” в файл frmMainUnit.cpp (сделайте ак-
тивной главную форму или ее модуль и выполните команду Fileinclude unit hdr, указав для нее имя header-файла модуля данных dmMainUnit.h).
10.Разместить на главной форме компонент для отображения данных таблицы базы данных– DBGrid с закладки Data Controls и дать ему осмысленное имя, например, grdMain.
11.Задать свойства компонента DBGrid:
установите связь DBGrid с источником данных, указав в свойстве DataSource имя настроенного ранее компонента DataSource;
запретите редактирование записей в таблице через компонент DBGrid, указав в подсвойстве dgRowSelect свойства Options значение true (кроме того, это свойство обеспечивает выделение выбранной строки таблицы только целиком);
12.В обработчике события OnShow для формы вызвать установку соединения с базой данных и открытие источника данных компонента grdMain:
grdMain->DataSource->DataSet->Open();.
13.Запустить приложение. Приложение должно отображать выбранную таблицу базу данных.
ЛАБОРАТОРНАЯ РАБОТА № 5
ВВОД ДАННЫХ В ТАБЛИЦУ С ПОМОЩЬЮ ФОРМЫ
Разработать приложение в С++ Builder для ввода данных в таблицу базы данных. Приложение должно содержать две формы: форму для ввода данных и форму для просмотра таблицы. Пример формы для ввода данных о книге приведен на рис. 2.
14
Рис. 2. Форма для ввода информации о книге
Добавление записи в таблицу должно быть реализовано с помощью запроса на добавление. Работа выполняется на основе предыдущего проекта, который будет основой и для последующих работ.
Методические указания
Скопировать все файлы предыдущего проекта в новую папку. Эта копия будет основой разрабатываемого приложения.
Этап 1. Создание формы для ввода данных.
1.Добавить в проект новую форму (FileNewForm), дать ей осмысленное имя, например, форме для ввода книг– frmAddBook и сохранить проект (задав имя новому файлу с исходным текстом, например, frmAddBookUnit.cpp).
2.Выполнить необходимые настройки внешнего вида формы: заголовок (свойство Caption), запрет изменения размеров (свойство BorderStylebsDialog), вывод формы в центре главной формы (свойство PositionpoMainFrmCenter), запрет на использование кнопки «максимизировать» (свойство biMaximize=false в группе свойств BorderIcons).
3.Разместить в форме текстовые поля для ввода данных и соответствующие метки к ним. Имя поля удобно формировать из имени поля таблицы и префикса txt к нему, например, для полей формы ввода книг: txtTitle, txtAuthor, txtPublisher, txtYear. Очистить поля (свойство Text).
4.Разместить на форме две кнопки: «Добавить» и «Завершить» для управления формой. Задать кнопкам осмысленные имена, например, cmdAdd и cmdCancel. Кнопка «Добавить» должна быть для формы кнопкой по умолчанию (свойство Default).
5.Проверить и при необходимости изменить порядок обхода элементов формы (свойство TabOrder).
6.Сделать доступной базу данных для модуля формы ввода. Для этого подключите модуль данных к модулю формы (добавьте строку #include “dmMainUnit.h” в файл с исходным текстом формы ввода).
7.Сохранить форму.
15
Этап 2. Добавление в модуль данных компонента для работы приложения с базой данных с помощью запросов действия.
1.Добавить в модуль данных проекта компонент ADOQuery с закладки
ADO.
2.Дать компоненту ADOQuery имя, например, qryMain.
3.Связать компонент ADOQuery с базой данных через компонент ADOConnection, указав в свойстве Connection настроенный ранее компонент dbConnection.
Этап 3. Создание обработчиков событий OnClick кнопок «Добавить»
и «Завершить».
1.Написать обработчик события OnClick кнопки «Добавить»:
объявить строковую переменную для формирования текста SQLзапроса к базе данных, например, strSQLText:
AnsiString strSQLText;
сформировать в строке текст запроса на добавление записи в таблицу, используя в нем ссылки на поля формы ввода (пример текста запроса к таблице «Книга» приведен на рис. 3);
strSQLText="Insert Into Книга ([Код книги], Название, Автор, Издательство, [Год издания]) values ("+txtCode->Text+",’"+ txtTitle- >Text+"’,’"+txtAuthor->Text+"’,’"+txtPublisher->Text+"’," + txtYear- >Text+")";
Рис. 3. Текст SQL-запроса на добавление записи в таблицу
задать SQL-оператор в SQL-свойстве компонента ADOQuery: dmMain->qryMain->SQL->Text=strSQLText;
выполнить запрос к базе данных, используя метод ExecSQL компо-
нента ADOQuery: dmMain->qryMain->ExecSQL();
очистить поля формы ввода и установить фокус ввода на первое поле
(метод SetFocus).
2.В обработчике события OnClick кнопки «Завершить» закрыть форму для ввода данных (метод Close).
Этап 4. Вызов формы для ввода данных и обновление главной фор-
мы.
1.Разместить на главной форме кнопку для открытия формы ввода данных, задать ей осмысленное имя и заголовок, например, cmdAddBook и «Добавить книгу».
2.Сделать доступной форму ввода для главной формы. Для этого подключите форму ввода к модулю главной формы (для рассматриваемого
16
примера добавьте в файл frmMainUnit.cpp строку #include “frmAddBookUnit.h”).
3.Написать обработчик события OnClick кнопки открытия формы добавления данных:
открыть форму ввода в модальном режиме, используя метод формы
ShowModal, например: frmAddBook->ShowModal();
обновить информацию в компоненте DBGrid, чтобы отобразить в нем таблицу с добавленными записями:
grdMain->DataSource->DataSet->Active=false;
grdMain->DataSource->DataSet->Active=true;
Примечание. В этой работе не рассматриваются вопросы проверки корректности введенных данных. Однако эти действия являются обязательными при работе с реальными базами данных и должны быть выполнены в курсовом проекте.
ЛАБОРАТОРНАЯ РАБОТА № 6 УДАЛЕНИЕ ЗАПИСИ ИЗ ТАБЛИЦЫ
Разработать приложение в С++ Builder для удаления записи из таблицы базы данных. Удаление записи из таблицы должно быть реализовано с помощью запроса на удаление. Работа выполняется на основе проекта просмотра записей таблицы.
Методические указания
Скопировать все файлы проекта просмотра таблицы в новую папку. Внести в копию проекта следующие изменения.
1.Добавить в модуль данных компонент ADOQuery для выполнения SQLзапроса к базе данных и связать компонент с базой данных, установив в его свойстве Connection имя настроенного ранее компонента ADOConnection. Задать имя компоненту, например, qryMain.
2.Разместить на форме кнопку «Удалить» и дать ей осмысленное имя (на-
пример, cmdRemove).
3.Написать обработчик события OnClick кнопки «Удалить».
Объявить строковую переменную для формирования текста SQLзапроса к базе данных, например, strSQLText.
Сформировать в переменной strSQLText текст запроса удаления из таблицы базы данных записи, используя в условии отбора значения ключевых полей, выделенной в компоненте DBGrid строки. Для ссылки на значение поля выделенной в элементе DBGrid строки используется следующий код:
17
grdMain->DataSource->DataSet->FieldByName ("Имя_поля") ->AsString
Свойство AsString переводит тип любого поля в строку. Примечание. При использовании в качестве источника данных компонента DBGrid запроса на выборку (компонента ADOQuery) необходимо для идентификации удаляемой записи включить в список выводимых запросом полей все ключевые поля таблицы.
Задать SQL-оператор в SQL-свойстве компонента ADOQuery.
Выполнить запрос действия, используя метод ExecSQL компонента
ADOQuery.
Обновить информацию в компоненте DBGrid, чтобы отобразить таблицу с удаленной записью.
Примечание. В более серьезной работе необходимо предусмотреть в программе окно с запросом на подтверждение удаления и проверку того, выделена ли хотя бы одна запись, и возможность выделения нескольких записей.
ЛАБОРАТОРНАЯ РАБОТА № 7 ИЗМЕНЕНИЕЗАПИСИВТАБЛИЦЕСПОМОЩЬЮФОРМЫ
Разработать приложение в С++ Builder для изменения записи в таблице базы данных. Приложение должно содержать две формы: форму для изменения записи и форму для просмотра таблицы. Изменение записи таблицы должно быть реализовано с помощью запроса на обновление. Работа выполняется на основе проекта добавления записи.
Методические указания
Скопировать все файлы проекта добавления записи в новую папку. Внести в копию проекта следующие изменения.
1.Изменения в главной форме.
Изменить заголовок кнопки «Добавить» на «Изменить».
В обработчике события OnClick кнопки «Изменить» перед вызовом формы для изменения записи, добавить код для заполнения всех текстовых полей этой формы значениями соответствующих полей из выбранной в компоненте DBGrid записи. Код заполнения поля txtTitle будет иметь следующий вид:
frmAddBook->txtTitle->Text=grdMain->DataSource->DataSet-> FieldBy- Name("Название")->AsString;
2.Изменения в форме frmAddBook.
Изменить заголовок формы на «Изменить запись», а заголовки кнопок «Добавить» и «Завершить»– на «Изменить» и «Отменить».
18
Сделать доступной главную форму для формы изменения. Для этого подключите главную форму к модулю формы изменения записи (для рассматриваемого примера добавьте строку #include “frmMainUnit.h” в файл frmAddBookUnit.cpp).
В обработчике события OnClick кнопки «Изменить» заменить текст запроса добавления записи на запрос обновления записи таблицы, используя в запросе в качестве новых значений данные из текстовых полей формы изменения, а в условии отбора– значения ключевых полей выбранной в компоненте DBGrid записи. Удалить код, который очищает поля формы. Добавить в конец обработчика код закрытия
формы изменения (метод Close).
Примечание. В более серьезном проекте требуется предусмотреть в программе окно с запросом на подтверждение изменения и проверку вводимых данных.
ЛАБОРАТОРНАЯ РАБОТА № 8 ПОИСК ЗАПИСЕЙ
Разработать приложение в С++ Builder для поиска записей. Форма приложения должна содержать текстовые поля для задания условия поиска записей и компонент DBGrid для отображения найденных записей. Работа выполняется на основе проекта просмотра записей таблицы. Пример формы для поиска книг приведен на рис. 4. Поиск должен выполняться при нажатии на кнопку «Поиск». При открытии формы и при нажатии на кнопку «Сброс» в компоненте DBGrid должны отображаться все записи.
Рис. 4. Форма для поиска книг
Поиск должен выполняться по любому полю и по любому сочетанию полей. Для текстовых полей таблицы поиск должен выполняться по лю-
19
бым символам поля. Для числовых полей и полей типа «Дата» необходимо предусмотреть в форме по два поля, чтобы задавать в них диапазон значений.
Методические указания
Внести в копию проекта следующие изменения.
1.Внести изменения в модуль данных.
Добавить в модуль данных проекта компонент ADOQuery для формирования запроса-выборки к базе данных. Связать компонент
ADOQuery с компонентом ADOConnection через свойство Connection. Дать компоненту ADOQuery имя, например, qryMain. Ввести в свойство SQL текст запроса-выборки для вывода всех записей таблицы.
Связать источник данных компонента визуализации данных с компонентом ADOQuery. Удалить не используемый в приложении ком-
понент ADOTable.
2.Внести изменения в форму.
Увеличить высоту формы и переместить компонент DBGrid в её центральную часть.
Добавить в верхнюю часть формы текстовые поля для ввода условий поиска записей и метки к ним. Задать имена добавленным полям. Очистить поля.
В нижней части формы разместить кнопки «Поиск» и «Сброс». Задать кнопкам осмысленные имена.
Привести размеры и положение элементов в соответствие друг с другом.
3.Написать обработчик события OnClick кнопки «Поиск».
Объявить строковую переменную для формирования текста SQLзапроса к базе данных, например, strSQLText.
Сформировать в строковой переменной (strSQLText) текст запросавыборки (оператор Select) для вывода записей, удовлетворяющих условию поиска. При формировании строки учитывать, что при задании условия поиска некоторые текстовые поля могут быть пустые.
Перед изменением SQL-свойства компонента ADOQuery, возвращающего набор данных, необходимо закрыть запрос:
dmMain->qryMain->Close();
Задать SQL-оператор в SQL-свойстве компонента ADOQuery.
Выполнить SQL-запрос. Запрос-выборка выполняется с помощью метода Open компонента ADOQuery:
dmMain->qryMain->Open();
4.Написать обработчик события OnClick кнопки «Сброс».
20
Объявить строковую переменную для формирования текста SQLзапроса к базе данных, например, strSQLText.
Сформировать в строковой переменной (strSQLText) текст запросавыборки для вывода всех записей таблицы.
Перед изменением SQL-свойства компонента ADOQuery закрыть запрос.
Задать SQL-оператор в SQL-свойстве компонента ADOQuery.
Выполнить SQL-запрос (метод Open).
Очистить текстовые поля для ввода условия отбора (свойство Text) и установить фокус на первое поле (метод SetFocus).
ЛАБОРАТОРНАЯ РАБОТА № 9 АРХИВАЦИЯ ДАННЫХ
Разработать приложение в С++ Builder для перемещения отобранных пользователем записей основной таблицы в архивную таблицу. Пример формы для архивации приведен на рис. 5.
Рис. 5. Форма для архивации
Кнопки между двумя компонентами DBGrid предназначены для перемещения записей между таблицами. Кнопка «Переместить» предназначена для выполнения архивации записей, содержащихся во вспомогательной таблице, и удаления их из основной таблицы. Работа выполняется на основе проекта просмотра записей таблицы.
Методические указания
Внести изменения в базу данных: создать таблицу, в которую будут добавляться архивируемые записи («Архив») и вспомогательную таблицу («Рабочая»). Эти таблицы должны быть копиями основной таблицы.
Внести в копию проекта следующие изменения.
