Курсовая работа: Методология проектирования баз данных 2 2
Название: Методология проектирования баз данных 2 2 Раздел: Рефераты по информатике Тип: курсовая работа | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Калужский филиал Государственного образовательного учреждения высшего профессионального образования «Московский государственный технический университет им. Н.Э.Баумана» Кафедра ЭИУ 3-К "ЭИУК" Методология проектирования баз данных Расчётно-пояснительная записка к курсовой работе по курсу Проектирование алгоритмов и программного обеспечения г. Калуга 2007 Содержание 1. Детальная постановка задачи 2. Концептуальное проектирование 3. Логическое проектирование 4. Физическое проектирование. 5. Физическая реализация Список используемой литературы 1. Детальная постановка задачи Существует предприятие, занимающееся производством компонентов для систем кабельного и спутникового телевидения. Предприятие состоит из нескольких подразделений, каждое из которых имеет свой номер и название и ФИО директора подразделения. Принципиальное значение для данной задачи имеет служба качества. В службе качества выделяется ведущий специалист, который является директором этой службы. Это единственный человек на предприятии, который имеет право формировать электронные документы, вносить в них изменения, удалять их. Все остальные работники (пользователи) независимо от принадлежности к тому или иному подразделению имеют право только просматривать электронные документы в режиме чтения. Все документы делятся на две категории: - нормативные документы системы менеджмента качества (СМК) - внутренние документы СМК Перечень документов и форма их составления являются прерогативой директора службы качества. Каждый документ имеет реквизиты: номер по классификатору, наименование, дату принятия, тематику, статус, дату изменения, характер изменений (если они были). Необходимо иметь ввиду, что каждому номеру документа по классификатору в категории нормативных документов физически может соответствовать несколько документов (формат ****.doc). Удаленные документы должны помещаться на хранение в электронный архив на неопределенный срок. Очищать этот архив может только директор службы качества. Ведется протокол работы пользователей с обеими категориями документов, в котором отражается имя документа, к которому осуществлялся доступ, дата доступа, фамилия работника (имя пользователя). Директор службы качества проводит в подразделениях внутренние проверки системы качества на предмет соответствия работы этих подразделений требованиям нормативной и внутренней документации СМК. Результаты проверок содержат следующие данные: - проверяемое подразделение - номер проверки - дата проверки - описание несоответствия - вид несоответствия (значительное, незначительное) Типовые операции: - добавление документа - редактирование документа - описание внесенных изменений - удаление документа (добавление в электронный архив) - удаление документов из электронного архива - добавление/удаление результатов внутренних проверок СМК - подготовка отчета о результатах внутренних проверок СМК по форме:
- подготовка отчета о работе пользователей с документами СМК по форме:
2. Концептуальное проектирование Определение типов сущности: - подразделение - Директор службы качества - работники - электронный документ - нормативный документ СМК[1] - внутренний документ СМК - протокол работы - проверки СМК Определение типов связи: - Директор службы качества работает с электронными документами - Электронные документы включают в себя нормативные документы СМК - Электронные документы включают в себя внутренние документы СМК - Документы учитываются в протоколе работы - Директор службы качества проводит проверки подразделений - Подразделения участвуют в проверках - Работники фиксируются в протоколе работы - Работники приписаны к подразделениям Таблица №1 Типы сущности
Таблица №2 Типы связей
Таблица №3 Атрибуты
Таблица №4 Домены атрибутов
Таблица №5 Ключи
Специализация / генерализация Преобразуем сущность «электронный документ» в суперкласс. Подклассами будут являться «нормативный документ СМК», «внутренний документ СМК». Подклассы не пересекаются, участие суперкласса полное. ER – модель
3. Логическое проектирование Предполагается использование реляционной модели данных. Необходимо избавиться от структур концептуальной модели, не реализуемых в рамках реляционной модели. Удаляем связь «Директор службы качества работает с электронными документами», т.к. эта связь является транзакцией. Скорректированная ER- модель
Определение набора отношений Объединим подклассы «нормативный документ СМК» и «внутренний документ СМК» в одно отношение «Электронный документ», т.к. все экземпляры сущностей обоих подклассов имеют одинаковые атрибуты. Также для этого отношения необходимо определить новый атрибут «вид документа» для того, чтобы идентифицировать, к какому подклассу относится документ. 1. Директор службы качества (Ф.И.О., имя пользователя, дата вступления в должность) ПК : имя пользователя 2. Проверки (№ проверки, дата, описание несоответствия, вид несоответствия, Ф.И.О. , № подразделения) ПК: № проверки ВК: имя пользователя директора службы качества Директор службы качества ВК: номер подразделения Подразделения 3. Подразделения (№ подразделения, название, Ф.И.О. директора подразделения) ПК: номер 4. Работники (Ф.И.О., имя пользователя, номер подразделения) ПК: имя пользователя ВК : номер Подразделения 5. Протокол работы (наименование документа, номер по классификатору, дата-время доступа, Ф.И.О., имя пользователя) ПК: дата-время ВК: наименование док-та + номер по классификатору Электронные документы ВК: имя пользователя Работники 6. Электронные документы (наименование документа, номер по классификатору, дата принятия, дата изменения, тематика, статус, характер изменений, вид документа) ПК: наименование док-та + номер по классификатору Проверка отношений на соответствие требованиям нормализации: 2 НФ 1. Ф.И.О. дата вступления в должность Ф.И.О. имя пользователя имя пользователя Ф.И.О. имя пользователя дата вступления в должность 2. № проверки дата проверки № проверки описание несоответствия № проверки вид несоответствия 3. № название подразделения № Ф.И.О. директора подразделения название подразделения № название подразделения Ф.И.О. директора подразделения 4. Ф.И.О. имя пользователя имя пользователя Ф.И.О. 5. собственный атрибут только один – «дата-время» 6. Наименование документа + номер по классификатору дата принятия Наименование документа + номер по классификатору тематика Наименование документа + номер по классификатору статус Наименование документа + номер по классификатору характер изменений Наименование документа + номер по классификатору дата изменения 3 НФ Транзитивные зависимости отсутствуют, значит, отношения соответствуют 3НФ. НФБК В отношениях 1-5 ПК состоит из одного атрибута, а в отношении 6 отсутствуют несколько составных потенциальных ключей, пересекающихся по набору атрибутов. Следовательно, все отношения соответствуют НФБК, что гарантирует отсутствие проблем обновления. Полученная ER-модель (стр. 15) позволяет реализовать все транзакции, изложенные в постановке задачи. Требования, обеспечивающие ссылочную целостность 1) Для всех первичных ключей устанавливается значение NOTNULL. 2) Атрибуты, которые допускают NULL: - Отношение «Проверки» Атрибуты: описание несоответствия, вид несоответствия - Отношение «Протокол работы» Атрибуты, которые являются ВК: ФИО, Наименование документа + номер по классификатору - Отношение «Электронные документы» Атрибуты: Дата изменения, статус, тематика, характер изменения 3) ДлявсехВК: ON UPDATE CASCADE ON DELETE NO ACTION Кроме ВК в отношении «Протокол работы»: ON UPDATE CASCADE ON DELETE CASCADE 4) Бизнес-правила: Директор службы качества имеет полный доступ ко всей информации в БД, все остальные работники имеют ограниченный доступ, а именно, просмотр документов в режиме чтения. 4. Физическое проектирование Директор службы качества
Проверки
Подразделения
Работники
Протокол работы
Электронные документы
Архив удаленных документов
Создание вторичных индексов: Таблица «Работники»: поле «Имя пользователя» Таблица «Электронные документы»: поле («Наименование» + «№ по классификатору») Доступ: Директор службы качества и администратор – полный доступ, а все остальные – просмотр документов в режиме чтения. 5. Физическая реализация Серверная часть /********************************************************/ /** Generated by IBExpert 2004.01.22 23.05.2004 20:38:17 ****/ /********************************************************/ SET SQL DIALECT 3; SET NAMES WIN1251; CREATE DATABASE 'Document:C:\Program Files\Borland\InterBase\bin\ELECTRDOC.GDB' USER 'SYSDBA' PASSWORD 'administrator' PAGE_SIZE 1024 DEFAULT CHARACTER SET WIN1251; /*********************************************************/ /**** Generators ****/ /*********************************************************/ CREATE GENERATOR ARHIVN; SET GENERATOR ARHIVN TO 16; CREATE GENERATOR DOCN; SET GENERATOR DOCN TO 17; CREATE GENERATOR PODRAZDN; SET GENERATOR PODRAZDN TO 4; CREATE GENERATOR PROTOCOLN; SET GENERATOR PROTOCOLN TO 52; CREATE GENERATOR PROVERKIN; SET GENERATOR PROVERKIN TO 13; CREATE GENERATOR RABN; SET GENERATOR RABN TO 19; /*************************************************************//**** Exceptions ****/ /******************************************************/ CREATE EXCEPTION NODELETE 'Нельзяудалитьданногоработника'; CREATE EXCEPTION NOLOGIN 'Имя пользователя должно быть уникальным'; SET TERM ^ ; /************************************************************/ /**** Stored Procedures ****/ /************************************************************/ CREATE PROCEDURE ADD_DOCUMENT ( NKLASS VARCHAR(7), TEMA VARCHAR(30), DATA DATE, VID VARCHAR(15), NAME VARCHAR(70)) AS BEGIN EXIT; END^ CREATE PROCEDURE ADDDIRECTOR ( DATA DATE, LOGIN VARCHAR(20), FAMILY VARCHAR(20)) AS BEGIN EXIT; END^ CREATE PROCEDURE ADDPODRAZDELENIE ( NAZV VARCHAR(70), FIO VARCHAR(20)) AS BEGIN EXIT; END^ CREATE PROCEDURE ADDPROTOCOL ( NUMDOC INTEGER) AS BEGIN EXIT; END^ CREATE PROCEDURE ADDPROVERKI ( NAZVPODR VARCHAR(70), FIO VARCHAR(20), OPISANIE VARCHAR(1000), VID VARCHAR(15), DATA DATE) AS BEGIN EXIT; END^ CREATE PROCEDURE CLEARARHIV AS BEGIN EXIT; END^ CREATE PROCEDURE CLEARPROTOCOL AS BEGIN EXIT; END^ CREATE PROCEDURE DELETEDIRECTOR ( FIO VARCHAR(20)) AS BEGIN EXIT; END^ CREATE PROCEDURE DELETEDOC ( NUM INTEGER) AS BEGIN EXIT; END^ CREATE PROCEDURE DELETEPODRAZD ( NOMER INTEGER) AS BEGIN EXIT; END^ CREATE PROCEDURE DELETEPROVERKA ( NPROVERKI INTEGER) AS BEGIN EXIT; END^ CREATE PROCEDURE DELETERABOTNIK ( NUM INTEGER) AS BEGIN EXIT; END^ CREATE PROCEDURE EDITPROVERKI ( OPISANIE VARCHAR(1000), NPROV INTEGER, VID VARCHAR(15), NAZVPODR VARCHAR(70), FIO VARCHAR(20), DATA DATE) AS BEGIN EXIT; END^ CREATE PROCEDURE NEW_PROCEDURE ( NAZV VARCHAR(70), LOGIN VARCHAR(20), FIO VARCHAR(20)) AS BEGIN EXIT; END^ CREATE PROCEDURE UPDATEDOCUMENT ( IZMEN VARCHAR(30), TEMA VARCHAR(30), NUM INTEGER) AS BEGIN EXIT; END^ SET TERM ; ^/****************************************************************/ /**** Tables ****/ /************************************************************/ CREATE TABLE ARHIVDOC ( NDOC INTEGER NOT NULL, NKLASS VARCHAR(7) NOT NULL, NAIMENDOC VARCHAR(70) NOT NULL, VIDDOC VARCHAR(15) NOT NULL, DATAPRINYATIYA DATE NOT NULL, DATADELETE DATE NOT NULL, TEMATIKA VARCHAR(30), IZMENENIYA VARCHAR(30) ); CREATE TABLE DIRECTOR ( FIO VARCHAR(20) NOT NULL, LOGIN VARCHAR(20) NOT NULL, DATAVSTUPLENIYA DATE NOT NULL ); CREATE TABLE DOCUMENT ( NDOC INTEGER NOT NULL, NKLASS VARCHAR(7) NOT NULL, NAIMENDOC VARCHAR(70) NOT NULL, VIDDOC VARCHAR(15) NOT NULL, DATAPRINYATIYA DATE NOT NULL, DATAIZMEN DATE, STATUS VARCHAR(10), TEMATIKA VARCHAR(30), IZMENENIYA VARCHAR(30) ); CREATE TABLE PODRAZD ( NPODR INTEGER NOT NULL, FIOPODR VARCHAR(20) NOT NULL, NAZVANIE VARCHAR(70) NOT NULL ); CREATE TABLE PROTOCOL ( NUMBER INTEGER NOT NULL, DATA DATE NOT NULL, NRAB INTEGER, NDOC INTEGER, VREMYA TIME NOT NULL ); CREATE TABLE PROVERKI ( NPROVERKI INTEGER NOT NULL, DATA DATE NOT NULL, FIO VARCHAR(20) NOT NULL, NPODR INTEGER NOT NULL, VID VARCHAR(15) , OPISANIE VARCHAR(1000) ); CREATE TABLE RABOTNIK ( NUMBER INTEGER NOT NULL, FIO VARCHAR(20) NOT NULL, LOGIN VARCHAR(20) NOT NULL, NPODR INTEGER NOT NULL);/**************************************************************/ /**** Unique Constraints ****/ /*********************************************************/ ALTER TABLE DOCUMENT ADD CONSTRAINT UNQ_DOCUMENT UNIQUE (NKLASS, NAIMENDOC); ALTER TABLE RABOTNIK ADD CONSTRAINT UNQ_RAB UNIQUE (LOGIN); /************************************************************/ /**** Primary Keys ****/ /************************************************************/ ALTER TABLE ARHIVDOC ADD CONSTRAINT PK_ARHIVDOC PRIMARY KEY (NDOC); ALTER TABLE DIRECTOR ADD CONSTRAINT PK_DIRECTOR PRIMARY KEY (FIO); ALTER TABLE DOCUMENT ADD CONSTRAINT PK_DOCUMENT PRIMARY KEY (NDOC); ALTER TABLE PODRAZD ADD CONSTRAINT PK_PODRAZD PRIMARY KEY (NPODR); ALTER TABLE PROTOCOL ADD CONSTRAINT PK_PROTOCOL PRIMARY KEY (NUMBER); ALTER TABLE PROVERKI ADD CONSTRAINT PK_PROVERKI PRIMARY KEY (NPROVERKI); ALTER TABLE RABOTNIK ADD CONSTRAINT PK_RABOTNIK PRIMARY KEY (NUMBER); /************************************************************/ /**** Foreign Keys ****/ /************************************************************/ ALTER TABLE PROTOCOL ADD CONSTRAINT FK_PROTOCOL_DOC FOREIGN KEY (NDOC) REFERENCES DOCUMENT (NDOC) ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE PROTOCOL ADD CONSTRAINT FK_PROTOCOL_RAB FOREIGN KEY (NRAB) REFERENCES RABOTNIK (NUMBER) ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE PROVERKI ADD CONSTRAINT FK_PROV_DIR FOREIGN KEY (FIO) REFERENCES DIRECTOR (FIO) ON DELETE NO ACTION ON UPDATE CASCADE; ALTER TABLE PROVERKI ADD CONSTRAINT FK_PROV_PODRAZD FOREIGN KEY (NPODR) REFERENCES PODRAZD (NPODR) ON DELETE NO ACTION ON UPDATE CASCADE; ALTER TABLE RABOTNIK ADD CONSTRAINT FK_RAB_PODR FOREIGN KEY (NPODR) REFERENCES PODRAZD (NPODR) ON DELETE NO ACTION ON UPDATE CASCADE; /************************************************************/ /**** Triggers ****/ /************************************************************/ SET TERM ^ ; /* Trigger: BI_ARHIV */ CREATE TRIGGER BI_ARHIV FOR ARHIVDOC ACTIVE BEFORE INSERT POSITION 0 AS begin /* Trigger text */ NEW.ndoc= GEN_ID(arhivn,1); end ^ /* Trigger: BI_DOCUMRNT */ CREATE TRIGGER BI_DOCUMRNT FOR DOCUMENT ACTIVE BEFORE INSERT POSITION 0 AS begin /* Trigger text */ NEW.ndoc= GEN_ID(docn,1); end ^ /* Trigger: BI_PODRAZD */ CREATE TRIGGER BI_PODRAZD FOR PODRAZD ACTIVE BEFORE INSERT POSITION 0 AS begin /* Trigger text */ NEW.npodr= GEN_ID(podrazdn,1); end ^ /* Trigger: BI_PROTOCOL */ CREATE TRIGGER BI_PROTOCOL FOR PROTOCOL ACTIVE BEFORE INSERT POSITION 0 AS begin /* Trigger text */ NEW.number= GEN_ID(protocoln,1); end ^ /* Trigger: BI_PROVERKI */ CREATE TRIGGER BI_PROVERKI FOR PROVERKI ACTIVE BEFORE INSERT POSITION 0 AS begin /* Trigger text */ NEW.nproverki= GEN_ID(proverkin,1); end ^ /* Trigger: BI_RABOTNIK */ CREATE TRIGGER BI_RABOTNIK FOR RABOTNIK ACTIVE BEFORE INSERT POSITION 0 AS begin /* Trigger text */ NEW.number= GEN_ID(rabn,1); end ^ SET TERM ; ^ /***********************************************************/ /**** Stored Procedures ****/ /***********************************************************/ SET TERM ^ ; ALTER PROCEDURE ADD_DOCUMENT ( NKLASS VARCHAR(7), TEMA VARCHAR(30), DATA DATE, VID VARCHAR(15), NAME VARCHAR(70)) AS begin /* Procedure Text */ insert into document(nklass,naimendoc,viddoc,dataprinyatiya,tematika) values (:nklass,:name,:vid,:data,:tema); end ^ ALTER PROCEDURE ADDDIRECTOR ( DATA DATE, LOGIN VARCHAR(20), FAMILY VARCHAR(20)) AS begin insert into director(FIO,LOGIN,DATAVSTUPLENIYA) values (:family,:login,:data); /* Procedure Text */ /*$$IBE$$ suspend; $$IBE$$*/ end ^ ALTER PROCEDURE ADDPODRAZDELENIE ( NAZV VARCHAR(70), FIO VARCHAR(20)) AS begin insert INTO podrazd(FIOPODR,NAZVANIE) VALUES (:fio, :nazv); end ^ ALTER PROCEDURE ADDPROTOCOL ( NUMDOC INTEGER) AS DECLARE VARIABLE NRAB INTEGER; DECLARE VARIABLE USE VARCHAR(20); DECLARE VARIABLE VREMYA TIME; DECLARE VARIABLE DATA DATE; begin /* Procedure Text */ use = user; data = 'TODAY'; vremya = 'NOW'; select NUMBER FROM rabotnik WHERE LOGIN =: use INTO :NRAB; INSERT INTO protocol(DATA ,VREMYA,NRAB,NDOC ) VALUES (:DATA,:VREMYA,:NRAB,:numdoc); end ^ ALTER PROCEDURE ADDPROVERKI ( NAZVPODR VARCHAR(70), FIO VARCHAR(20), OPISANIE VARCHAR(1000), VID VARCHAR(15), DATA DATE) AS DECLARE VARIABLE PODR INTEGER; begin SELECT NPODR FROM podrazd WHERE NAZVANIE=:NAZVPODR INTO PODR ; INSERT INTO PROVERKI(DATA, FIO, NPODR,VID,OPISANIE) VALUES (:DATA,:FIO,:PODR,:VID,:OPISANIE); end ^ ALTER PROCEDURE CLEARARHIV AS begin /* Procedure Text */ delete from arhivdoc; end ^ ALTER PROCEDURE CLEARPROTOCOL AS begin /* Procedure Text */ delete from protocol; end ^ ALTER PROCEDURE DELETEDIRECTOR ( FIO VARCHAR(20)) AS begin /* Procedure Text */ DELETE FROM director where FIO=:fio; end ^ ALTER PROCEDURE DELETEDOC ( NUM INTEGER) AS DECLARE VARIABLE IZMENENIYA VARCHAR(30) CHARACTER SET WIN1251; DECLARE VARIABLE TEMATIKA VARCHAR(30) CHARACTER SET WIN1251; DECLARE VARIABLE DATA DATE; DECLARE VARIABLE VIDDOC VARCHAR(15) CHARACTER SET WIN1251; DECLARE VARIABLE NAIMENDOC VARCHAR(70) CHARACTER SET WIN1251; DECLARE VARIABLE NKLASS VARCHAR(7) CHARACTER SET WIN1251; begin /* Procedure Text */ select nklass,naimendoc,viddoc,dataprinyatiya,tematika,izmeneniya from document where ndoc = :num into :nklass,:naimendoc,:viddoc,:data,:tematika,:izmeneniya ; delete from document where ndoc =:num; insert into arhivdoc(nklass,naimendoc,viddoc,dataprinyatiya,datadelete,tematika,izmeneniya) values(:nklass,:naimendoc,:viddoc,:data,'TODAY',:tematika,:izmeneniya); end ^ ALTER PROCEDURE DELETEPODRAZD ( NOMER INTEGER) AS begin DELETE from podrazd WHERE NPODR=:nomer; end ^ ALTER PROCEDURE DELETEPROVERKA ( NPROVERKI INTEGER) AS begin /* Procedure Text */ delete FROM proverki where NPROVERKI=:nproverki; end ^ ALTER PROCEDURE DELETERABOTNIK ( NUM INTEGER) AS begin DELETE FROM RABOTNIK WHERE NUMBER =:NUM; /* Procedure Text */ WHEN ANY do exception NODELETE; end ^ ALTER PROCEDURE EDITPROVERKI ( OPISANIE VARCHAR(1000), NPROV INTEGER, VID VARCHAR(15), NAZVPODR VARCHAR(70), FIO VARCHAR(20), DATA DATE) AS DECLARE VARIABLE PODR INTEGER; begin SELECT NPODR FROM podrazd WHERE NAZVANIE=:NAZVPODR INTO PODR ; UPDATE PROVERKI SET DATA=:DATA, FIO=:FIO, NPODR=:PODR,VID=:VID,OPISANIE=:OPISANIE WHERE NPROVERKI =:NPROV ; /* Procedure Text */ end ^ ALTER PROCEDURE NEW_PROCEDURE ( NAZV VARCHAR(70), LOGIN VARCHAR(20), FIO VARCHAR(20)) AS DECLARE VARIABLE NUM INTEGER; begin /* Procedure Text */ select NPODR FROM PODRAZD WHERE NAZVANIE =:nazv INTO NUM; insert INTO RABOTNIK(FIO,LOGIN,NPODR) VALUES (:fio, :login, :NUM ); end ^ ALTER PROCEDURE UPDATEDOCUMENT ( IZMEN VARCHAR(30), TEMA VARCHAR(30), NUM INTEGER) AS begin /* Procedure Text */ UPDATE document set DATAIZMEN = 'TODAY', STATUS='изменен',TEMATIKA=:TEMA,IZMENENIYA=:izmen WHERE NDOC=:NUM; end ^ SET TERM ; ^ Клиентская часть unit Unit1; interface uses Windows,RzLabel,RzCommon,Unit3,Unit4, DBCtrls, StdCtrls, Controls, Mask, Grids, DBGrids, ComCtrls, Classes, Messages, SysUtils, Variants, Graphics, Forms, Dialogs,Unit2,Unit5,Unit6,Unit7, ExtCtrls, QuickRpt ; type TForm1 = class(TForm) PageControl1: TPageControl; TabSheet1: TTabSheet; TabSheet2: TTabSheet; TabSheet3: TTabSheet; TabSheet4: TTabSheet; TabSheet5: TTabSheet; TabSheet6: TTabSheet; TabSheet7: TTabSheet; DBGrid1: TDBGrid; Edit1: TEdit; Button1: TButton; Edit2: TEdit; Button2: TButton; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; DBEdit1: TDBEdit; MaskEdit1: TMaskEdit; Label6: TLabel; Label7: TLabel; Label8: TLabel; DBGrid2: TDBGrid; MaskEdit2: TMaskEdit; ComboBox1: TComboBox; ComboBox2: TComboBox; ComboBox3: TComboBox; Label9: TLabel; Label10: TLabel; Label11: TLabel; Label12: TLabel; Label13: TLabel; Label14: TLabel; Label15: TLabel; Label16: TLabel; Label17: TLabel; Button3: TButton; DBEdit3: TDBEdit; Label18: TLabel; Button5: TButton; DBGrid3: TDBGrid; Edit3: TEdit; Edit4: TEdit; Label19: TLabel; Label20: TLabel; Label21: TLabel; Button6: TButton; DBEdit4: TDBEdit; Label22: TLabel; Button7: TButton; Memo1: TMemo; DBMemo1: TDBMemo; Label23: TLabel; Label24: TLabel; Label25: TLabel; Label26: TLabel; Edit5: TEdit; Edit6: TEdit; ComboBox4: TComboBox; Label27: TLabel; Label28: TLabel; Label29: TLabel; Label30: TLabel; Label31: TLabel; Button4: TButton; DBEdit2: TDBEdit; Button8: TButton; DBGrid4: TDBGrid; DBGrid5: TDBGrid; Button9: TButton; Button10: TButton; Button11: TButton; Button12: TButton; DBMemo2: TDBMemo; Label32: TLabel; DBEdit5: TDBEdit; DBGrid6: TDBGrid; Label33: TLabel; Button13: TButton; TabSheet8: TTabSheet; DBGrid7: TDBGrid; Button14: TButton; Panel1: TPanel; RadioButton1: TRadioButton; RadioButton2: TRadioButton; Button15: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button7Click(Sender: TObject); procedure MaskEdit2Change(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Edit5Change(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button8Click(Sender: TObject); procedure Button9Click(Sender: TObject); procedure Button11Click(Sender: TObject); procedure Button10Click(Sender: TObject); procedure Button12Click(Sender: TObject); procedure Button13Click(Sender: TObject); rocedure Button14Click(Sender: TObject); procedure Button15Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var s1 : String; s2 : String; s3 : TDateTime; begin s1:= Edit1.Text; s2:=AnsiUpperCase(Edit2.Text); //s3:= StrToDateTime(MaskEdit1.Text); if((s1='') or (s2='') or (s3=NULL))then begin ShowMessage('Проверьте заполнение всех полей'); exit; end ; s3:= StrToDateTime(MaskEdit1.Text); try DM.DobavlenieIBSP.Prepare; DM.DobavlenieIBSP.ParamByName('FAMILY').AsString:=s1; DM.DobavlenieIBSP.ParamByName('LOGIN').AsString:=s2; DM.DobavlenieIBSP.ParamByName('DATA').AsDateTime:=s3; DM.DobavlenieIBSP.ExecProc; DM.IBTransaction1.Commit; DM.IBQuery1.Active:= true; except ShowMessage('Ошибка при добавлении !!!'); DM.IBTransaction1.Rollback; end; end; procedure TForm1.FormCreate(Sender: TObject); begin MaskEdit1.Text:='xx.xx.xx'; Edit1.Text:=''; Edit2.Text:=''; end; procedure TForm1.Button2Click(Sender: TObject); begin try DM.UdalenieDirIBSP.Prepare; DM.UdalenieDirIBSP.ParamByName('FIO').AsString:=DBEdit1.Text; DM.UdalenieDirIBSP.ExecProc; DM.IBTransaction1.Commit; DM.IBQuery1.Active:= true; except ShowMessage('Ошибка при удалении !!!'); DM.IBTransaction1.Rollback; end; end; procedure TForm1.Button6Click(Sender: TObject); begin if((Edit3.Text='') or (Edit4.Text=''))then begin ShowMessage('Проверьте заполнение всех полей'); exit; end ; try DM.AddPodrIBSP.Prepare; DM.AddPodrIBSP.ParamByName('NAZV').AsString:=Edit4.Text; DM.AddPodrIBSP.ParamByName('FIO').AsString:=Edit3.Text; DM.AddPodrIBSP.ExecProc; DM.IBTransaction3.Commit; DM.IBQuery3.Active:= true; except ShowMessage('Ошибка при добавлении !!!'); DM.IBTransaction3.Rollback; end; end; procedure TForm1.Button7Click(Sender: TObject); begin try DM.DeletePodrIBSP.Prepare; DM.DeletePodrIBSP.ParamByName('Nomer').AsInteger:=StrToInt(DBEdit4.Text); DM.DeletePodrIBSP.ExecProc; DM.IBTransaction3.Commit; DM.IBQuery3.Active:= true; except ShowMessage('Ошибка при добавлении !!!'); DM.IBTransaction3.Rollback; end; end; procedure TForm1.MaskEdit2Change(Sender: TObject); begin //---фамилия проверяющего для таблицы "Проверки"------ Combobox1.Clear; DM.IBQuery1.Last; Combobox1.Items.add(DM.IBQuery1.FieldValues['FIO']); //----------------------------------------------------- //---проверяемое подразделение для таблицы "Проверки"------ Combobox2.Clear; DM.IBQuery3.first; while not DM.IBQuery3.Eof do begin Combobox2.Items.add(DM.IBQuery3.FieldValues['NAZVANIE']); DM.IBQuery3.Next; end; //----------------------------------------------------- //----------------- Combobox3.Clear; Combobox3.Items.Add('значительное'); Combobox3.Items.Add('незначительное'); //--------------- //DBRichEdit1.Field.Assign(DBRichEdit1.Lines); end; procedure TForm1.Button3Click(Sender: TObject); begin if ((Combobox1.Text='')or(Combobox2.Text='')) then begin ShowMessage('Заполните обязательные для заполнения поля!!!'); exit; end; try DM.InsertProverIBSP.Prepare; DM.InsertProverIBSP.ParamByName('NAZVPODR').AsString:=Combobox2.Text; DM.InsertProverIBSP.ParamByName('FIO').AsString:=Combobox1.Text; DM.InsertProverIBSP.ParamByName('VID').AsString:=Combobox3.Text; DM.InsertProverIBSP.ParamByName('DATA').AsDateTime:=StrToDateTime(MaskEdit2.Text); DM.InsertProverIBSP.ParamByName('OPISANIE').AsString:=Memo1.Text; DM.InsertProverIBSP.ExecProc; DM.IBTransaction2.Commit; DM.IBQuery2.Active:= true; except ShowMessage('Ошибка при добавлении !!!'); DM.IBTransaction2.Rollback; end; end; procedure TForm1.Button5Click(Sender: TObject); begin try if (DBEdit3.Text='') then begin ShowMessage('В таблице отсутствуют записи!!!'); exit; end; DM.DeleteProvIBSP.Prepare; DM.DeleteProvIBSP.ParamByName('NPROVERKI').AsInteger:=StrToInt(DBEdit3.Text); DM.DeleteProvIBSP.ExecProc; DM.IBTransaction2.Commit; DM.IBQuery2.Active:= true; except ShowMessage('Ошибка при удалении !!!'); DM.IBTransaction2.Rollback; end; end; procedure TForm1.Edit5Change(Sender: TObject); begin //--подразделение к которому работник приписан для таблицы "Работники"--- Combobox4.Clear; DM.IBQuery3.first; while not DM.IBQuery3.Eof do begin Combobox4.Items.add(DM.IBQuery3.FieldValues['NAZVANIE']); DM.IBQuery3.Next; end; end; procedure TForm1.Button4Click(Sender: TObject); begin if ((Edit5.Text='')or(Edit6.Text='')or(Combobox4.Text='')) then begin ShowMessage('Необходимо заполнить все поля!!!'); exit; end; try DM.InsertRabotnikIBSP.Prepare; DM.InsertRabotnikIBSP.ParamByName('NAZV').AsString:=Combobox4.Text; DM.InsertRabotnikIBSP.ParamByName('FIO').AsString:=Edit5.Text; DM.InsertRabotnikIBSP.ParamByName('LOGIN').AsString:=Edit6.Text; DM.InsertRabotnikIBSP.ExecProc; DM.IBTransaction4.Commit; DM.RabotnikIBT.Active:= true; except ShowMessage('Ошибка при добавлении !!!'); DM.IBTransaction4.Rollback; end; end; procedure TForm1.Button8Click(Sender: TObject); begin try if (DBEdit2.Text='') then begin ShowMessage('В таблице отсутствуют записи!!!'); exit; end; DM.DeleteRabotnikIBSP.Prepare; DM.DeleteRabotnikIBSP.ParamByName('NUM').AsInteger:=StrToInt(DBEdit2.Text); DM.DeleteRabotnikIBSP.ExecProc; DM.IBTransaction4.Commit; DM.RabotnikIBT.Active:= true; except ShowMessage('Ошибка при удалении !!!'); DM.IBTransaction4.Rollback; end; end; procedure TForm1.Button9Click(Sender: TObject); begin Form3.Show; end; procedure TForm1.Button11Click(Sender: TObject); begin Form3.Show; end; procedure TForm1.Button10Click(Sender: TObject); begin Form4.Show; end; procedure TForm1.Button12Click(Sender: TObject); begin Form5.Show; end; procedure TForm1.Button13Click(Sender: TObject); begin try DM.ClearArhivIBSP.Prepare; DM.ClearArhivIBSP.ExecProc; DM.IBTransaction5.Commit; DM.IBQuery6.Active:= true; DM.IBQuery5.Active:= true; DM.IBQuery7.Active:= true; except ShowMessage('Ошибка при удалении !!!'); DM.IBTransaction5.Rollback; end; end; procedure TForm1.Button14Click(Sender: TObject); begin try DM.ClearProtocolIBSP.Prepare; DM.ClearProtocolIBSP.ExecProc; DM.IBTransaction5.Commit; DM.IBQuery7.Active:= true; DM.IBQuery5.Active:= true; except ShowMessage('Ошибка при удалении !!!'); DM.IBTransaction5.Rollback; end; end; procedure TForm1.Button15Click(Sender: TObject); begin if (RadioButton1.Checked) then Form6.QuickRep1.Preview ; if (RadioButton2.Checked) then Form7.QuickRep1.Preview ; end; end. procedure TForm3.Button1Click(Sender: TObject); var FileViewer: TRzURLLabel; FileName : String ; begin //создаем объект для просмотра файлов FileViewer:=TRzURLLabel.Create(Form3); FileName:= DBEdit1.Text ; FileViewer.URL:= FileName; if FileExists(FileName) then begin FileViewer.Click; end else begin ShowMessage('Такого файла не существует или он не помещен в нужный каталог (см. инструкцию)'); exit; end; //------ ПРОТОКОЛРАБОТЫ-------------------------------------- try DM.ProtocolIBSP.Prepare; DM.ProtocolIBSP.ParamByName('NUMDOC').AsInteger:=StrToInt(DBEdit2.Text); DM.ProtocolIBSP.ExecProc; DM.IBTransaction5.Commit; DM.IBQuery7.Active:= true; DM.IBQuery6.Active:= true; DM.IBQuery5.Active:= true; except ShowMessage('Ошибка !!!'); DM.IBTransaction5.Rollback; end; //------------------------------------------------------------------ end; procedure TForm3.Button2Click(Sender: TObject); begin if ((Memo1.Text='')) then begin ShowMessage('Необходимо заполнить поле "Характер изменений"!!!'); exit; end; try DM.UpdateDocIBSP.Prepare; DM.UpdateDocIBSP.ParamByName('NUM').AsInteger:=StrToInt(DBEdit2.Text); DM.UpdateDocIBSP.ParamByName('TEMA').AsString:=DBEdit5.Text; DM.UpdateDocIBSP.ParamByName('IZMEN').AsString:=Memo1.Text; DM.UpdateDocIBSP.ExecProc; DM.IBTransaction5.Commit; DM.IBQuery5.Active:= true; except ShowMessage('Ошибка при обновлении !!!'); DM.IBTransaction5.Rollback; end; end; end. procedure TForm4.Button1Click(Sender: TObject); var s: String; begin SaveDialog1.Execute; Edit1.Text:= SaveDialog1.FileName; Combobox1.Clear; Combobox1.Items.Add('внутренний'); Combobox1.Items.Add('нормативный'); end; procedure TForm4.Button2Click(Sender: TObject); begin if ((Edit1.Text='')) then begin ShowMessage('Необходимо выбрать документ!!!'); exit; end; if ((Combobox1.Text='')or(Edit3.Text='')) then begin ShowMessage('Заполните обязательные для заполнения поля!!!'); exit; end; try DM.InsertDocIBSP.Prepare; DM.InsertDocIBSP.ParamByName('NKLASS').AsString:=Edit3.Text; DM.InsertDocIBSP.ParamByName('TEMA').AsString:=Edit2.Text; DM.InsertDocIBSP.ParamByName('VID').AsString:=Combobox1.Text; DM.InsertDocIBSP.ParamByName('DATA').AsDateTime:=StrToDateTime(MaskEdit2.Text); DM.InsertDocIBSP.ParamByName('NAME').AsString:=Edit1.Text; DM.InsertDocIBSP.ExecProc; DM.IBTransaction5.Commit; DM.IBQuery5.Active:= true; except ShowMessage('Ошибка при добавлении !!!'); DM.IBTransaction5.Rollback; end; end; procedure TForm5.Button1Click(Sender: TObject); begin try DM.DeleteDocIBSP.Prepare; DM.DeleteDocIBSP.ParamByName('NUM').AsInteger:=StrToInt(DBEdit2.Text); DM.DeleteDocIBSP.ExecProc; DM.IBTransaction5.Commit; DM.IBQuery5.Active:= true; DM.IBQuery6.Active:= true; DM.IBQuery7.Active:= true; except ShowMessage('Ошибка при добавлении !!!'); DM.IBTransaction5.Rollback; end; end; Список используемой литературы 1) Коннолли Т., Бегг К., Страчан А. Базы данных: проектирование, реализация сопровождение. Теория и практика: Уч пос.–М.: Издательский дом «Вильямс», 2000. 2) Дейт К. Введение в системы баз данных. – СПб: Издательский дом «Вильямс», 1999. 3) Фаронов В.В. Delphi7 и разработка приложений баз данных.– М.: «НОЛИДЖ», 2003. [1] СМК – система менеджмента качества |