Курсовая работа (т): Базы данных

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Рис. 1.1. Многозвенная архитектура приложений БД

Многозвенная архитектура приложений БД призвана исправить перечисленные недостатки. В рамках этой архитектуры "тонкие" клиенты представляют собой простейшие приложения, обеспечивающие лишь передачу данных, их локальное кэширование, представление средствами пользовательского интерфейса, редактирование и простейшую обработку.

Клиентские приложения обращаются не к серверу БД напрямую, а к специализированному ПО промежуточного слоя. Это может быть и одно звено (простейшая трехзвенная модель) и более сложная структура.

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

Сервер БД выполняет полученные запросы и отправляет результаты серверу приложений, который адресует данные клиентам.

Таким образом, многозвенное приложение БД состоит из (рис. 1.1):

·              "тонких" клиентских приложений, обеспечивающих лишь передачу, представление, редактирование и простейшую обработку данных;

·              одного или нескольких звеньев ПО промежуточного слоя (сервер приложений), которые могут функционировать как на одном компьютере, так и распределенно - в локальной сети;

·              сервера БД (Oralce, Sybase, MS SQL, InterBase и т. д.), поддерживающего функционирование базы данных и обрабатывающего запросы.

Более простая трехзвенная модель содержит следующие элементы:

·              "тонкие" клиенты;

·              сервер приложений;

·              сервер БД.

Так как зачастую клиентские компьютеры - это достаточно слабые машины, реализация сложной бизнес-логики на сторону сервера позволяет существенно повысить быстродействие системы в целом. И не только за счет более мощной техники, но и за счет оптимизации выполнения однородных запросов пользователей.

Например, при чрезмерной загрузке сервера, сервер приложений может самостоятельно обрабатывать запросы пользователей (ставить их в очередь или отменять) без дополнительной загрузки сервера БД.

Наличие сервера приложений повышает безопасность системы, т. к. вы можете организовать здесь авторизацию пользователей, да и любые другие функции безопасности без прямого доступа к данным.

2.      Практическая часть

2.1    Информационно-логическая модель

база данные запрос информационный

Информационно - логическая модель отображает данные предметной области в виде совокупности информационных объектов и связей между ними. Эта модель представляет данные, подлежащие хранению в базе данных.

Информационный объект - это информационное описание некоторой сущности предметной области - реального объекта, процесса, явления или события. Информационный объект образуется совокупностью логически взаимосвязанных реквизитов, представляющих качественные и количественные характеристики сущности.

В нашем случае предметной областью является учёт инвентаризационного оборудования в колледже.

И из описания предметной области можно выделим следующие объекты:

-     Тип оборудования

-        Оборудование

-        Подразделение

-        Приход оборудования

-        Перемещение оборудования

-        Списание оборудования

-        Инвентаризация

Определим связи между сущностями:

Установим связи между объектами и определим структуру данных.

Структура БД

Определим таблицы нашей базы данных:

Теблица S_ type - хранит данные о типах оборудования;

Таблица s_oborud - хранит данные об оборудовании;

Таблица prihod - хранит данные о поступлениях оборудования;

Таблица rashod- хранит данные о перемещения оборудования;

Таблица spisanie - хранит данные о списании оборудования;

Таблица invent - хранит данные о проводимых инвентаризациях;

Таблица users - хранит данные о пользователях;

Таблица users_level- хранит данные о павах доступа пользователей;

Используя клиент PL/SQl developer с помощью следующего скрипта создадим перечисленные таблицы:

spool rz.logCreating table S_TYPE=====================table INVENT.S_TYPE

(_TYPE NUMBER not null,

NAME_TYPE VARCHAR2(40)

)USERS101255

(64K1M1unlimited

);table INVENT.S_TYPEconstraint S_TYPE_PK1 primary key (ID_TYPE)index USERS102255

(64K1M1unlimited

);Creating table S_OBORUD=======================table INVENT.S_OBORUD

(_OBORUD NUMBER not null,VARCHAR2(40),_TYPE NUMBER

)USERS101255

(64K1M1unlimited

);table INVENT.S_OBORUDconstraint S_OBORUD_PK1 primary key (ID_OBORUD)index USERS102255

(64K1M1unlimited

);table INVENT.S_OBORUDconstraint S_OBORUD_FK1 foreign key (ID_TYPE)INVENT.S_TYPE (ID_TYPE);Creating table INVENT=====================table INVENT.INVENT

(_INVENT NUMBER not null,_INVENT DATE,_OBORUD NUMBER,_F NUMBER,VARCHAR2(40)

)USERS101255

);table INVENT.INVENTconstraint INVENT_PK1 primary key (ID_INVENT)index USERS102255

(64K1M1unlimited

);table INVENT.INVENTconstraint INVENT_FK1 foreign key (ID_OBORUD)INVENT.S_OBORUD (ID_OBORUD);Creating table PRIHOD=====================table INVENT.PRIHOD

(_PRIHOD NUMBER not null,_P DATE,_NAKL NUMBER,NUMBER,_OBORUD NUMBER

)USERS101255

(64K1M1unlimited

);table INVENT.PRIHODconstraint PRIHOD_PK1 primary key (ID_PRIHOD)index USERS102255

(64K1M1unlimited

);table INVENT.PRIHODconstraint PRIHOD_FK1 foreign key (ID_OBORUD)INVENT.S_OBORUD (ID_OBORUD);Creating table S_KABINET========================table INVENT.S_KABINET

(_KABINET NUMBER not null,VARCHAR2(40),VARCHAR2(40)

)USERS101255

(64K1M1unlimited

);table INVENT.S_KABINETconstraint S_KABINET_PK1 primary key (ID_KABINET)index USERS102255

(64K1M1unlimited

);Creating table RASHOD=====================table INVENT.RASHOD

(_RASHOD NUMBER not null,_PRIHOD NUMBER,_R DATE,_KABINET NUMBER

)USERS101255

(64K1M1unlimited

);table INVENT.RASHODconstraint RASHOD_PK1 primary key (ID_RASHOD)index USERS102255

(64K1M1unlimited

);table INVENT.RASHODconstraint RASHOD_FK1 foreign key (ID_PRIHOD)INVENT.PRIHOD (ID_PRIHOD);table INVENT.RASHODconstraint RASHOD_FK2 foreign key (ID_KABINET)INVENT.S_KABINET (ID_KABINET);Creating table SPISANIE=======================table INVENT.SPISANIE

(_SPISANIE NUMBER not null,_PRIHOD NUMBER,_SP DATE,VARCHAR2(40)

)USERS101255

(64K1M1unlimited

);table INVENT.SPISANIEconstraint SPISANIE_PK1 primary key (ID_SPISANIE)index USERS102255

(64K1M1unlimited

);table INVENT.SPISANIEconstraint SPISANIE_FK1 foreign key (ID_PRIHOD)INVENT.PRIHOD (ID_PRIHOD);Creating table USERS====================table INVENT.USERS

(_USER NUMBER not null,VARCHAR2(10),VARCHAR2(40),VARCHAR2(10)

)USERS101255

(64K1M1unlimited

);table INVENT.USERSconstraint USERS_PK1 primary key (ID_USER)index USERS102255

(64K1M1unlimited

);Creating table USERS_LEVEL==========================table INVENT.USERS_LEVEL

(_USER NUMBER,NUMBER(1),NUMBER(1)

)USERS101255

(64K1M1unlimited

);table INVENT.USERS_LEVELconstraint USERS_LEVEL_PK1 foreign key (ID_USER)INVENT.USERS (ID_USER); off

Заполним таблицв данными, используя следующий скрипт:

prompt Loading S_TYPE...into S_TYPE (ID_TYPE, NAME_TYPE)(1, 'компьютеры');into S_TYPE (ID_TYPE, NAME_TYPE)(2, 'ноутбуки');into S_TYPE (ID_TYPE, NAME_TYPE)(3, 'оргтехника');;3 records loadedLoading S_OBORUD...into S_OBORUD (ID_OBORUD, OBORUD, ID_TYPE)(1, 'Компьютер с монитором', 1);into S_OBORUD (ID_OBORUD, OBORUD, ID_TYPE)(2, 'НОутбук Acer', 2);into S_OBORUD (ID_OBORUD, OBORUD, ID_TYPE)(3, 'Принтер Laser Jet', 3);into S_OBORUD (ID_OBORUD, OBORUD, ID_TYPE)(4, 'Компьютер Lenova', 1);into S_OBORUD (ID_OBORUD, OBORUD, ID_TYPE)(5, 'Ноутбук HP Laser Jet', 2);into S_OBORUD (ID_OBORUD, OBORUD, ID_TYPE)(6, 'Компьютер ASUS', 1);into S_OBORUD (ID_OBORUD, OBORUD, ID_TYPE)(7, 'Компьютер ', 1);;7 records loadedLoading INVENT...into INVENT (ID_INVENT, DATE_INVENT, ID_OBORUD, KOL_F, FIO)(1, to_date('11-02-2015', 'dd-mm-yyyy'), 2, 12, 'Иванова');;1 records loadedLoading PRIHOD...into PRIHOD (ID_PRIHOD, DATE_P, NOM_NAKL, PRICE, ID_OBORUD)(1, to_date('05-02-2015', 'dd-mm-yyyy'), 125, 15000, 1);into PRIHOD (ID_PRIHOD, DATE_P, NOM_NAKL, PRICE, ID_OBORUD)(2, to_date('05-02-2015', 'dd-mm-yyyy'), 456, 25000, 2);into PRIHOD (ID_PRIHOD, DATE_P, NOM_NAKL, PRICE, ID_OBORUD)(3, to_date('05-02-2015', 'dd-mm-yyyy'), 48731, 15000, 3);into PRIHOD (ID_PRIHOD, DATE_P, NOM_NAKL, PRICE, ID_OBORUD)(4, to_date('05-02-2015', 'dd-mm-yyyy'), 1121, 18000, 4);into PRIHOD (ID_PRIHOD, DATE_P, NOM_NAKL, PRICE, ID_OBORUD)(5, to_date('05-02-2015', 'dd-mm-yyyy'), 233, 15000, 5);into PRIHOD (ID_PRIHOD, DATE_P, NOM_NAKL, PRICE, ID_OBORUD)(6, to_date('05-02-2015', 'dd-mm-yyyy'), 125, 15000, 6);into PRIHOD (ID_PRIHOD, DATE_P, NOM_NAKL, PRICE, ID_OBORUD)(7, to_date('05-02-2015', 'dd-mm-yyyy'), 125, 15000, 7);;7 records loadedLoading S_KABINET...into S_KABINET (ID_KABINET, KABINET, MOL)(1, 'Кабинет информатики', 'Иванова Анна');into S_KABINET (ID_KABINET, KABINET, MOL)(2, 'Учебный класс 1', 'Петров А.В.');into S_KABINET (ID_KABINET, KABINET, MOL)(3, 'Учебный класс 2', 'Шульгин Ш.А.');into S_KABINET (ID_KABINET, KABINET, MOL) (4, 'Склад', 'Сидоров А.П,');

commit;4 records loadedLoading RASHOD...into RASHOD (ID_RASHOD, ID_PRIHOD, DATE_R, ID_KABINET)(3, 4, to_date('18-02-2015', 'dd-mm-yyyy'), 3);into RASHOD (ID_RASHOD, ID_PRIHOD, DATE_R, ID_KABINET)(1, 2, to_date('01-02-2015', 'dd-mm-yyyy'), 1);into RASHOD (ID_RASHOD, ID_PRIHOD, DATE_R, ID_KABINET)(2, 3, to_date('19-02-2015', 'dd-mm-yyyy'), 4);into RASHOD (ID_RASHOD, ID_PRIHOD, DATE_R, ID_KABINET)(5, null, null, null);into RASHOD (ID_RASHOD, ID_PRIHOD, DATE_R, ID_KABINET)(4, 7, to_date('04-02-2015', 'dd-mm-yyyy'), 1);;5 records loadedLoading SPISANIE...into SPISANIE (ID_SPISANIE, ID_PRIHOD, DATE_SP, PRIM)(0, 5, to_date('20-02-2015', 'dd-mm-yyyy'), null);into SPISANIE (ID_SPISANIE, ID_PRIHOD, DATE_SP, PRIM)(1, 4, to_date('20-02-2015', 'dd-mm-yyyy'), null);into SPISANIE (ID_SPISANIE, ID_PRIHOD, DATE_SP, PRIM)(2, null, null, null);into SPISANIE (ID_SPISANIE, ID_PRIHOD, DATE_SP, PRIM)(3, null, null, null);;4 records loadedLoading USERS...into USERS (ID_USER, LOGIN, FIO, PASS)(1, 'admin', 'Администратор', '0');into USERS (ID_USER, LOGIN, FIO, PASS)(2, 'master', 'Мастер', '1');into USERS (ID_USER, LOGIN, FIO, PASS)(3, 'nach', 'Начальник', '2');;3 records loadedLoading USERS_LEVEL...into USERS_LEVEL (ID_USER, SPRAV, REP)(1, 1, 1);into USERS_LEVEL (ID_USER, SPRAV, REP)(2, 1, null);into USERS_LEVEL (ID_USER, SPRAV, REP)(3, 1, 1);;3 records loadedEnabling foreign key constraints for S_OBORUD...table S_OBORUD enable constraint S_OBORUD_FK1;Enabling foreign key constraints for INVENT...table INVENT enable constraint INVENT_FK1;Enabling foreign key constraints for PRIHOD...table PRIHOD enable constraint PRIHOD_FK1;Enabling foreign key constraints for RASHOD...table RASHOD enable constraint RASHOD_FK1;table RASHOD enable constraint RASHOD_FK2;Enabling foreign key constraints for SPISANIE...table SPISANIE enable constraint SPISANIE_FK1;Enabling foreign key constraints for USERS_LEVEL...table USERS_LEVEL enable constraint USERS_LEVEL_PK1;feedback ondefine onDone.

2.2 Интерфейс


Представим элементы интерфейса нашего приложения.

Структура меню определяется удобством работы с огромным объёмом информации. Поэтому мы сгруппируем меню следующем образом:

-     Справочники

- списки типов оборудования;

- списки оборудования;

- кабинеты;

-     Документы

- Приход

Расход

Списание

Инвентаризация;

Отчёты

остатки на складе

Остатки по подразделениям

итоги инвентаризации

Управление

Пользователь

Доступ

Управление

Выход

Программа имеет интуитивно-понятный интерфейс, элементы которого представлены ниже.

Рис. 2.2. Окно авторизации

Рис. 2.3. Главная форма

Рис. 2.4. Справочники

Рис. 2.5. Приход


Рис. 2.7. Списание

Рис. 2.8. Инвентаризация

Рис. 2.9. Отчёты

Рис. 2.9. Модуль управления (Пользователи)

Рис. 2.10. Модуль управления (Доступ)

Рис. 2.11. Списание оборудования

Рис. 2.12. Перемещение оборудования

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

)        Остатки на складе* from invent.prihod t where id_prihod not in (select id_prihod from invent.rashod where date_r<=:d) and t.date_p<=:d and id_prihod not in (select id_prihod from invent.spisanie where date_sp<=:d)

2)      Остатки по подразделениям* from invent.rashod t where t.date_r<=:d and id_prihod not in (select id_prihod from invent.spisanie where date_sp<=:d)

3)      Итоги инвентаризации

select plan.oborud, nvl(kol_p,0) as kol_p, nvl(kol_f, 0) as kol_f, nvl(kol_p,0)-nvl(kol_f,0) as it from (select oborud, count(*) as kol_p from invent.prihod t left join invent.s_oborud f on f.id_oborud=t.id_oborud where.date_p<=:d and id_prihod not in (select id_prihod from invent.spisanie where date_sp<=:d) group by oborud

) plan left join (select oborud, kol_f from invent.invent t left join invent.s_oborud f on f.id_oborud=t.id_oborud where t.date_invent=:d

) fact on fact.oborud=plan.oborud

Листинг программы представлен в приложении 1.

Заключение


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

. Экономит время;

. Проста при эксплуатации;

. Уменьшает физическую нагрузку.

Формы позволяют пользователям вводить данные в таблицы базы данных без непосредственного доступа к самим таблицам. Позволяют выводить результаты работы запросов не в виде скупых результирующих таблиц, а в виде красиво оформленных форм. В окне базы данных можно работать со всеми её объектами. Для просмотра объектов определённого типа следует выбрать соответствующую вкладку. С помощью кнопок можно открывать и изменять существующие объекты и создавать новые.

Использование базы данных учета оборудования колледжа облегчит работу бухгалтерам и другим сотрудникам имеющие отношение с учетом оборудования. Не будет работ с бумагами, так как вся информация будет находиться в электронном виде. Это самый удобный, качественный, эффективный способ работы с доступной информацией.

Приложение 1


Листинг программыfrm_main;

interface, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, Menus;= class(TForm): TMainMenu;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;FormShow(Sender: TObject);FormClose(Sender: TObject; var Action: TCloseAction);Cghfdjxybrb1Click(Sender: TObject);N2Click(Sender: TObject);N3Click(Sender: TObject);N5Click(Sender: TObject);N4Click(Sender: TObject);FormCreate(Sender: TObject);N7Click(Sender: TObject);N6Click(Sender: TObject);N8Click(Sender: TObject);

{ Private declarations }

{ Public declarations }, host, comp:string;;: Tfrmmain;frmlogin, dmora, Unit5, Unit4, frmsprav, Unit2, Unit3, frm_rep, Unit6,;

{$R *.dfm}Tfrmmain.FormShow(Sender: TObject);_login.Showmodal;.Caption:= frmmain.Caption+' ';dm.quserid_user.Value=3 then.Visible:=True;;;Tfrmmain.FormClose(Sender: TObject; var Action: TCloseAction);MessageDlg('Çàêðûòü ïðèëîæåíèå ?', mtConfirmation,

[mbYes, mbNo], 0) = mrYes then.Free;:= caFree:= caNone;;Tfrmmain.Cghfdjxybrb1Click(Sender: TObject);not assigned (frm_sprav) then_sprav:=tfrm_sprav.Create(application)frm_sprav.Show;;Tfrmmain.N2Click(Sender: TObject);not assigned (prihod) then:=tprihod.Create(application)prihod.Show;;Tfrmmain.N3Click(Sender: TObject);not assigned (rashod) then:=trashod.Create(application)rashod.Show;;Tfrmmain.N5Click(Sender: TObject);not assigned (spis) then:=tspis.Create(application)spis.Show;;Tfrmmain.N4Click(Sender: TObject);not assigned (inv) then:=tinv.Create(application)inv.Show;;Tfrmmain.FormCreate(Sender: TObject);f1:textfile;, idcomp:integer;:= wsMaximized;(F1, ExtractFilePath(Application.ExeName)+'\host.txt');(F1);i:=0 to 0 do(F1, ip);i:=2 to 2 do(F1, comp);.WindowState := wsMaximized;

// dm := dm.Create(Application);dm do.ConnectString := ip;.Options.Net := true;.Connect;.Users.Active:=true;.qUser.Active:=true;.s_type.Active:=true;.s_kabinet.Active:=true;.prihod.Active:=true;.rashod.Active:=true;.spis.Active:=True;.Qprihod_for_spis.Active:=True;.qprihod.Active:=true;.invent.Active:=True;;;Tfrmmain.N7Click(Sender: TObject);not assigned (form8) then:=tform8.Create(application)form8.Show;;Tfrmmain.N6Click(Sender: TObject);not assigned (zapr) then:=tzapr.Create(application)zapr.Show;;Tfrmmain.N8Click(Sender: TObject);;;.Unit8;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, cxStyles, dxSkinsCore, dxSkinBlack, dxSkinBlue, dxSkinCaramel,, dxSkinDarkSide, dxSkinGlassOceans, dxSkiniMaginary,, dxSkinLiquidSky, dxSkinLondonLiquidSky, dxSkinMcSkin,, dxSkinOffice2007Black, dxSkinOffice2007Blue,Green, dxSkinOffice2007Pink, dxSkinOffice2007Silver,, dxSkinSilver, dxSkinSpringTime, dxSkinStardust,, dxSkinsDefaultPainters, dxSkinValentine,Blue, dxSkinscxPCPainter, cxCustomData, cxGraphics,, cxData, cxDataStorage, cxEdit, DB, cxDBData, cxMaskEdit,, cxGridLevel, cxGridCustomTableView, cxGridTableView,, cxClasses, cxControls, cxGridCustomView, cxGrid,;= class(TForm): TPageControl;: TTabSheet;: TTabSheet;: TcxGrid;: TcxGridDBTableView;: TcxGridDBColumn;: TcxGridDBColumn;: TcxGridDBColumn;: TcxGridDBColumn;: TcxGridDBColumn;: TcxGridDBColumn;: TcxGridDBColumn;: TcxGridLevel;: TcxGrid;: TcxGridDBTableView;: TcxGridDBColumn;: TcxGridDBColumn;: TcxGridDBColumn;: TcxGridDBColumn;: TcxGridDBColumn;: TcxGridDBColumn;: TcxGridDBColumn;: TcxGridLevel;

{ Private declarations }

{ Public declarations };: TForm8;

{$R *.dfm}.Unit1;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, cxGraphics, dxSkinsCore, dxSkinBlack, dxSkinBlue, dxSkinCaramel,, dxSkinDarkSide, dxSkinGlassOceans, dxSkiniMaginary,, dxSkinLiquidSky, dxSkinLondonLiquidSky, dxSkinMcSkin,, dxSkinOffice2007Black, dxSkinOffice2007Blue,Green, dxSkinOffice2007Pink, dxSkinOffice2007Silver,, dxSkinSilver, dxSkinSpringTime, dxSkinStardust,, dxSkinsDefaultPainters, dxSkinValentine,Blue, cxDBEdit, cxLabel, cxDropDownEdit, cxCalendar,, cxContainer, cxEdit, cxTextEdit, cxMaskEdit, cxLookupEdit,, cxDBLookupComboBox, Menus, cxLookAndFeelPainters,, cxButtons;= class(TForm): TcxDBLookupComboBox;: TcxDBDateEdit;: TcxDBLookupComboBox;: TcxLabel;: TcxLabel;: TcxLabel;: TcxDBTextEdit;: TcxLabel;: TcxButton;: TcxButton;cxButton1Click(Sender: TObject);cxButton2Click(Sender: TObject);

{ Private declarations }

{ Public declarations };: Tins;dmora;

{$R *.dfm}Tins.cxButton1Click(Sender: TObject);.rashod.cancel;;;Tins.cxButton2Click(Sender: TObject);.rashod.post;;;.frmlogin;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, sButton, sEdit, DBCtrls, sDBLookupComboBox;_login = class(TForm): TsDBLookupComboBox;: TLabel;: TLabel;: TsEdit;: TsButton;: TsButton;sButton1Click(Sender: TObject);sButton2Click(Sender: TObject);

{ Private declarations }

{ Public declarations };_login: Tfrm_login;dmora;

{$R *.dfm}Tfrm_login.sButton1Click(Sender: TObject);.QUser.Active:=false;.QUser.Params.parambyname('us').value:=edit1.Text;.QUser.Active:=true;(dm.QUser.RecordCount>0) and (edit2.Text=dm.QUserpass.Value) then_login.Close.Text:='';

showmessage('Íåâåðíî ââåëè ëîãèí/ïàðîëü!');

end;;Tfrm_login.sButton2Click(Sender: TObject);.Terminate;;.Unit6;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, cxStyles, dxSkinsCore, dxSkinBlack, dxSkinBlue, dxSkinCaramel,, dxSkinDarkSide, dxSkinGlassOceans, dxSkiniMaginary,, dxSkinLiquidSky, dxSkinLondonLiquidSky, dxSkinMcSkin,, dxSkinOffice2007Black, dxSkinOffice2007Blue,Green, dxSkinOffice2007Pink, dxSkinOffice2007Silver,, dxSkinSilver, dxSkinSpringTime, dxSkinStardust,, dxSkinsDefaultPainters, dxSkinValentine,Blue, dxSkinscxPCPainter, cxCustomData, cxGraphics,, cxData, cxDataStorage, cxEdit, DB, cxDBData, cxMaskEdit, Menus,, StdCtrls, cxButtons, cxLabel, cxContainer,, cxDropDownEdit, cxCalendar, cxGridLevel,, cxGridTableView, cxGridDBTableView, cxClasses,, cxGridCustomView, cxGrid, ComCtrls, ExtCtrls;= class(TForm): TPanel;: TPageControl;: TTabSheet;: TTabSheet;: TTabSheet;: TcxDateEdit;: TcxLabel;: TcxButton;: TcxGrid;: TcxGridDBTableView;: TcxGridDBColumn;: TcxGridDBColumn;Column1: TcxGridDBColumn;Column2: TcxGridDBColumn;Column3: TcxGridDBColumn;Column4: TcxGridDBColumn;Column5: TcxGridDBColumn;: TcxGridLevel;: TcxGrid;: TcxGridDBTableView;: TcxGridDBColumn;: TcxGridDBColumn;: TcxGridDBColumn;: TcxGridDBColumn;: TcxGridDBColumn;: TcxGridDBColumn;: TcxGridLevel;: TcxGrid;: TcxGridDBTableView;: TcxGridDBColumn;: TcxGridDBColumn;: TcxGridDBColumn;: TcxGridDBColumn;: TcxGridDBColumn;: TcxGridDBColumn;: TcxGridLevel;Column1: TcxGridDBColumn;cxButton1Click(Sender: TObject);

Источник: https://www.bibliofond.ru/detail.aspx?id=792142