Поле
|
Тип
|
Ограничения
|
ID
|
int
|
PK
|
Instruction
|
FK, not null
|
Incident
|
int
|
FK, not null
|
На рисунке 3 представлена ER-диаграмма базы данных
АРМ инженера по ТБ.
Рисунок 3 - ER-модель базы данных
Сформируем из данной ER-модели схему данных в MS SQL Server - рисунок 4.
Рисунок 4 - Схема данных
4. Связь приложения с базой данных
Среда Delphi является одной из
наилучших сочетаний объектно-ориентированного и визуального программирования.
Технология Microsoft ActiveX Data
Objects обеспечивает универсальный доступ к источникам данных из приложений БД.
Такую возможность предоставляют функции набора интерфейсов, созданные на основе
общей модели объектов СОМ и описанные в спецификации OLE DB.
Технология ADO и интерфейсы OLE DB
обеспечивают для приложений единый способ доступа к источникам данных различных
типов. Например, приложение, использующее ADO, может применять одинаково
сложные операции и к данным, хранящимся на корпоративном сервере SQL, и к
электронным таблицам, и локальным СУБД. Запрос SQL, направленный любому
источнику данных через ADO, будет выполнен.
В Delphi была реализована
возможность работы с технологией ADO через компоненты. Это позволяет быстро
создавать системы управления базами данных любой сложности.
Компонент TADOConnection вобрал
возможности перечислителя, источника данных и сессии с возможностями
обслуживания транзакций.
Четыре компонента наборов данных
(ADODataSet, ADOTable, ADOQuery и ADOStoredProc) фактически полностью
реализованы общим для них базовым классом TCustomADODataSet. Этот компонент
несет ответственность за выполнение большинства функций, присущих набору
данных. Производные компоненты являются тонкими оболочками, которые делают
доступными для внешнего мира те или иные возможности базового компонента. Таким
образом, компоненты обладают множеством общих черт.
Компоненты доступа к данным ADO
могут использовать два варианта подключения к хранилищу данных. Это стандартный
метод ADO и стандартный метод Delphi.
В первом случае компоненты
используют свойство connectionstring для прямого обращения к хранилищу данных.
Во втором случае используется специальный компонент TADOConnection, который
обеспечивает расширенное управление соединением и позволяет обращаться к данным
нескольким компонентам одновременно.
Connectionstring.
Свойство connectionstring
предназначено для хранения информации о соединении с объектом ADO. В нем через
точку с запятой перечисляются все необходимые параметры. Как минимум, это
должны быть имена провайдера соединения или удаленного сервера:
Connectionstring: =
'Remote Server=ServerName;Provider=ProviderName';
При необходимости указываются путь к
удаленному провайдеру:
Connectionstring: =
'Remote Provider=ProviderName';
…и параметры, необходимые
провайдеру:
'User
Name=User_Name;Password=Password';
Каждый компонент, обращающийся к
хранилищу данных ADO самостоятельно, задавая параметры соединения в свойстве
Connectionstring, открывает собственное соединение. Чем больше приложение
содержит компонентов ADO, тем больше соединений может быть открыто
одновременно.
Поэтому целесообразно реализовать
механизм соединения ADO через специальный компонент - TADOConnection. Этот
компонент открывает соединение, также заданное свойством Connectionstring, и
предоставляет разработчику дополнительные средства управления соединением.
Настройку свойства connectionstring можно осуществлять
с помощью мастера. В начале, нужно указать провайдер данных, в случае
подключения к MS SQl Server - Microsoft OLE DB Provider for SQL Server. Пример показан на рисунке 5.
Рисунок 5 - Выбор провайдера данных
Затем, указываем имя сервера,
указываем параметры для входа в сервер. После чего, становится доступным выбор
каталога базы данных. Пример данного окна настройки показан на рисунке 6.
Рисунок 6 - Настройка подключения
В данном приложении для связи с
базой данных используется технология ADO. Для подключения к БД компонент ADOConnection. Для получения
данных из каждой таблицы используется компонент класса TADOTable. Для создания запросов
к базе данных, например формирования отчётов применяется компонент класса TADOQuery.
На рисунке 7 представлен пример дата
модуля, где настроена связь с БД.
Рисунок 7 - Модуль данных
5. Разработка приложения
Для формирования отчётов требуется
разработать запросы к базе данных. Ниже представлены запросы для всех отчётов.
Для отчёта о графике медосмотров за
период требуется запрос:
«select(varchar,s.sDate,104)
+' '+ isNull(s.Description,'') as [Осмотр]
,isNull(pr.FIO,'Не начинался') as
[Работник]
,case when
isNull(r.Name,'''')='''' then '''' else isNull(r.Name,'''') end as [Причина]
,case when
isNull(pr.FIO,'''')='' then '''' else (case when isNull(p.PassEnd,0)=1 then '' Пройдено'' else
''Не пройдено'' end)
end as [Пройдено]Schedule
sjoin Pass p on p.Schedule=s.IDjoin Personal pr on pr.ID=p.Personaljoin Reason
r on r.ID=p.Reason».
Для отчёта о графике проверок за
период требуется запрос:
«select(varchar,s.sDate,104)
+' '+ isNull(s.Description,'') as [Проверка]
,isNull(pr.FIO,'Не начинался') as
[Работник]
,case when
isNull(r.Name,'''')='''' then '''' else isNull(r.Name,'''') end as [Причина]
,case when
isNull(pr.FIO,'''')='' then '''' else (case when isNull(p.PassEnd,0)=1 then '' Пройдено'' else
''Не пройдено'' end)
end as [Пройдено]Schedule
sjoin Pass p on p.Schedule=s.IDjoin Personal pr on pr.ID=p.Personaljoin Reason
r on r.ID=p.Reason».
Для отчёта о инцидентах с травмами
за период требуется запрос:
«cast(i.ID as
varchar(5))+'' ''+i.Name+'' ''+ti.Name as [Инцидент]
,r.Name+'' ''+p.FIO as [Участник]Incident
ijoin actor a on a.Incident = i.IDjoin Personal p on p.ID=a.Personaljoin Role r
on r.ID=a.Rolejoin TypeIncident ti on ti.ID=i.TypeIncident(i.sDate between :sdt
and :edt) and (isNull(i.Travma,0)=0)
order by i.sDate».
Для отчёта о инцидентах по работнику
за период требуется запрос:
«select.ID as [Номер]
,i.Name as [Название]
,ti.Name as [Тип]
,r.Name as [Роль]Incident ijoin
actor a on a.Incident = i.IDjoin Personal p on p.ID=a.Personaljoin [Role] r on
r.ID=a.Rolejoin TypeIncident ti on ti.ID=i.TypeIncident(a.Personal=:pr) and
(i.sDate between :sdt and :edt) by i.sDate».
На рисунке 8 представлено главное
окно, разработанное в среде Delphi. В верхней части окна расположена таблица инцидентов. Под ней
расположены поля управления данными. Ниже расположена таблица участников
инцидентов.
Рисунок 8 - Главное окно
Для редактирования списка участников требуется в
нижней таблице вызвать всплывающее меню и выбрать пункт добавить. Откроется
окно управление участниками - рисунок 9.
Рисунок 9 - Окно управление
участниками
Для управления данными о медосмотрах
требуется в главном меню выбрать пункты: «Основное» - «Медосмотр». Откроется
окно, которое изображено на рисунке 10.
Рисунок 10 - Окно медосмотров
Окно так же, как и главное разделено
на три отдела: главная таблица медосмотров, поля данных медосмотра, таблица
прохождения. Для редактирования прохождения требуется, как и в главном окне,
вызвать всплывающее меню и выбрать пункт «Добавить». Откроется окно,
представленное на рисунке 11.
Рисунок 11 - Окно прохождения
Рассмотрим окно управления данными о
предписаниях - рисунок 12. Окно выдержано в том же стиле.
Рисунок 12 - Окно предписаний
В таком же стиле оформлено окно
редактирования списка инцидентов, на основании которых было составлено
предписание - рисунок 13.
Рисунок 13 - Список инцидентов
6. Листинг программы
unit uMain;
interface
Winapi.Windows,
Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics,
Vcl.Controls, Vcl.Forms,
Vcl.Dialogs, Data.DB, Vcl.Menus, Vcl.Grids,
Vcl.DBGrids,
Vcl.DBCtrls, Vcl.StdCtrls, Vcl.ComCtrls, Vcl.Mask, Vcl.ExtCtrls;
TfrmMain = class(TForm)
pnlMain: TPanel;
pnlGrid: TPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
btnCancel: TButton;
btnSave: TButton;
pnlLeft: TPanel;
pnlRight: TPanel;
pmLeft: TPopupMenu;
pmRight: TPopupMenu;
edtFIO: TDBEdit;
dtpBirthdate:
TDateTimePicker;
cbWork: TDBCheckBox;
edtPhone: TDBEdit;
cbSpec:
TDBLookupComboBox;
grdLeft: TDBGrid;
grdRight: TDBGrid;
mm: TMainMenu;
imWorker: TMenuItem;
imEdit: TMenuItem;
N5: TMenuItem;
imSearch: TMenuItem;
imLibrary: TMenuItem;
imLibrary1: TMenuItem;
imLibrary3: TMenuItem;
imLibrary4: TMenuItem;
N14: TMenuItem;
imItem: TMenuItem;
imReport: TMenuItem;
imSettings: TMenuItem;
imLinking: TMenuItem;
imReport1: TMenuItem;
imReport2: TMenuItem;
imReport3: TMenuItem;
imAddLeft: TMenuItem;
imEditLeft: TMenuItem;
imDeleteLeft: TMenuItem;
imAddRight: TMenuItem;
imEditRight: TMenuItem;
imDeleteRight:
TMenuItem;
Label6: TLabel;
edtNomer: TDBEdit;
cbCeh: TDBLookupComboBox;
Label5: TLabel;
imCeh2: TMenuItem;
cbSex: TDBComboBox;
edtRazr: TDBEdit;
Label7: TLabel;
Label8: TLabel;
procedure
FormShow(Sender: TObject);
procedure
pmLeftPopup(Sender: TObject);
procedure
pmRightPopup(Sender: TObject);
procedure
btnSaveClick(Sender: TObject);
procedure
imEditClick(Sender: TObject);
procedure
btnCancelClick(Sender: TObject);
procedure
imAddLeftClick(Sender: TObject);
procedure
imEditLeftClick(Sender: TObject);
procedure
imAddRightClick(Sender: TObject);
procedure
imEditRightClick(Sender: TObject);
procedure
imDeleteLeftClick(Sender: TObject);
procedure
imDeleteRightClick(Sender: TObject);
procedure
imSearchClick(Sender: TObject);
procedure
imItemClick(Sender: TObject);
procedure
imLibraryClick(Sender: TObject);
procedure
imLinkingClick(Sender: TObject);
procedure
imReportClic(Sender: TObject);
procedure
FormClose(Sender: TObject; var Action: TCloseAction);
private
procedure ModeView(mode:
boolean); //true - Veiw; false - Modify
public
{ Public declarations }
end;
frmMain: TfrmMain;
{$R *.dfm}
uDM, Search, uItem,
uList, uVzisk, uLibrary, uReport;
//Дополнительные
функцииTfrmMain.btnCancelClick(Sender: TObject);
DM.tblWorker.Cancel;
ModeView(true);;
TfrmMain.btnSaveClick(Sender:
TObject);
DM.tblWorker.FieldByName('ДР').AsDateTime:=dtpBirthdate.DateTime;
DM.tblWorker.Post;
ModeView(true);;
TfrmMain.FormClose(Sender:
TObject; var Action: TCloseAction);
frmSearch.Show;
self.Free;;
TfrmMain.FormShow(Sender:
TObject);
ModeView(Tag=0);
if Tag=1 then
DM.tblWorker.Append
else
dtpBirthDate.DateTime:=DM.tblWorker.FieldByName('ДР').AsDateTime;
imSettings.Visible:=DM.user.admin;
imLibrary.Visible:=not
DM.user.gost;
imWorker.Visible:=not
DM.user.gost;;
TfrmMain.imAddLeftClick(Sender:
TObject);
frm: TfrmList;
Application.CreateForm(TfrmList,
frm);
DM.tblList.Append;
frm.Tag:=0;
frm.ShowModal;
DM.tblList.Refresh;;
TfrmMain.imAddRightClick(Sender:
TObject);
frm: TfrmVzisk;
Application.CreateForm(TfrmVzisk,
frm);
DM.tblVzisk.Append;
frm.Tag:=0;
frm.ShowModal;
DM.tblVzisk.Refresh;;
TfrmMain.imDeleteLeftClick(Sender:
TObject);
if MessageDlg('Вы
действительно хотите удалить запись?',mtWarning,mbOkCancel,0)=mrOk then
DM.tblList.Delete;;
TfrmMain.imDeleteRightClick(Sender:
TObject);
if MessageDlg('Вы действительно
хотите удалить запись?',mtWarning,mbOkCancel,0)=mrOk then
DM.tblVzisk.Delete;;
TfrmMain.imEditClick(Sender:
TObject);
ModeView(false);
DM.tblWorker.Edit;;
TfrmMain.imEditLeftClick(Sender:
TObject);
frm: TfrmList;
Application.CreateForm(TfrmList,
frm);
DM.tblList.Edit;
frm.Tag:=1;
frm.ShowModal;;
TfrmMain.imEditRightClick(Sender:
TObject);
frm: TfrmVzisk;
Application.CreateForm(TfrmVzisk,
frm);
DM.tblVzisk.Edit;
frm.Tag:=1;
frm.ShowModal;;TfrmMain.imLibraryClick(Sender:
TObject);
frm: TfrmLibrary;
Application.CreateForm(TfrmLibrary,frm);
frm.LoadLibrary((Sender
as TMenuItem).Tag);
frm.ShowModal;
frm.Free;;TfrmMain.imReportClic(Sender:
TObject);
frm: TfrmReport;
Application.CreateForm(TfrmReport,frm);
frm.Tag:=(Sender as
TMenuItem).Tag;
frm.ShowModal;
frm.Free;;TfrmMain.imLinkingClick(Sender:
TObject);
DM.SettingLink;;TfrmMain.imItemClick(Sender:
TObject);
frm: TfrmItem;
Application.CreateForm(TfrmItem,
frm);
frm.ShowModal;;TfrmMain.imSearchClick(Sender:
TObject);
frmSearch.Show;
self.Free;;TfrmMain.ModeView(mode:
boolean);//true - Veiw; false - Modify
pnlGrid.Enabled:= mode;
pnlMain.Enabled:= not
mode;
btnSave.Visible:= not
mode;
btnCancel.Visible:= not
mode;;TfrmMain.pmLeftPopup(Sender: TObject);
if DM.user.gost then
begin
imAddLeft.Visible:=false;
imEditLeft.Visible:=false;
imDeleteLeft.Visible:=false;
end
else
begin
imAddLeft.Enabled:=edtNomer.Text<>'';
imEditLeft.Enabled:=grdLeft.DataSource.DataSet.RecordCount>0;
imDeleteLeft.Enabled:=grdLeft.DataSource.DataSet.RecordCount>0;
end;;TfrmMain.pmRightPopup(Sender:
TObject);
if DM.user.gost then
begin
imAddRight.Visible:=false;
imEditRight.Visible:=false;
imDeleteRight.Visible:=false;
end
else
begin
imAddRight.Enabled:=edtNomer.Text<>'';
imEditRight.Enabled:=grdRight.DataSource.DataSet.RecordCount>0;
imDeleteRight.Enabled:=grdRight.DataSource.DataSet.RecordCount>0;
end;
end;.
Дамп базы данных
USE [master]
/****** Object: Database
[TB] Script Date: 05/14/2017 11:12:25 ******/DATABASE [TB] ON PRIMARY
( NAME = N'TB', FILENAME
= N'c:\Program Files\Microsoft SQL
Server\MSSQL10_50.SQLEXPRESS2008\MSSQL\DATA\TB.mdf' , SIZE = 3072KB , MAXSIZE =
UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
( NAME = N'TB_log',
FILENAME = N'c:\Program Files\Microsoft SQL
Server\MSSQL10_50.SQLEXPRESS2008\MSSQL\DATA\TB_1.ldf' , SIZE = 1024KB , MAXSIZE
= 2048GB , FILEGROWTH = 10%)DATABASE [TB] SET COMPATIBILITY_LEVEL = 100(1 =
FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))[TB].[dbo].[sp_fulltext_database]
@action = 'enable'DATABASE [TB] SET ANSI_NULL_DEFAULT OFFDATABASE [TB] SET
ANSI_NULLS OFFDATABASE [TB] SET ANSI_PADDING OFFDATABASE [TB] SET ANSI_WARNINGS
OFFDATABASE [TB] SET ARITHABORT OFFDATABASE [TB] SET AUTO_CLOSE OFFDATABASE
[TB] SET AUTO_CREATE_STATISTICS ONDATABASE [TB] SET AUTO_SHRINK OFFDATABASE
[TB] SET AUTO_UPDATE_STATISTICS ONDATABASE [TB] SET CURSOR_CLOSE_ON_COMMIT
OFFDATABASE [TB] SET CURSOR_DEFAULT GLOBALDATABASE [TB] SET
CONCAT_NULL_YIELDS_NULL OFFDATABASE [TB] SET NUMERIC_ROUNDABORT OFFDATABASE
[TB] SET QUOTED_IDENTIFIER OFFDATABASE [TB] SET RECURSIVE_TRIGGERS OFFDATABASE
[TB] SET DISABLE_BROKERDATABASE [TB] SET AUTO_UPDATE_STATISTICS_ASYNC
OFFDATABASE [TB] SET DATE_CORRELATION_OPTIMIZATION OFFDATABASE [TB] SET
TRUSTWORTHY OFFDATABASE [TB] SET ALLOW_SNAPSHOT_ISOLATION OFFDATABASE [TB] SET
PARAMETERIZATION SIMPLEDATABASE [TB] SET READ_COMMITTED_SNAPSHOT OFFDATABASE
[TB] SET HONOR_BROKER_PRIORITY OFFDATABASE [TB] SET READ_WRITEDATABASE [TB] SET
RECOVERY SIMPLEDATABASE [TB] SET MULTI_USERDATABASE [TB] SET PAGE_VERIFY
CHECKSUMDATABASE [TB] SET DB_CHAINING OFF[TB]
/****** Object: Table
[dbo].[Department] Script Date: 05/14/2017 11:12:26 ******/ANSI_NULLS
ONQUOTED_IDENTIFIER ONANSI_PADDING ONTABLE [dbo].[Department](
[ID] [int] IDENTITY(1,1)
NOT NULL,
[Name] [varchar](50) NOT
NULL,
CONSTRAINT
[PK_Department] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON
[PRIMARY]ANSI_PADDING OFF
/****** Object: Table
[dbo].[TypeIncident] Script Date: 05/14/2017 11:12:26 ******/ANSI_NULLS
ONQUOTED_IDENTIFIER ONANSI_PADDING ONTABLE [dbo].[TypeIncident](
[ID] [int] IDENTITY(1,1)
NOT NULL,
[Name] [varchar](50) NOT
NULL,
CONSTRAINT
[PK_TypeIncident] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON
[PRIMARY]ANSI_PADDING OFF
/****** Object: Table
[dbo].[Schedule] Script Date: 05/14/2017 11:12:26 ******/ANSI_NULLS
ONQUOTED_IDENTIFIER ONANSI_PADDING ONTABLE [dbo].[Schedule](
[ID] [int] IDENTITY(1,1)
NOT NULL,
[TypeSched] [int] NOT
NULL,
[sDate] [datetime] NOT
NULL,
[Description]
[varchar](100) NULL,
CONSTRAINT [PK_Schedule]
PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON
[PRIMARY]ANSI_PADDING OFF
/****** Object: Table
[dbo].[Role] Script Date: 05/14/2017 11:12:26 ******/ANSI_NULLS ONQUOTED_IDENTIFIER
ONANSI_PADDING ONTABLE [dbo].[Role](
[ID] [int] IDENTITY(1,1)
NOT NULL,
[Name] [varchar](50) NOT
NULL,
CONSTRAINT [PK_Role]
PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON
[PRIMARY]ANSI_PADDING OFF
/****** Object: Table
[dbo].[Reason] Script Date: 05/14/2017 11:12:26 ******/ANSI_NULLS ONQUOTED_IDENTIFIER
ONANSI_PADDING ONTABLE [dbo].[Reason](
[ID] [int] IDENTITY(1,1)
NOT NULL,
[Name] [varchar](50) NOT
NULL,
CONSTRAINT [PK_Reason]
PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON
[PRIMARY]ANSI_PADDING OFF
/****** Object: Table
[dbo].[Post] Script Date: 05/14/2017 11:12:26 ******/ANSI_NULLS
ONQUOTED_IDENTIFIER ONANSI_PADDING ONTABLE [dbo].[Post](
[ID] [int] IDENTITY(1,1)
NOT NULL,
[Name] [varchar](50) NOT
NULL,
CONSTRAINT [PK_Post]
PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON
[PRIMARY]ANSI_PADDING OFF
/****** Object: Table
[dbo].[Personal] Script Date: 05/14/2017 11:12:26 ******/ANSI_NULLS
ONQUOTED_IDENTIFIER ONANSI_PADDING ONTABLE [dbo].[Personal](
[ID] [int] IDENTITY(1,1)
NOT NULL,
[FIO] [varchar](60) NOT
NULL,
[Birthdate] [datetime]
NOT NULL,
[Sex] [char](1) NOT
NULL,
[Phone] [varchar](15)
NOT NULL,
[Address] [varchar](100)
NULL,
[SNILS] [varchar](12)
NULL,
[Passport] [varchar](10)
NULL,
CONSTRAINT [PK_Personal]
PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON
[PRIMARY]ANSI_PADDING OFF
/****** Object: Table
[dbo].[Pass] Script Date: 05/14/2017 11:12:26 ******/ANSI_NULLS ONQUOTED_IDENTIFIER
ONTABLE [dbo].[Pass](
[ID] [int] IDENTITY(1,1)
NOT NULL,
[Schedule] [int] NOT
NULL,
[Personal] [int] NOT
NULL,
[Reason] [int] NULL,
[PassEnd] [bit] NULL,
CONSTRAINT [PK_Pass]
PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
/****** Object: Table
[dbo].[Job] Script Date: 05/14/2017 11:12:26 ******/ANSI_NULLS
ONQUOTED_IDENTIFIER ONTABLE [dbo].[Job](
[ID] [int] IDENTITY(1,1)
NOT NULL,
[Personal] [int] NOT
NULL,
[Department] [int] NOT
NULL,
[Post] [int] NOT NULL,
[EndJob] [bit] NULL,
CONSTRAINT [PK_Job]
PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
[ID] [int] IDENTITY(1,1)
NOT NULL,
[sDate] [datetime] NOT
NULL,
[Description]
[varchar](100) NULL,
[Personal] [int] NOT
NULL,
[EndInstruction] [bit]
NULL,
CONSTRAINT
[PK_Instruction] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON
[PRIMARY]ANSI_PADDING OFF
/****** Object: Table
[dbo].[Incident] Script Date: 05/14/2017 11:12:26 ******/ANSI_NULLS
ONQUOTED_IDENTIFIER ONANSI_PADDING ONTABLE [dbo].[Incident](
[ID] [int] IDENTITY(1,1)
NOT NULL,
[Name] [varchar](50) NOT
NULL,
[TypeIncident] [int] NOT
NULL,
[sDate] [datetime] NOT
NULL,
[Description] [text]
NULL,
[Travma] [bit] NULL,
CONSTRAINT [PK_Incident]
PRIMARY KEY CLUSTERED
([ID] ASC
)WITH (PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
TEXTIMAGE_ON [PRIMARY]ANSI_PADDING OFF
/****** Object: Table
[dbo].[Actor] Script Date: 05/14/2017 11:12:26 ******/ANSI_NULLS
ONQUOTED_IDENTIFIER ONTABLE [dbo].[Actor](
[ID] [int] IDENTITY(1,1)
NOT NULL,
[Incident] [int] NOT
NULL,
[Personal] [int] NOT
NULL,
[Role] [int] NOT NULL,
CONSTRAINT [PK_Actor]
PRIMARY KEY CLUSTERED
([ID] ASC
)WITH (PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
/****** Object: Table
[dbo].[ListIncident] Script Date: 05/14/2017 11:12:26 ******/ANSI_NULLS
ONQUOTED_IDENTIFIER ONTABLE [dbo].[ListIncident](
[ID] [int] IDENTITY(1,1)
NOT NULL,
[Instruction] [int] NOT
NULL,
[Incident] [int] NOT
NULL,
CONSTRAINT
[PK_ListIncident] PRIMARY KEY CLUSTERED
([ID] ASC
)WITH (PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
/****** Object:
ForeignKey [FK_Pass_Personal] Script Date: 05/14/2017 11:12:26 ******/TABLE
[dbo].[Pass] WITH CHECK ADD CONSTRAINT [FK_Pass_Personal] FOREIGN
KEY([Personal])[dbo].[Personal] ([ID])UPDATE CASCADEDELETE CASCADETABLE
[dbo].[Pass] CHECK CONSTRAINT [FK_Pass_Personal]
/****** Object:
ForeignKey [FK_Pass_Reason] Script Date: 05/14/2017 11:12:26 ******/TABLE [dbo].[Pass]
WITH CHECK ADD CONSTRAINT [FK_Pass_Reason] FOREIGN KEY([Reason])[dbo].[Reason]
([ID])UPDATE CASCADETABLE [dbo].[Pass] CHECK CONSTRAINT [FK_Pass_Reason]
/****** Object:
ForeignKey [FK_Pass_Schedule] Script Date: 05/14/2017 11:12:26 ******/TABLE [dbo].[Pass]
WITH CHECK ADD CONSTRAINT [FK_Pass_Schedule] FOREIGN
KEY([Schedule])[dbo].[Schedule] ([ID])UPDATE CASCADEDELETE CASCADETABLE
[dbo].[Pass] CHECK CONSTRAINT [FK_Pass_Schedule]
/****** Object:
ForeignKey [FK_Job_Department] Script Date: 05/14/2017 11:12:26 ******/TABLE
[dbo].[Job] WITH CHECK ADD CONSTRAINT [FK_Job_Department] FOREIGN
KEY([Department])[dbo].[Department] ([ID])UPDATE CASCADEDELETE CASCADETABLE
[dbo].[Job] CHECK CONSTRAINT [FK_Job_Department]
/****** Object:
ForeignKey [FK_Job_Personal] Script Date: 05/14/2017 11:12:26 ******/TABLE
[dbo].[Job] WITH CHECK ADD CONSTRAINT [FK_Job_Personal] FOREIGN
KEY([Personal])[dbo].[Personal] ([ID])UPDATE CASCADEDELETE CASCADETABLE
[dbo].[Job] CHECK CONSTRAINT [FK_Job_Personal]
/****** Object:
ForeignKey [FK_Job_Post] Script Date: 05/14/2017 11:12:26 ******/TABLE
[dbo].[Job] WITH CHECK ADD CONSTRAINT [FK_Job_Post] FOREIGN
KEY([Post])[dbo].[Post] ([ID])UPDATE CASCADEDELETE CASCADETABLE [dbo].[Job]
CHECK CONSTRAINT [FK_Job_Post]
/****** Object:
ForeignKey [FK_Instruction_Personal] Script Date: 05/14/2017 11:12:26
******/TABLE [dbo].[Instruction] WITH CHECK ADD CONSTRAINT
[FK_Instruction_Personal] FOREIGN KEY([Personal])[dbo].[Personal] ([ID])UPDATE
CASCADEDELETE CASCADETABLE [dbo].[Instruction] CHECK CONSTRAINT
[FK_Instruction_Personal]
/****** Object:
ForeignKey [FK_Incident_TypeIncident] Script Date: 05/14/2017 11:12:26
******/TABLE [dbo].[Incident] WITH CHECK ADD CONSTRAINT
[FK_Incident_TypeIncident] FOREIGN KEY([TypeIncident])[dbo].[TypeIncident]
([ID])UPDATE CASCADEDELETE CASCADETABLE [dbo].[Incident] CHECK CONSTRAINT
[FK_Incident_TypeIncident]
/****** Object:
ForeignKey [FK_Actor_Incident] Script Date: 05/14/2017 11:12:26 ******/TABLE
[dbo].[Actor] WITH CHECK ADD CONSTRAINT [FK_Actor_Incident] FOREIGN KEY([Incident])[dbo].[Incident]
([ID])UPDATE CASCADEDELETE CASCADETABLE [dbo].[Actor] CHECK CONSTRAINT
[FK_Actor_Incident]
/****** Object:
ForeignKey [FK_Actor_Personal] Script Date: 05/14/2017 11:12:26 ******/TABLE
[dbo].[Actor] WITH CHECK ADD CONSTRAINT [FK_Actor_Personal] FOREIGN
KEY([Personal])[dbo].[Personal] ([ID])UPDATE CASCADEDELETE CASCADETABLE
[dbo].[Actor] CHECK CONSTRAINT [FK_Actor_Personal]
/****** Object:
ForeignKey [FK_Actor_Role] Script Date: 05/14/2017 11:12:26 ******/TABLE
[dbo].[Actor] WITH CHECK ADD CONSTRAINT [FK_Actor_Role] FOREIGN
KEY([Role])[dbo].[Role] ([ID])UPDATE CASCADEDELETE CASCADETABLE [dbo].[Actor]
CHECK CONSTRAINT [FK_Actor_Role]
/****** Object:
ForeignKey [FK_ListIncident_Incident] Script Date: 05/14/2017 11:12:26
******/TABLE [dbo].[ListIncident] WITH CHECK ADD CONSTRAINT
[FK_ListIncident_Incident] FOREIGN KEY([Incident])[dbo].[Incident] ([ID])UPDATE
CASCADEDELETE CASCADETABLE [dbo].[ListIncident] CHECK CONSTRAINT
[FK_ListIncident_Incident]
/****** Object:
ForeignKey [FK_ListIncident_Instruction] Script Date: 05/14/2017 11:12:26
******/TABLE [dbo].[ListIncident] WITH CHECK ADD CONSTRAINT
[FK_ListIncident_Instruction] FOREIGN KEY([Instruction])[dbo].[Instruction]
([ID])UPDATE CASCADEDELETE CASCADETABLE [dbo].[ListIncident] CHECK CONSTRAINT
[FK_ListIncident_Instruction]
Заключение
В данной курсовой работе требовалось
спроектировать АРМ инженера по ТБ.
Определены функции приложения:
- учёт персонала;
- учёт травм и
несчастных случаев;
- формирование
графиков медосмотров;
- учёт результатов
медосмотров;
- учёт результатов
тестирования персонала;
- учёт нарушений
охраны труда;
- формирование
отчётов.
В проектной главе была произведена
постановка задачи. Выведены сущности, которые составляют базу данных системы:
персонал; график; инцидент; предписание; прохождение; работа; участник; список.
Построена инфологическая модель базы
данных, рассмотрены связи между сущностями.
Спроектирована физическая модель
БД, база данных состоит из следующих таблиц: Post; Department;
Job; Personal; Schedule; Reason; Pass; Incident; TypeIncident; Actor; Role;
Instruction; ListIncident.
Построены запросы. Создан интерфейс
пользователя.
Литература
1. Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж. Приемы
объектно-ориентированного проектирования. Паттерны проектирования. - СПб.:
Питер, 2015. - 368с.
. Грофф Д., Вайнберг П., Оппель Э. SQL. Полное руководство.
- СПб.: Вильямс, 214. - 960с.
. Илюшечкин В. Основы использования и проектирования баз
данных. Учебник. - М.:Юрайт, 2014. - 214с.
. Коваленко В. Проектирование информационных систем. /
Коваленко В. - М.: Форум, 2012. - 320с.
. Кузнецов С. Базы данных. - М.: Academia, 2012. - 496с.
. Основы использования и проектирования баз данных. Учебник
/ Илюшечкин В. - М.: Юрайт, 2014. - 214с.
. Осипов Д. Delphi. Программирование для Windows, OS X, iOS
и Android. - СПб.: БХВ-Петербург, 2016. - 310с.