Lab 1-3_Delphi-Access (Лабораторная №1-3)
Описание файла
Файл "Lab 1-3_Delphi-Access" внутри архива находится в папке "Лабораторная №1-3". Документ из архива "Лабораторная №1-3", который расположен в категории "". Всё это находится в предмете "банки данных" из 6 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "банки данных" в общих файлах.
Онлайн просмотр документа "Lab 1-3_Delphi-Access"
Текст из документа "Lab 1-3_Delphi-Access"
Лабораторная работа 1
Разработка Delphi – приложений для файл–серверных БД
Цель работы:
Приобретение навыков использования компонентов Delphi для разработки клиентских приложений для файл-серверных баз данных. Работа рассчитана на 3 занятия (12 часов).
1. Создать в Access базу данных «библиотека».
База данных содержит 4 таблицы: основная таблица – Library и три подстановочных – Students, Books и Subjects.
Поля таблиц для БД «библиотека»:
Students: ID, Surname, Group.
Subjects: ID, Subject, где:
Subject – тематика книги ( физика, математика, информатика)
Books: ID, Title, SubjectID, Number, где:
Number – количество поступивших в библиотеку экземпляров данной книги.
Library: ID, StudentID, BookID, Out, где:
Out – признак выдачи книги (1- выдана, 0 – возвращена).
Установить связи между таблицами.
Заполнить таблицы данными и проверить ссылочную целостность данных.
(Ввести не менее трех книг по каждому из трех предметов, не менее 5 записей в таблицу Students и не менее 10 записей в таблицу Library.)
-
Создать новый проект в Delphi (сразу сохранить проект в папку c:\student\lab1).
В проекте реализовать следующий алгоритм выдачи книг. Студент хочет взять книги
по конкретным предметам. Библиотекарь делает запрос на выдачу списка книг, приобретенных библиотекой по данному предмету. Студент определяет, какую книгу из списка он хотел бы взять. Библиотекарь делает запрос на определения наличия указанной книги, и если такая книга имеется, то выдает ее студенту и добавляет в таблицу Library соответствующую запись, устанавливая поле Out в 1. При возврате книги предыдущая запись не удаляется (чтобы можно было проследить предысторию), а добавляется новая запись, в которой поле Out равно 0.
-
Поменять название формы на «Лабораторная работа» ( свойство ‘Caption’).
-
Создать новую форму, которая будет выполнять роль заставки :
File =>New=>Form
и подключить ее к проекту, добавив в модули Unit1 и Unit2, связанные с формами, операторы uses Unit2 и uses Unit1 соответственно.
Свойства формы:
BorderStyle = bsDialog - граница окна диалога.
FormStyle = fsStayOnTop - форма всегда показывается поверх других.
На форму добавить 2 элемента Label, в которые будет выводиться название лабораторной работы и Ваши ФИО и группа.
8. Добавить на первую форму меню.
Вкладка Standart:
MainMenu => Двойной щелчок для редактирования и создать два пункта меню:
Caption = «Исполнитель» => по нажатию открываем форму:
Form2.Show;
Caption = «Выход» => привязываем код: Form1.Close;
-
Подключиться к БД.
Для подключения к БД из вкладки BDE окна Tool Palette (компоненты этой вкладки обеспечивают программам Delphi доступ к файлам баз данных различных форматов с помощью сервиса баз данных, предоставляемого Borland Database Engine) установить компонент связи с БД Database, щелкнуть на нем правой кнопкой и открыть Свойства=>Explore, на пустом поле слева по правой кнопке мыши выбрать ODBC Administrator и настроить ODBC.
Для этого в окне настройки ODBC => Пользовательский DSN=>Добавить выбрать драйвер для Access, затем указать путь к своей БД и имя источника данных (alias), например, library (имя пользователя и пароль не устанавливать).
Для любого компонента свойство Name – имя переменной в создаваемой программе, поэтому оно должно соответствовать правилам задания идентификаторов.
Установить свойства Database:
AliasName = <имя источника данных в ODBC> => выбрать из раскрывающегося списка
DatabaseName = <имя базы данных> => ввести с клавиатуры
Connected = True имеет смысл устанавливать в True на время разработки, позволяет не переподключаться к базе. Для работающего приложения свойство Connected устанавливается в true при запуске приложения.
Если свойство Connected не установилось в True, значит есть проблемы с подключением БД. Устраните эти проблемы перед переходом к следующему пункту задания.
5. Из вкладки BDE на форму добавить элементы:
Table –
DatabaseName = <имя базы данных>: выбрать из раскрывающегося списка
AutoRefresh = True
ReadOnly = True
TableName = <имя таблицы>: выбрать из раскрывающегося списка
Active = True
Query –
DatabaseName = <имя базы данных>: выбрать из раскрывающегося списка
SQL.Strings = <запрос>: создайте SQL-запрос на выборку книг по заданной тематике.
Пример запроса (регистр может быть произвольным, уточнение таблиц при обращении к полям требуется при наличии одноименных полей):
SELECT Subject, Title, number
FROM Books, subjects
WHERE subjectID=subjects.ID and subject='Информатика'
Active = True
Если свойство Active не установилось в True, значит есть проблемы с настройкой элементов. Устраните эти проблемы перед переходом к следующему пункту задания.
6. Из вкладки Data Access для каждого из элементов добавить компонент доступа к данным DataSource. Компонент DataSource1 связать с таблицей, а DataSource2 – с запросом.
Во время выполнения программы компоненты из вкладок BDE и Data Access не выводятся на экран. Поэтому не нужно заботиться о расположении их на форме.
7. Добавить на форму компоненты оформления:
Вкладка Win32:
PageControl: с двумя страницами, cоздаются по правой кнопке мыши => New Page
MonthCalendar - на первую страницу
Организуйте следующий алгоритм считывания даты из календаря.
После запуска программы календарь не виден. Он появляется на форме по нажатию кнопки (компонент SpeedButton ) . Значение, выбранное в MonthCalendar (свойство MonthCalendar1.Date) должно сохраняться в поле Text компонента MaskEdit (установить шаблон даты, для согласования форматов использовать функцию преобразования даты в строку - DateToStr() ). После считывания даты компонент MonthCalendar прячется с экрана. (MonthCalendar1.Visible:= False). Компоненты SpeedButton и MaskEdit находятся на вкладке Additional.
8. Добавить на форму компоненты работы с данными:
DBGrid – по одной на страницу, один компонент связать с DataSource1 (таблица), второй с DataSource2 (SQL - запрос).
Добавить подписи столбцов:
- в контекстном меню элемента DBGrid выбрать Columns Editor;
- в появившемся окне добавить новую колонку;
указать для свойства колонки FieldName - значение имени поля в таблице, для свойства Title -> Caption - произвольное имя колонки.
Если все действия по настройке выполнены правильно, то в полях элементов DBGrid должны появиться данные из таблицы и результаты выполнения запроса. Перед переходом к следующему пункту задания исправьте, если требуется, настройки.
-
Для реализации алгоритма выдачи книг используйте 2-ю страницу формы 1.
Добавьте на форму элемент Query:
SQL.Strings = <запрос> задайте запрос по двум таблицам базы.
Выполнить запрос: "Какие книги поступили в библиотеку по запрашиваемому учебному курсу". Этот запрос должен отличаться от первого наличием условия с параметром:
SELECT <имя_поля| список_полей> FROM < список_таблиц >
WHERE < имя_поля > { <,>,=} <:имя_параметра>
Добавьте компонент ComboBox – с его помощью можно выбирать значение параметра для созданного запроса из обычного списка, предварительно его заполнив (свойство Items).
Создайте для него обработчик события изменения поля (OnChange)
with Query1 do
begin
Close; {закрываем запрос}
ParamByName('t1').AsString:= ComboBox1.text; {передаем значение параметра; здесь t1 – имя параметра в запросе}
Open; {открываем запрос}
First; {ставим курсор на первую запись временной таблицы, которая является
результатом выполнения запроса }
end;
if Query1.RecordCount=0 then {проверка на существование запрашиваемых данных}
ShowMessage('В БД нет запрашиваемых данных' );
Установить свойство Value параметра t1 => String.
Для согласования форматов используйте, если требуется, функции преобразования данных:
IntToStr(N) – преобразует число N типа Integer в строку символов, содержащую символьное представление числа.
StrToInt(S) – преобразует строку S в целое число типа Integer.
10. Разработать процедуру для вычисления имеющегося в наличии количества экземпляров запрашиваемой книги, используя программный (не SQL – запрос) доступ к полям таблиц БД и полям компонента DBGrid , в который выведены результаты выполнения запроса.
Пример доступа к полям таблицы (данные берутся из текущей записи):
procedure TForm1.Button1Click(Sender: TObject);
var
x: real;
begin
Table2.Open;
while not Table2.EOF do
begin
if (Table2['code']='430')
and (Table2['date']= '12.07.08') then
begin
x:=Table2['value'];
Label1.Caption:=FloatToStr(x);
end;
table2.Next;
end;
Table2.Close;
end;
Пример доступа к полям компонента DBGrid ( Fields[0] –нулевая колонка):
id:= DBGrid1.Fields[0].value;
11. Для проверки правильности работы процедуры добавить на Вкладку1 компонент DBNavigator , вывести в DBGrid данные таблицы library, добавить в нее записи о приеме и выдачи книг и выполнить запрос на наличие книги.
12. Перенести (для тренировки) SpeedButton , MonthCalendar и MaskEdit со страницы 1 на форму 2, чтобы освободить место на странице 1 (для переноса использовать меню редактирования, функции Вырезать и Вставить ).
13. Добавить на страницу 1 таблицу (students) с элементами доступа и компонентами работы с данными (т.е. таблица должна просматриваться при запуске программы) и связать ее с имеющейся таблицей (library), для чего для подчиненной таблицы (students):
- установить в качестве значения свойства MasterSource имя DataSource первой таблицы;
- с помощью свойства MasterFields связать главное и подчиненное поля.
При перемещении по записям в компоненте, связанном с основной таблицей library, в компоненте, связанном с таблицей students, должна выводиться запись о студенте с индексом, указанным в текущей записи таблицы library.