База данных «Аптека»

Автор работы: Пользователь скрыл имя, 28 Декабря 2014 в 23:37, курсовая работа

Описание работы

База данных — это набор файлов (таблиц), в которых находится информация. Как правило, база данных состоит из нескольких таблиц, которые размещают в одном каталоге. Таблицу можно создать, воспользовавшись входящей в состав Delphi утилитой Borland Database Desktop или организовав SQL-запрос к серверу базы данных.

Файлы: 1 файл

ZapiskaKononenka (1).docx

— 920.33 Кб (Скачать файл)


 

 

 

 

 

 

 

 

Рисунок  1.2.14 – Установление ссылочной целостности

 

2.  РАЗРАБОТКА ПРИЛОЖЕНИЯ ПРИ  РАБОТЕ С БАЗОЙ ДАННЫХ

 

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

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

• Компоненты — наборы данных (data set), непосредственно связывающиеся с базой данных. Для BDE это такие компоненты, как Table, Query.

• Компонент — источник данных (data source), осуществляющий обмен информацией между компонентами первого типа и компонентами визуализации и управления данными. Таким компонентом является Data Source.

• Компоненты визуализации и управления данными, такие, как DBGrid,

DBText, DBEdit и множество других.

Компонент DataSource находится на вкладке DataAccess, компоненты Table и Query  расположены на вкладке BDE, компоненты  DBNavigator и DBGrid размещены на вкладке Data Controls.

 

2.1  Назначение

 

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

 

2.2  Структура приложения

 

Приложение состоит из программы для отображения, добавления, редактирования и удаления информации локальной базы данных и самой локальной базы данных, предусмотрен поиск по заданному критерию, рассмотрено создание вычисляемых полей.  Тип базы данных – реляционная база данных Paradox v.7.

 В приложении для  работы с базами данных будем  использовать две форма: первая - для отображения таблиц данных и сортировок, вторая - для поиска. На первой форме размещены три компонента DBGrid, в которых будут отображаться таблицы, созданные в DataBase Desktop, три компонента Table для набора данных, а также три компонента DataSource, которые будут являться источниками данных.  Компоненты DBNavigator для упрощения работы с таблицами (удаления, добавления и так далее). Компонент Query,который понадобится для организации поиска. Также на форме расположенные компоненты RadioGroup и GroupBox, на которых находятся переключатели RadioButton, определяющие вид сортировки (то есть поля сортировки) и её направление. И кнопки, которым приписываются функции поиска, обновления данных, сортировки и выхода из приложения.

На второй форме располагаются компоненты ComboBox – выбор критерия поиска, Edit - для ввода информации и кнопка закрытия формы.

 

2.3  Описание приложения

 

Открываем приложение и переносим на форму необходимые компоненты. Три компонента Table со страницы библиотеки ВDЕ. Перенесим также на форму со страницы Data Access три компонента DataSource, которые будут являться источником данных. Оба эти компоненты невизуальные, пользователю они будут не видны, их можно разместить в любом месте формы. В качестве компонента визуализации данных возьмем компонент DBGrid со страницы Data Controls. Это визуальный компонент, в котором будут отображаться данные формы.

Теперь нам надо установить цепочку связей между этими компонентами. Главное свойство DBGrid и других компонентов визуализации и управления данными — DataSource. Выделяем на форме компонент DBGrid l и щелкаем по его свойству DataSource в Инспекторе Объектов. Появляется список, в котором перечислены все имеющиеся на форме источники данных. В нашем случае источником данных является  DataSource l. Далее необходимо установить связь между источником данных и набором данных. Выделяем компонент DataSource l и найдем в Инспекторе Объектов его главное свойство — DataSet. Теперь нажмем на этом свойство и из выпадающего списка выберираем Tablel . Теперь осталось связать компонент Tablel с необходимой таблицей базы данных.

Для компонента Table1 в инспекторе объектов необходимо изменить следующие свойства:

  • Свойство DatabaseName имеет тип String и задает полный путь к каталогу базы данных. В значении этого свойства можно указать вместо пути к каталогу базы данных ее псевдоним. Укажем псевдоним – DBCadr.
  • Свойство TableName имеет тип TFileName и определяет имя файла таблицы базы данных, которую инкапсулирует объект. Укажем – Sotrudniki.db.

Аналогичные действия выполняем и для оставшихся компонентов и таблиц. Теперь можно прямо в процессе проектирования соединиться с базой данных. Соединение осуществляется свойством Active. По умолчанию оно равно false. Устанавливаем его в true и  в поле компонента DBGridl стали  данные из таблицы. Аналогично и для других таблиц. В спроектированное приложение  добавляем еще один компонент, управляющий работой с таблицей - навигатор DBNavigator, расположенный на странице Data Cortrols и помещаем его на  форму. Для компонента DBNavigator1 необходимо изменить свойство DataSource: (указывает источник данных для набора данных). Укажем – DataSource1. Компонент имеет ряд кнопок, служащих для управления данными. Назначения кнопок приведены в таблице 2.3.1.

 

Таблица 2.3.1   Назначение кнопок компонента DBNavigator

Кнопки

Назначение

nbFirst

перемещение к первой записи

nbPrior

перемещение к предыдущей записи

nhNext

перемещение к следующей записи


nbLast

перемещение к последней записи

nblnsert

вставить новую запись перед текущей

nbDelеte

удалить текущую запись

nbEdit

редактировать текущую запись

nbPost

послать отредактированную информацию в базу данных

nbCancel

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

nbRefresh

очистить буфер, связанный с набором данных


 

Помещаем Query1 на форму, он необходим для функции поиска в приложении. В Инспекторе Объектов данного компонента находим свойство DataBaseName, в нём указываем используемый нами псевдоним DBCadr.

Поместим на форму кнопки «Поиск», «Обновить таблицы», «Выход», «Сортировка» и для каждой в обработчике события напишем соответствующие процедуры.

Для того, чтобы в наших таблицах название полей отображалось на русском языке выберем компонент Table. Двойной щелчок мыши по данному компоненту вызывает редактор полей. Правой кнопкой мыши вызываем контекстное меню редактора и выбираем меню «Add fields…»и в результате получаем:

                               

 

 


 

 

 

 

 

 

Рисунок 2.3.1 – Редактор полей

 

Выбираем в редакторе полей поле, которое желаем переименовать, и в инспекторе объектов меняем значение свойства DisplayLabel .

Для создания вычисляемого поля также используем редактор полей. В нашем случае выбираем: Table3/ Fields Editor/New field. Появится диалоговое окно представленное на рисунке 2.3.2.

 


 

 

 

 

 

 

 

 

 

Рисунок 2.3.2 - Диалоговое окно New field

 

В поле Name вводим название вычисляемого поля – Sum , а также указываем его тип Currency, в разделе Field type ставим переключатель напротив Calculated, нажимаем «Ок». Далее выбираем компонент Table3 и в Инспекторе Объектов в разделе события выбираем OnCalcFields и пишем соответствующую процедуру. В ней для данных таблицы «Подразделения» будем вычислять сумма оклада и процента надбавкиа:

Table3Sum.Value:=Table3Oklad.Value+Table3Oklad.Value*Table3Nadbavka.Value/100;

Теперь для того, что бы при выборе по определенному критерию в одной из таблиц, мы могли бы получить информацию из других таблиц мы свяжем таблицы прямо на форме. Для этого выбираем на форме Table3 и в Инспекторе  Объектов свойство Master Source и указываем источник данных -  DataSource 2, а через MasterFields указываем поля связи. Данная процедура отражена на рисунке 2.3.3. Аналогично связываем таблицу «Сотрудники» с таблицей «Подразделения».


 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рисунок 2.3.3 – Процедура связи таблиц по ключевым полям

 

Далее опишем формирование SQL –запроса. Для доступа к запросу на первой форме поместим кнопку «Поиск», а на второй форме создадим поля для ввода данных запроса и поместим компонент ComboBox (свойство Items и ItemIndex) для  выбора критерия запроса. Окно поиска представлено на рисунке 2.3.4.

 

Рисунок 2.3.4 – Окно поиска по заданному критерию

Выбираем Query1 и в Инспекторе объектов выбираем свойство  SQL: TStrings, двойным щелчком мыши вызываем диалоговое окно, где оформляем запрос, более подробно формируется программным образом (рисунок 2.3.5).

 

 

Рисунок 2.3.5 – Формирование SQL –запроса

В общем виде запрос выглядит так:

SELECT <Список Полей> FROM <Таблица> WHERE (Критерий) ORDER BY <Список Полей> ,где:

  • SELECT — команда выбора записей из таблицы и вывода содержимого полей, имена которых указаны в списке;
  • FROM — параметр команды, который определяет имя таблицы, из которой нужно сделать выборку;
  • WHERE — параметр, который задает критерий выбора. В простейшем случае критерий — это инструкция проверки содержимого поля;
  • ORDER BY - параметр, который задает условие, в соответствии с которым будут упорядочены записи, удовлетворяющие критерию запроса.

В данной работе возможно осуществлять поиск по 2 критериям: табельный номер, номер места. К примеру, рассмотрим поиск табельному номеру, запрос будет выглядеть следующим образом:

If Form2.ComboBox1.ItemIndex = 0 Then Begin

With Query1 Do Begin

Close;

SQL.Clear;

SQL.Add('SELECT * FROM ":DBCadr:Podrarzel.db" WHERE TabelNumber1 = "'+SQLData+'" Order by TabelNumber1');

Open; end;

If Query1.RecordCount <> 0 Then Begin

DataSource2.DataSet:=Query1;

Table1.MasterSource:=DataSource2;

Table1.MasterFields:='TabelNumber1';

Table3.MasterSource:=DataSource2;

Table3.MasterFields:='MNumber1';

DBGrid1.ReadOnly:=True;

DBGrid2.ReadOnly:=True;

DBGrid3.ReadOnly:=True;

DBNavigator1.Enabled:=False;

DBNavigator3.Enabled:=False;

end;

If Query1.RecordCount = 0 Then Begin

DataSource2.DataSet:=Table2;

MessageDlg('Данные не найдены!', mtInformation, [mbOK], 0);

Table1.MasterSource:=nil;

Table3.MasterSource:=nil;

end; end;

Для запроса были использованы следующие методы:

    • Close – деактивирует запрос в качестве одной из мер предосторожности;
    • SQL.Clear – стирает любой предыдущий запрос;
    • SQL.Add – добавляет текст SQL-запроса;
    • Open – выполняет запрос и открываем набор данных

Свяжем таблицы с помощью инспектора  объектов, используя свойства компонента Table: MasterSource, для отображения результата поиска в других таблицах. Если данные не найдены, то:

Table1.MasterSource:=nil

Аналогично формируются запросы и по другим критериям.

Для сортировки используем переключатели RadioGroup. Первая группа переключателей определяет вид сортировки, то есть поле сортировки (например, Табельный номер и Фамилии). Вторая группа – направление сортировки, для этого при создании вторичных индексов указывался параметр – Descending.

Программно сортировка выглядит следующим образом:

If (RadioButton2.Checked) and (RadioButton4.Checked) Then

Table1.IndexName:='FamInd';

If (RadioButton2.Checked) and (RadioButton5.Checked) Then

Table1.IndexName:='FamIndDes';

If (RadioButton1.Checked) and (RadioButton4.Checked) Then

Table1.IndexName:='TabelNumberInd';

If (RadioButton1.Checked) and (RadioButton5.Checked) Then

Table1.IndexName:='TabelNumberIndDes';

То есть при выборе переключателей “По табельному номеру” и “По возрастанию” свойству таблицы Table1 – IndexName  присваивается значение TabelNumberInd, следовательно вторичный индекс TabelNumberInd будет использоваться для сортировки таблицы Table1. В результате таблица будет отсортирована по полю Табельный номер от меньшего значения к большему.

Для каскадного удаления записей, то есть удаления записей из дочерней таблицы при удалении данных из главной таблицы, необходимо для компонента Table создать событие BeforeDelete в инспекторе объектов, в котором программно описываем следующие действия:

Table2.MasterSource:=DataSource1;

Table2.IndexName:='TabelNumber1';

Table2.MasterFields:='TabelNumber';

with Table2 do begin

disableControls;

first;

while not EOF do

delete;

enableControls; end;

Table2.MasterSource:=nil;

Table2.IndexName:='';

Table2.MasterFields:='';

То есть связываем записи дочерней таблицы с записями главной через свойства компонента Table – MasterSource, MasterFields и через цикл while находим удаляемые записи в главной таблице и программным путем удаляем их в дочерней. Затем программно делаем независимое отображение таблиц.

Информация о работе База данных «Аптека»