7.6 Охрана окружающей среды

25 июня 1991 года принят Закон Украины «Об охране окружающей природной среды» (редакции Закона 1993,1996 гг) [32]. Закон определяет правовые, экономические, социальные основы охраны окружающей среды.

Задачей законодательства об охране окружающей среды является регулирование отношений в области охраны природы, использовании и воспроизводстве природных ресурсов, обеспечении экологической безопасности, предупреждения и ликвидации отрицательного воздействия хозяйственной и иной деятельности на окружающую среду, сохранение природных ресурсов, генетического фонда нации, ландшафтов и других природных объектов [33].

При массовом производстве мониторов нельзя не учитывать их влияние на окружающую среду на всех стадиях их «жизни» - при изготовлении, эксплуатации, окончания срока службы. Сегодня действуют экологические стандарты, которые определяют требования к производству и материала. Они не должны содержать фреонов, хлоридов и бромидов (BS 7750, TCO-95, TCO-99).

В стандарте ТСО-99 допускается ограничение использования кадмия в светочувствительном слое экрана дисплея и ртути в батарейках. Аппараты, тара и документация должны допускать нетоксичную переработку после использования. Международные стандарты, начиная с ТCO-92, включают требования пониженного электропотребления и ограничивают допустимые уровни мощности потребляемой энергии в неактивном режиме.

Работа на ПК типа IBM PC\AT не оказывает вредного воздействия на окружающую среду. После истечения срока службы он полностью подлежит вторичной переработке. Необходимо внедрить на производстве стандарт ISO – 14001 [33] , который определяет требования к организации производственного процесса с минимальным ущербом, для окружающей природной среды.

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


8. ГРАЖДАНСКАЯ ОБОРОНА

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

В данной дипломной работе рассматривается вопрос ведения спасательных и неотложных работ при ликвидации последствий крупных аварий.

Систему гражданской обороны составляют:

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

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

-  силы и средства, предназначенные для исполнения задач ГО;

-  фонды финансовых, медицинских и материально-технических ресурсов, предусмотренных на случай чрезвычайных ситуаций;

-  системы связи, оповещения и информационного обеспечения;

-  Центральный орган исполнительной власти по вопросам чрезвычайных ситуаций и по делам защиты населения от последствий Чернобыльской катастрофы;

-  курсы и учебные заведения подготовки и переподготовки специалистов и населения по вопросам ГО;

-  службы ГО.

Основными задачами гражданской обороны Украины являются:

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

-  оповещение населения об угрозе и возникновении чрезвычайных ситуаций в мирное и военное время и постоянное информирование его об имеющейся опасности;

-  защита населения от последствий аварий, катастроф, больших пожаров, стихийных бедствий и применения средств поражения;

-  организация жизнеобеспечения населения во время аварий, катастроф, стихийных бедствий и в военное время;

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

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

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

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

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

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

Для ликвидации последствий, вызванных стихийными бедствиями, могут привлекаться как формирования общего назначения так и формирования служб ГО. В отдельных случаях помимо указанных формирований могут привлекаться части Вооружённых сил Украины.

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

Успех действий формирований во многом зависит от своевременной организации и проведения разведки и учёта конкретных условий обстановки.

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

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

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

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

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

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

Командиры формирований должны постоянно знать обстановку в районе работ и в соответствии с её изменением уточнять или ставить новые задачи подразделениям.

После выполнения поставленных задач подразделения выводятся в район постоянного расквартирования.

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

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

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

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

Содержание спасательных работ: ведение разведки маршрутов выдвижения формирований и участков (объектов) работ; локализация и тушение пожаров на участках (объектах) проведения работ и на путях выхода к ним; розыск поражённых и извлечение их из-под завалов, повреждённых и горящих зданий, загазованных и задымлённых помещений; вскрытие разрушенных, повреждённых, заваленных защитных сооружений и спасение находящихся в них людей, а также подача воздуха в заваленные защитные сооружения; оказание первой медицинской и первой врачебной помощи поражённым людям и эвакуация их в лечебные учреждения; вывод населения из опасных мест ( сильно заражённых и затапливаемых районов) в безопасные (менее зараженные) или незараженные районы; санитарная обработка людей и обеззараживание их одежды, территории сооружений техники.

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

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


ВЫВОД

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

База данных была разработана и функционирует под управлением СУБД InterBase, одного из наиболее популярных, функциональных и надёжных серверов баз данных в мире. Клиентское приложение разработано при помощи среды программирования Borland Delphi 7.0, представляющей из себя мощное и современное средство для разработки приложений в архитектуре клиент-сервер.

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

Все функции выполняемые приложением были тщательным образом проверены в процессе разработки и протестированы на готовом продукте.

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


СПИСОК ССЫЛОК

1. Дейт К. Дж. Введение в системы баз данных – М.: Издательский дом “Вильямс”, 2001. – 1072 с.

2. Атре Ш. Структурный подход к организации баз данных – М.: Финансы и статистика, 1983. – 317с.

3. Кузнецов С.Д. Основы современных баз данных - http://www.citforum.ru/database/osbd/contents.shtml

4. Кириллов В. В. Основы проектирования реляционных баз данных - http://www.citforum.ru/database/dbguide/index.shtml

5. Пушников А. Ю. Введение в системы управления базами данных - http://www.citforum.ru/database/dblearn/index.shtml

6. Грабер М. Введение в SQL – М.: Лори, 1996. – 380 с.

7. Ковязин А., Востриков С. Мир InterBase. Архитектура, администрирование и разработка приложений баз данных в InterBase/Firebird/Yaffil – М.: КУДИЦ-ОБРАЗ, 2002. – 432 с.

8. Гофман В. Э., Хомоненко А. Д. Delphi 6 – СПб.: БХВ-Петербург, 2001. – 1152 с.

9. Канту М. Delphi 6 для профессионалов – СПб.: Питер, 2002. – 1088 с.

10. Культин Н. Б. Программирование в Turbo Pascal 7.0 и Delphi – СПб.: БХВ-Петербург, 1997. – 240 с

11. Закон Украины об охране труда от 25.11. 1992г.

12. ГОСТ 12.0.003 – 74* ССБТ. Опасные и вредные производственные факторы. Классификация. – Введ. 01.01.76.

13. ОНТП 24 – 86. Общесоюзные нормы технологического проектирования. Определение категорий зданий и сооружений по взрывопожарной и пожарной опасности. – М.: Стройиздат, 1987. – 128 с.

14.ДБНВ 1.1 – Захист від пожежі. Пожежна безпека об’єктів булівництва, 2002 – 41с.

15. СНиП 2.09.02 – 85. Строительные нормы и правила. Производственные здания промышленных предприятий. Нормы проектирования. – М: Стройиздат, 1986.

16. ГОСТ 12.1 005 – 88*. ССБТ. Общие санитарно-гигиенические требования к воздуху рабочей зоны. – Введ. 01.01.89.

17. СНиП. II – 4 – 79. Строительные нормы и правила. Естественное и искусственное освещение. Нормы проектирования. – М.: Стройиздат, 1980. – 110 с.

18. ГОСТ 12.1.003 – 83*. ССБТ. Шум. Общие требования безопасности. – Введ.01.07.84.

19. ГОСТ 12.1.045 – 84. ССБТ. Электростатические поля. Допустимые уровни на рабочих местах и требования к проведению контроля. – Введ.01.01.85.

20. ГОСТ 12.1.006 – 84.ССБТ. Электромагнитные поля радиочастот. Допустимые уровни на рабочих местах и требования к проведению контроля. – Введ.01.01.85.

21. ДНАОП 0.00 – 1.31. – 99 Правила охраны труда при эксплуатации ЭВМ. – К.:1999.

22. Санитарно – гигиенические нормы допустимых уровней ионизации воздуха производственных и общественных помещений № 2152 – 80. – Минздрав СССР,1980.

23. ГОСТ 12.1.038 – 82.ССБТ. Электробезопасность. Предельно – допустимые уровни напряжений прикосновения и токов.

24. СНиП 2.04.05-93 Нормы проектирования. Отопление, вентиляция и кондиционирование. - М.: Стройиздат, 1994-64 с.

25. ДНАОП 0.03-3.14-85 Санітарні норми допустимих рівнів шуму на робочих місцях №3223-85.

26. ГОСТ 12.1.012-90 ССБТ. Вибрационная безопасность. Общие требования. – Введ.01.07.91.

27. ГОСТ 12.2.007.0-75 ССБТ. Изделия электрические. Общие требования безопасности. - Введ.01.01.76.

28. ПУЭ – 87. Правила устройства электроустановок. – М.: Энерогоатомиздат, 1987. –648 с.

29. ГОСТ 14255-69. Аппараты электрические напряжением до 1000В. Оболочки. Степени защиты.

30. ГОСТ 12.1.004-91 ССБТ. Пожарная безопасность. Общие требования. – Введ.01.07.91.

31. РД 34.21.122-87 Инструкция по устройству молниезащиты зданий и сооружений / Минэнерго СССР. - М.: Энергоатомиздат. – 1989. – 58 с.

32. Закон Украины «Об охране окружающей природной среды» от 25.06.91г.

33. Государственный стандарт Украины «Система управления окружающей средой» ISO 14001-97 – К.: ГОСТАНТДАРТ УКРАИНЫ. 1997 – 31 с.

34. Депутат О.П. Коваленко І.В. Мужик І.С. Цивільна оборона – Львів: Афіша, 2000 – 336 с.

35. Атаманюк В.Г. и др. Гражданская оборона – М: Высш. шк., 1987. – 288 с.


ПРИЛОЖЕНИЯ

Приложение А

Формы приложения этапе проектирования

Рисунок А.1 – Форма MainForm на этапе проектирования

Рисунок А.2 – Модуль данных DataModule1 на этапе проектирования


Рисунок А.3 – Форма EditForm на этапе проектирования

Рисунок А.4 – Форма FindForm на этапе проектирования

Рисунок А.5 – Форма DeleteForm на этапе проектирования


Рисунок А.6 – Форма FilterForm на этапе проектирования

Рисунок А.7 – Форма DirSourceForm на этапе проектирования

Рисунок А.8 – Форма PathForm на этапе проектирования

Рисунок А.9 – Форма UserForm на этапе проектирования


Рисунок А.10 – Форма AboutForm на этапе проектирования


Приложение Б

Листинг проекта приложения Lib.dpr

program Lib;

uses

Forms,

Main in 'Main.pas' {MainForm},

DBUnit in 'DBUnit.pas' {DataModule1: TDataModule},

DirSource in 'DirSource.pas' {DirSourceForm},

Edit in 'Edit.pas' {EditForm},

Files in 'Files.pas',

About in 'About.pas' {AboutBox},

Delete in 'Delete.pas' {DeleteForm},

Data in 'Data.pas',

Find in 'Find.pas' {FindForm},

Filter in 'Filter.pas' {FilterForm},

User in 'User.pas' {UserForm},

Path in 'Path.pas' {PathForm};

{$R *.res}

begin

Application.Initialize;

Application.CreateForm(TMainForm, MainForm);

Application.CreateForm(TDataModule1, DataModule1);

Application.CreateForm(TDirSourceForm, DirSourceForm);

Application.CreateForm(TEditForm, EditForm);

Application.CreateForm(TAboutBox, AboutBox);

Application.CreateForm(TDeleteForm, DeleteForm);

Application.CreateForm(TFindForm, FindForm);

Application.CreateForm(TFilterForm, FilterForm);

Application.CreateForm(TUserForm, UserForm);

Application.CreateForm(TPathForm, PathForm);

Application.Run;

end.


Приложение В

Листинг модуля Main.pas

unit Main;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Grids, DBGrids, StdCtrls, ExtCtrls, Buttons, DBCtrls, ImgList,

ComCtrls, ToolWin, DBActns, ActnList, AppEvnts, Menus, StdActns;

type

TMainForm = class(TForm)

ToolBar1: TToolBar;

TBInsert: TToolButton;

TBDelete: TToolButton;

ImageList1: TImageList;

TBUpdate: TToolButton;

TBFirst: TToolButton;

TBPrev: TToolButton;

TBNext: TToolButton;

TBLast: TToolButton;

ActionList1: TActionList;

DataSetFirst: TDataSetFirst;

DataSetPrior: TDataSetPrior;

DataSetNext: TDataSetNext;

TBRefrash: TToolButton;

DataSetLast: TDataSetLast;

DataSetInsert: TAction;

DataSetDelete: TAction;

DataSetUpdate: TAction;

DataSetRefrash: TAction;

ApplicationEvents1: TApplicationEvents;

FileExit: TFileExit;

MainMenu1: TMainMenu;

HelpAbout: TAction;

mmTable: TMenuItem;

mmFile: TMenuItem;

mmSort: TMenuItem;

mmExit: TMenuItem;

mmFirst: TMenuItem;

mmPrior: TMenuItem;

mmNext: TMenuItem;

mmLast: TMenuItem;

N5: TMenuItem;

mmInsert: TMenuItem;

mmDelete: TMenuItem;

mmUpdate: TMenuItem;

mmRefrash: TMenuItem;

mmHelp: TMenuItem;

SortByNum: TAction;

SortByAut: TAction;

SortByTit: TAction;

SortByLan: TAction;

SortByNo: TAction;

SortDirInc: TAction;

SortDirDec: TAction;

TBOpen: TToolButton;

DataSetOpen: TAction;

mmOpen: TMenuItem;

mmSortByNum: TMenuItem;

mmSortByAut: TMenuItem;

mmSortByTit: TMenuItem;

mmSortByLan: TMenuItem;

mmSortByNo: TMenuItem;

N12: TMenuItem;

mmSortDirInc: TMenuItem;

mmSortDirDec: TMenuItem;

mmAbout: TMenuItem;

DataSetFind: TAction;

DataSetFilter: TAction;

N14: TMenuItem;

mmFind: TMenuItem;

TBFind: TToolButton;

TBSapce2: TToolButton;

DataSetFindNext: TAction;

TBSpace1: TToolButton;

TBFindNext: TToolButton;

mmFindNext: TMenuItem;

TBFilter: TToolButton;

mmFilter: TMenuItem;

DataSetAll: TAction;

TBAll: TToolButton;

mmAll: TMenuItem;

FileUser: TAction;

N18: TMenuItem;

mmUser: TMenuItem;

mmOptions: TMenuItem;

OptColor: TAction;

OptFont: TAction;

FileDataBasePath: TAction;

mmDataBasePath: TMenuItem;

ColorDialog1: TColorDialog;

FontDialog1: TFontDialog;

mmColor: TMenuItem;

mmFont: TMenuItem;

PanelMain: TPanel;

PanelMemo: TPanel;

DBMemo1: TDBMemo;

Panel1: TPanel;

PanelGrid: TPanel;

Panel2: TPanel;

DBGrid1: TDBGrid;

Splitter1: TSplitter;

StatusBar1: TStatusBar;

Edit1: TEdit;

OptConfDel: TAction;

mmOptConfDel: TMenuItem;

N19: TMenuItem;

procedure FormCreate(Sender: TObject);

procedure FormActivate(Sender: TObject);

procedure FormDestroy(Sender: TObject);

procedure SaveIniFiles;

procedure RestoreIniFiles;

procedure ApplicationEvents1Hint(Sender: TObject);

procedure RadioGroup1Click(Sender: TObject);

procedure RadioGroup2Click(Sender: TObject);

procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;

DataCol: Integer; Column: TColumn; State: TGridDrawState);

procedure DBGrid1ColExit(Sender: TObject);

procedure DBGrid1KeyPress(Sender: TObject; var Key: Char);

procedure Edit1Exit(Sender: TObject);

procedure DataSetInsertExecute(Sender: TObject);

procedure DataSetDeleteExecute(Sender: TObject);

procedure DataSetUpdateExecute(Sender: TObject);

procedure DataSetRefrashExecute(Sender: TObject);

procedure DataSetOpenExecute(Sender: TObject);

procedure DataSetFindExecute(Sender: TObject);

procedure DataSetFindNextExecute(Sender: TObject);

procedure DataSetFilterExecute(Sender: TObject);

procedure DataSetAllExecute(Sender: TObject);

procedure FileDataBasePathExecute(Sender: TObject);

procedure FileUserExecute(Sender: TObject);

procedure OptColorExecute(Sender: TObject);

procedure OptFontExecute(Sender: TObject);

procedure OptConfDelExecute(Sender: TObject);

procedure HelpAboutExecute(Sender: TObject);

private

EditField : Integer;

OpenCounter: Integer;

public

{ Public declarations }

end;

var

MainForm: TMainForm;

implementation

uses DB, ShellAPI, IniFiles, DBUnit,

Edit, About, Files, Delete, Data, Find,

Filter, User, Path;

{$R *.dfm}

procedure TMainForm.FormCreate(Sender: TObject);

begin

Root:=ExtractFilePath(Application.ExeName);

if not DirectoryExists(TmpDir) then

MkDir(TmpDir)

else

DeleteFiles(MainForm.Handle,Concat(Root,TmpDir,'*.*'));

MkDir(BrowseDir);

OpenCounter:=0;

end;

procedure TMainForm.FormActivate(Sender: TObject);

begin

RestoreIniFiles;

if not DataModule1.InitDBParams then Close;

DataModule1.SetAccess;

DataSetInsert.Enabled:=DataModule1.fWriter;

DataSetDelete.Enabled:=DataModule1.fWriter;

DataSetUpdate.Enabled:=DataModule1.fWriter;

DataSetRefrashExecute(Sender);

end;

procedure TMainForm.FormDestroy(Sender: TObject);

begin

DeleteFiles(MainForm.Handle,Concat(Root,TmpDir,'*.*'));

ChDir(Root);

RmDir(TmpDir);

SaveIniFiles;

end;

procedure TMainForm.SaveIniFiles;

var

F : TIniFile;

FN: ANSIString;

begin

FN:=Concat(Root,IniFile);

F:=TIniFile.Create(FN);

with F do

begin

WriteString('DataBase','Server',DataModule1.fServer);

WriteString('DataBase','File',DataModule1.fFile);

WriteString('DataBase','DefaultUser',DBDefaultUser);

WriteString('DataBase','DefaultPassword',DBDefaultPass);

WriteInteger('Window','State',Ord(WindowState));

WriteInteger('Window','Top',BoundsRect.Top);

WriteInteger('Window','Left',BoundsRect.Left);

WriteInteger('Window','Bottom',BoundsRect.Bottom);

WriteInteger('Window','Right',BoundsRect.Right);

WriteInteger('Window','Spliter',PanelMemo.Height);

WriteInteger('Memo','Top',PanelMemo.BoundsRect.Top);

WriteInteger('Memo','Bottom',PanelMemo.BoundsRect.Bottom);

WriteInteger('Grid','Author',DBGrid1.Columns.Items[0].Width);

WriteInteger('Grid','Title',DBGrid1.Columns.Items[1].Width);

WriteInteger('Grid','Language',DBGrid1.Columns.Items[2].Width);

WriteInteger('Grid','Archive',DBGrid1.Columns.Items[3].Width);

WriteInteger('Grid','File',DBGrid1.Columns.Items[4].Width);

WriteInteger('Options','Color',DBMemo1.Color);

WriteBool('Options','ConfDel',ConfirmDelete);

WriteInteger('Font','Charset',DBMemo1.Font.Charset);

WriteInteger('Font','Color',DBMemo1.Font.Color);

WriteInteger('Font','Height',DBMemo1.Font.Height);

WriteString('Font','Name',DBMemo1.Font.Name);

WriteInteger('Font','Pitch',Ord(DBMemo1.Font.Pitch));

WriteInteger('Font','Size',DBMemo1.Font.Size);

WriteBool('Font','Bold',fsBold in DBMemo1.Font.Style);

WriteBool('Font','Italic',fsItalic in DBMemo1.Font.Style);

WriteBool('Font','Underline',fsUnderline in DBMemo1.Font.Style);

WriteBool('Font','StrikeOut',fsStrikeOut in DBMemo1.Font.Style);

Free;

end;

end;

procedure TMainForm.RestoreIniFiles;

var

F : TIniFile;

FN : ANSIString;

WinSt: Byte;

WinTop: Integer;

WinLeft: Integer;

WinBottom: Integer;

WinRight: Integer;

X : LongInt;

S : ShortString;

begin

FN:=Concat(Root,IniFile);

if FileExists(FN) then

begin

F:=TIniFile.Create(FN);

with DataModule1 do

begin

fServer:=F.ReadString('DataBase','Server',DBDefaultServer);

fFile:=F.ReadString('DataBase','File',DBDefaultFile);

end;

DBDefaultUser:=F.ReadString('DataBase','DefaultUser',DBDefaultUser);

DBDefaultPass:=F.ReadString('DataBase',' Default Password',DBD efault Pass);

WinSt:=F.ReadInteger('Window','State',DefaultWinState);

case WinSt of

0: WindowState:=wsNormal;

1: WindowState:=wsMinimized;

2: WindowState:=wsMaximized;

end;

WinTop:=F.ReadInteger('Window','Top',DefaultWinTop);

WinLeft:=F.ReadInteger('Window','Left',DefaultWinLeft);

WinBottom:=F.ReadInteger('Window','Bottom',DefaultWinBottom);

WinRight:=F.ReadInteger('Window','Right',DefaultWinRight);

SetBounds(WinLeft,WinTop,WinRight-WinLeft,WinBottom-WinTop);

PanelMemo.Height:=F.ReadInteger('Window','Spliter',30);

with DBGrid1.Columns do

begin

Items[0].Width:=F.ReadInteger('Grid','Author',DefaultGrid1);

Items[1].Width:=F.ReadInteger('Grid','Title',DefaultGrid2);

Items[2].Width:=F.ReadInteger('Grid','Language',DefaultGrid3);

Items[3].Width:=F.ReadInteger('Grid','Archive',DefaultGrid4);

Items[4].Width:=F.ReadInteger('Grid','File',DefaultGrid5);

end;

X:=F.ReadInteger('Options','Color',DefaultColor);

DBGrid1.Color:=X;

DBMemo1.Color:=X;

Edit1.Color:=X;

ConfirmDelete:=F.ReadBool('Options','ConfDel',ConfirmDelete);

X:=F.ReadInteger('Font','Charset',DefaultFontCharset);

DBGrid1.Font.Charset:=X;

DBMemo1.Font.Charset:=X;

Edit1.Font.Charset:=X;

X:=F.ReadInteger('Font','Color',DefaultFontColor);

DBGrid1.Font.Color:=X;

DBMemo1.Font.Color:=X;

Edit1.Font.Color:=X;

X:=F.ReadInteger('Font','Height',DefaultFontHeight);

DBGrid1.Font.Height:=X;

DBMemo1.Font.Height:=X;

Edit1.Font.Height:=X;

S:=F.ReadString('Font','Name',DefaultFontName);

DBGrid1.Font.Name:=S;

DBMemo1.Font.Name:=S;

Edit1.Font.Name:=S;

X:=F.ReadInteger('Font','Pitch',DefaultFontPitch);

case X of

0:

begin

DBGrid1.Font.Pitch:=fpDefault;

DBMemo1.Font.Pitch:=fpDefault;

Edit1.Font.Pitch:=fpDefault;

end;

1:

begin

DBGrid1.Font.Pitch:=fpFixed;

DBMemo1.Font.Pitch:=fpFixed;

Edit1.Font.Pitch:=fpFixed;

end;

2:

begin

DBGrid1.Font.Pitch:=fpVariable;

DBMemo1.Font.Pitch:=fpVariable;

Edit1.Font.Pitch:=fpVariable;

end;

end;

X:=F.ReadInteger('Font','Size',DefaultFontSize);

DBGrid1.Font.Size:=X;

DBMemo1.Font.Size:=X;

Edit1.Font.Size:=X;

if F.ReadBool('Font','Bold',DefaultFontBold) then

begin

DBGrid1.Font.Style:=DBGrid1.Font.Style+[fsBold];

DBMemo1.Font.Style:=DBMemo1.Font.Style+[fsBold];

Edit1.Font.Style:=Edit1.Font.Style+[fsBold];

end;

if F.ReadBool('Font','Italic',DefaultFontItalic) then

begin

DBGrid1.Font.Style:=DBGrid1.Font.Style+[fsItalic];

DBMemo1.Font.Style:=DBMemo1.Font.Style+[fsItalic];

Edit1.Font.Style:=Edit1.Font.Style+[fsItalic];

end;

if F.ReadBool('Font','Underline',DefaultFontUnderline) then

begin

DBGrid1.Font.Style:=DBGrid1.Font.Style+[fsUnderline];

DBMemo1.Font.Style:=DBMemo1.Font.Style+[fsUnderline];

Edit1.Font.Style:=Edit1.Font.Style+[fsUnderline];

end;

if F.ReadBool('Font','StrikeOut',DefaultFontStrikeOut) then

begin

DBGrid1.Font.Style:=DBGrid1.Font.Style+[fsStrikeOut];

DBMemo1.Font.Style:=DBMemo1.Font.Style+[fsStrikeOut];

Edit1.Font.Style:=Edit1.Font.Style+[fsStrikeOut];

end;

F.Free;

end;

end;

procedure TMainForm.ApplicationEvents1Hint(Sender: TObject);

begin

StatusBar1.SimpleText:=Application.Hint;

end;

procedure TMainForm.RadioGroup1Click(Sender: TObject);

begin

DataSetRefrashExecute(Sender);

end;

procedure TMainForm.RadioGroup2Click(Sender: TObject);

begin

DataSetRefrashExecute(Sender);

end;

procedure TMainForm.DBGrid1DrawColumnCell(Sender: TObject;

const Rect: TRect; DataCol: Integer; Column: TColumn;

State: TGridDrawState);

begin

if (DataModule1.fWriter) and (gdFocused in State) then

if (Column.Field.FieldName = 'Author') or

(Column.Field.FieldName = 'Title') or

(Column.Field.FieldName = 'Language') then

begin

EditField:=Column.Field.FieldNo-1;

Edit1.Text:=Column.Field.AsString;

with Edit1 do

begin

Left := Rect.Left + DBGrid1.Left;

Top := Rect.Top + DBGrid1.Top+PanelGrid.Top+PanelMain.Top;

Width := Rect.Right - Rect.Left + 2;

Visible := True;

end;

end;

end;

procedure TMainForm.DBGrid1ColExit(Sender: TObject);

var

FldName : ShortString;

begin

if DataModule1.fWriter then

begin

FldName:=DBGrid1.SelectedField.FieldName;

if (FldName = 'Author') or

(FldName = 'Title') or

(FldName = 'Language') then

begin

Edit1.Visible := False;

end;

end;

end;

procedure TMainForm.DBGrid1KeyPress(Sender: TObject; var Key: Char);

var

FldName : ShortString;

begin

if DataModule1.fWriter then

begin

FldName:=DBGrid1.SelectedField.FieldName;

if (FldName = 'Author') or

(FldName = 'Title') or

(FldName = 'Language') then

if (Key <> Chr(9)) then

begin

Edit1.SetFocus;

SendMessage(Edit1.Handle, WM_CHAR, Word(Key), 0);

end;

end;

end;

procedure TMainForm.Edit1Exit(Sender: TObject);

const

NamePre='Update';

ParPre ='ip';

Par: array [1..5] of ShortString=('Aut', 'Tit', 'Lan', 'Typ' ,'Ext');

begin

with DataModule1, DataModule1.IBStoredProc1 do

if IBDataSet1.Fields.Fields[EditField].AsString<>Edit1.Text then

begin

StoredProcName:=NamePre+IBDataSet1.FieldList.Strings[EditField];

ParamByName(ParPre+Par[EditField]).Value:=Edit1.Text;

ParamByName('ipNum').Value:=IBDataSet1.Fields.Fields[0].AsInteger;

Prepare;

ExecProc;

DataSetRefrashExecute(Sender);

end;

end;

procedure TMainForm.DataSetInsertExecute(Sender: TObject);

var

N : Integer;

ArcName: ANSIString;

Stream : TMemoryStream;

Res : Boolean;

begin

if not Assigned (EditForm) then

EditForm:= TEditForm.Create (Application);

with EditForm do

begin

Caption:=InsertWinName;

ShowModal;

if ModalResult=mrOK then

begin

case RadioGroupSource.ItemIndex of

0:

begin

if Trim(EditNewArc.Text)<>'' then

ArcName:=GetNewArcName(EditNewArc.Text+ArcExt)

else

begin

ArcName:=ExtractFileLastDir(EditDir.Text);

ArcName:=GetNewArcName(LibDir+ArcName+ArcExt);

end;

Res:=PackFiles(ArcName,EditDir.Text+'\*.*');

end;

1:

begin

if (Trim(EditNewArc.Text)<>'') then

begin

ArcName:=GetNewArcName(EditNewArc.Text+ArcExt);

Res:=(CopyFiles(Application.Handle,EditArc.Text,ArcName)=0);

end

else

begin

ArcName:=EditArc.Text;

Res:=True;

end;

end;

2:

begin

if Trim(EditNewArc.Text)<>'' then

ArcName:=GetNewArcName(EditNewArc.Text+ArcExt)

else

begin

ArcName:=ExtractFileName(EditFile.Text);

DeleteFileExt(ArcName);

ArcName:=GetNewArcName(LibDir+ArcName+ArcExt);

end;

Res:=PackFiles(ArcName,EditFile.Text);

end;

end;

if Res then

begin

Stream:=TMemoryStream.Create;

Memo1.Lines.SaveToStream(Stream);

DataModule1.CallInsertBook(ComboBoxAut.Text,

ComboBoxTit.Text,

ComboBoxLan.Text,

Stream,

ArcName,

ExtractFileName(EditFile.Text),N);

Stream.Free;

MainForm.DataSetRefrashExecute(Sender);

DataModule1.IBDataSet1.Locate('Number',N,[loPartialKey]);

end;

end;

end;

end;

procedure TMainForm.DataSetDeleteExecute(Sender: TObject);

begin

if ConfirmDelete then

begin

if not Assigned (DeleteForm) then

DeleteForm:= TDeleteForm.Create (Application);

with DeleteForm do

begin

Caption:=DeleteWinName;

ShowModal;

end;

if (DeleteForm.ModalResult = mrYes) then

DataModule1.CallDeleteBook;

end

else

DataModule1.CallDeleteBook;

DataSetRefrashExecute(Sender);

end;

procedure TMainForm.DataSetUpdateExecute(Sender: TObject);

var

N : Integer;

ArcName: ANSIString;

Str : ANSIString;

Stream : TStream;

MStream: TMemoryStream;

Res : Boolean;

begin

if not Assigned (EditForm) then

EditForm:= TEditForm.Create (Application);

with EditForm do

begin

Caption:=EditWinName;

with DataModule1.IBDataSet1 do

begin

N:=Fields.Fields[0].AsInteger;

ComboBoxAut.Text:=Fields.Fields[1].AsString;

ComboBoxTit.Text:=Fields.Fields[2].AsString;

ComboBoxLan.Text:=Fields.Fields[3].AsString;

RadioGroupSource.ItemIndex:=1;

EditDir.Text:='';

EditArc.Text:='';

EditFile.Text:=FieldByName('File').AsString;

Stream:=CreateBLOBStream(FieldByName('Sections'),bmRead);

Memo1.Lines.LoadFromStream(Stream);

EditArc.Text:=FieldByName('Archive').AsString;

Stream.Free;

end;

ShowModal;

if ModalResult=mrOK then

begin

ArcName:=Root+TmpDir+TmpFile+'.rar';

case RadioGroupSource.ItemIndex of

0:

begin

if EditDir.Text<>'' then

begin

ArcName:=Concat(Root+TmpDir+TmpFile);

Res:=PackFiles(ArcName,EditDir.Text+'\*.*');

ArcName:=ArcName+'.rar';

end;

end;

1:

begin

if EditArc.Text<>'' then

begin

ArcName:=EditArc.Text;

Res:=True;

end;

end;

2:

begin

Str:=DataModule1.IBDataSet1.FieldByName('File').AsString;

if EditFile.Text<>Str then

begin

ArcName:=Root+TmpDir+TmpFile+'.rar';

Res:=PackFiles(ArcName,EditFile.Text);

end;

end;

end;

if Res then

begin

MStream:=TMemoryStream.Create;

Memo1.Lines.SaveToStream(MStream);

DataModule1.CallUpDateBook(N, ComboBoxAut.Text,

ComboBoxTit.Text,

ComboBoxLan.Text,

MStream,

ArcName,

ExtractFileName(EditFile.Text));

MStream.Free;

end;

if (RadioGroupSource.ItemIndex<>1) then

DeleteFiles(EditForm.Handle,ArcName);

DataSetRefrashExecute(Sender);

DataModule1.IBDataSet1.Locate('Number',N,[loPartialKey]);

end;

end;

end;

procedure TMainForm.DataSetRefrashExecute(Sender: TObject);

var

S: ShortString;

B: TBookmark;

begin

with DataModule1.IBDataSet1 do

begin

B:=GetBookMark;

Close;

SelectSQL.Clear;

SelectSQL.Add('SELECT * FROM "Library" ');

end;

if SortByNum.Checked then S:=SQLSortBy[0]

else if SortByAut.Checked then S:=SQLSortBy[1]

else if SortByTit.Checked then S:=SQLSortBy[2]

else if SortByLan.Checked then S:=SQLSortBy[3]

else if SortByNo.Checked then S:=SQLSortBy[4];

DataModule1.IBDataSet1.SelectSQL.Add(S);

if (not SortByNo.Checked) then

begin

if SortDirInc.Checked then S:=SqlSortDir[0]

else S:=SqlSortDir[1];

DataModule1.IBDataSet1.SelectSQL.Add(S);

end;

with DataModule1.IBDataSet1 do

begin

Open;

GotoBookmark(B);

FreeBookmark(B);

end;

end;

procedure TMainForm.DataSetOpenExecute(Sender: TObject);

var

ArcPath: ANSIString;

FName : ANSIString;

OpenDir: ShortString;

begin

Inc(OpenCounter);

OpenDir:=Root+TmpDir+IntToStr(OpenCounter)+'\';

MkDir(OpenDir);

ArcPath:=DataModule1.IBDataSet1.FieldByName('Archive').AsString;

UnPackFiles(ArcPath,OpenDir);

FName:=DataModule1.IBDataSet1.FieldByName('File').AsString;

FName:=Concat(OpenDir+FName);

OpenFile(FName,OpenDir);

end;

procedure TMainForm.DataSetFindExecute(Sender: TObject);

begin

if not Assigned (FindForm) then

FindForm:= TFindForm.Create (Application);

FindForm.ShowModal;

if (DataModule1.fSearchRec>=0) then

DatasetFindNext.Enabled:=True

else

DatasetFindNext.Enabled:=False;

end;

procedure TMainForm.DataSetFindNextExecute(Sender: TObject);

const

Txt=’Источник не найден';

WinName='Поиск источника';

var

KeyFlds : ShortString;

KeyVals : Variant;

Loc : TLocateOptions;

Res : Boolean;

BM : TBookmark;

begin

BM:=DataModule1.IBDataSet1.GetBookmark;

FindForm.GetLocateParams(KeyFlds,KeyVals,Loc);

Res:=DataModule1.IBDataSet1.LocateNext(KeyFlds,KeyVals,Loc);

with DataModule1 do

fSearchRec:=IBDataSet1.RecNo;

if not Res then

begin

DataModule1.IBDataSet1.GotoBookmark(BM);

DataModule1.fSearchRec:=-1;

DataSetFindNext.Enabled:=False;

Application.MessageBox(Txt,WinName,mb_OK);

end;

DataModule1.IBDataSet1.FreeBookmark(BM);

end;

procedure TMainForm.DataSetFilterExecute(Sender: TObject);

begin

if not Assigned (FilterForm) then

FilterForm:= TFilterForm.Create(Application);

FilterForm.ShowModal;

end;

procedure TMainForm.DataSetAllExecute(Sender: TObject);

begin

DataModule1.IBDataSet1.Filtered:=False;

end;

procedure TMainForm.FileDataBasePathExecute(Sender: TObject);

begin

if not Assigned (PathForm) then

PathForm:= TPathForm.Create(Application);

PathForm.ShowModal;

DataSetRefrashExecute(Sender);

end;

procedure TMainForm.FileUserExecute(Sender: TObject);

var

Path : AnsiString;

User : ShortString;

Pass : ShortString;

begin

if not Assigned (UserForm) then

UserForm:= TUserForm.Create(Application);

with UserForm do

begin

ShowModal;

if ModalResult=mrOK then

begin

Path:=DataModule1.IBDatabase1.DatabaseName;

User:=UserForm.leUser.Text;

Pass:=UserForm.lePass.Text;

if not DataModule1.Connect(Path,User,Pass) then Close;

DataSetRefrashExecute(Sender);

DataModule1.SetAccess;

DataSetInsert.Enabled:=DataModule1.fWriter;

DataSetDelete.Enabled:=DataModule1.fWriter;

DataSetUpdate.Enabled:=DataModule1.fWriter;

end;

end;

end;

procedure TMainForm.OptColorExecute(Sender: TObject);

begin

if ColorDialog1.Execute then

begin

DBGrid1.Color:=ColorDialog1.Color;

DBMemo1.Color:=ColorDialog1.Color;

Edit1.Color:=ColorDialog1.Color;

end;

end;

procedure TMainForm.OptFontExecute(Sender: TObject);

begin

if FontDialog1.Execute then

begin

DBGrid1.Font.Assign(FontDialog1.Font);

DBMemo1.Font.Assign(FontDialog1.Font);

Edit1.Font.Assign(FontDialog1.Font);

end;

end;

procedure TMainForm.OptConfDelExecute(Sender: TObject);

begin

ConfirmDelete:=not ConfirmDelete;

end;

procedure TMainForm.HelpAboutExecute(Sender: TObject);

begin

if not Assigned (AboutBox) then

AboutBox:= TAboutBox.Create (Application);

AboutBox.ShowModal;

end;

end.


Приложение Г

Листинг модуля DBUnit.pas

unit DBUnit;

interface

uses

SysUtils, Classes, DB, IBDatabase, IBCustomDataSet, IBQuery, IBStoredProc;

type

TDataModule1 = class(TDataModule)

DataSource1: TDataSource;

IBDatabase1: TIBDatabase;

IBTransaction1: TIBTransaction;

IBDataSet1: TIBDataSet;

IBStoredProc1: TIBStoredProc;

function Connect(Path:ANSIString;

User, Password: ShortString): Boolean;

function InitDBParams: Boolean;

procedure SetAccess;

procedure CallInsertBook(Aut, Tit, Lan: ShortString;

Sec: TStream;

Arc: ANSIString;

Fil: ShortString;

var Num: Integer);

procedure CallUpdateBook(Num: Integer;

Aut, Tit, Lan: ShortString;

Sec: TStream;

Arc: ANSIString;

Fil: ShortString);

procedure CallDeleteBook;

procedure SetFilter(CaseFlag: Boolean; Aut, Tit, Lan, Sec: ShortString);

function IsFieldContainStr(Field, S: ShortString): Boolean;

procedure IBDataSet1FilterRecord(DataSet: TDataSet; var Accept: Boolean);

procedure IBDataSet1AfterScroll(DataSet: TDataSet);

private

fCase : Boolean;

fFltrAut: ShortString;

fFltrTit: ShortString;

fFltrLan: ShortString;

fFltrSec: ShortString;

public

fSearchRec : Integer;

fSearchKey : ShortString;

fSearchCase: Boolean;

fWriter : Boolean;

fUser : ShortString;

fPass : ShortString;

fServer : ShortString;

fFile : ShortString;

end;

var

DataModule1: TDataModule1;

implementation

uses StrUtils, DBTables, Dialogs, Main, Data;

{$R *.dfm}

{ TDataModule1 }

function TDataModule1.Connect(Path:ANSIString;

User, Password: ShortString): Boolean;

const

ParamNames: array[0..3] of ShortString = (

'lc_ctype=',

'sql_role_name=',

'user_name=',

'password=');

CharSet='WIN1251';

SQLRole='3';

ErrPathUserPass='Неверный путь к базе или пароль пользователя';

ErrFatal='Соединение с базой данных не возможно';

var

OldUser: ShortString;

OldPass: ShortString;

OldPath: AnsiString;

begin

OldPath:='';

OldUser:='';

OldPass:='';

with IBDataBase1 do

begin

IBDataBase1.Connected:=False;

if Params.Count<>0 then

begin

OldUser:=fUser;

OldPass:=fPass;

OldPath:=DataBaseName;

end;

IBDataBase1.Params.Clear;

Params.Add(Concat(ParamNames[0],CharSet));

Params.Add(Concat(ParamNames[1],SQLRole));

Params.Add(Concat(ParamNames[2],User));

Params.Add(Concat(ParamNames[3],Password));

LoginPrompt:=False;

DatabaseName:=Path;

end;

try

IBDataBase1.Connected:=True;

fUser:=User;

fPass:=Password;

except

ShowMessage(ErrPathUserPass);

if (OldPath<>'') and (OldUser<>'') and (OldPass<>'') then

with IBDataBase1 do

begin

DatabaseName:=OldPath;

Params[2]:=OldUser;

Params[3]:=OldPass;

Connected:=False;

try

Connected:=True;

fUser:=User;

fPass:=Password;

except

ShowMessage(ErrFatal);

end;

end;

end;

Result:=IBDataBase1.Connected;

end;

function TDataModule1.InitDBParams: Boolean;

var

Path: ANSIString;

begin

fUser:=ParamStr(1);

fPass:=ParamStr(2);

fServer:=Paramstr(3);

fFile:=Paramstr(4);

if (fUser='') then fUser:=DBDefaultUser;

if (fPass='') then fPass:=DBDefaultPass;

if (fServer='') then fServer:=DBDefaultServer;

if (fFile='') then fFile:=DBDefaultFile;

Path:=Concat(fServer,':',fFile);

Result:=DataModule1.Connect(Path,fUser,fPass);

end;

procedure TDataModule1.SetAccess;

begin

with IBStoredProc1 do

begin

StoredProcName:='IsWriter';

Prepare;

try

ExecProc;

fWriter:=True;

except

fWriter:=False;

end;

end;

end;

procedure TDataModule1.CallInsertBook(Aut, Tit, Lan: ShortString;

Sec: TStream;

Arc: ANSIString;

Fil: ShortString;

var Num: Integer);

begin

with IBStoredProc1 do

begin

StoredProcName:='InsertBook';

ParamByName('ipAut').Value:=Aut;

ParamByName('ipTit').Value:=Tit;

ParamByName('ipLan').Value:=Lan;

ParamByName('ipSec').LoadFromStream(Sec,ftMemo);

ParamByName('ipArc').Value:=Arc;

ParamByName('ipFil').Value:=Fil;

Prepare;

ExecProc;

Num:=ParamByName('opNum').Value;

end;

end;

procedure TDataModule1.CallUpdateBook(Num: Integer;

Aut, Tit, Lan: ShortString;

Sec: TStream;

Arc: ANSIString;

Fil: ShortString);

begin

with IBStoredProc1 do

begin

StoredProcName:='UpdateBook';

ParamByName('ipNum').Value:=Num;

ParamByName('ipAut').Value:=Aut;

ParamByName('ipTit').Value:=Tit;

ParamByName('ipLan').Value:=Lan;

ParamByName('ipSec').LoadFromStream(Sec,ftMemo);

ParamByName('ipArc').Value:=Arc;

ParamByName('ipFil').Value:=Fil;

Prepare;

ExecProc;

end;

end;

procedure TDataModule1.CallDeleteBook;

begin

if (IBDataSet1.RecNo<>0) then

with IBStoredProc1 do

begin

StoredProcName:='DeleteBook';

ParamByName('Num').Value:=IBDataSet1.Fields.Fields[0].Value;

Prepare;

ExecProc;

end;

end;

procedure TDataModule1.SetFilter(CaseFlag: Boolean;

Aut, Tit, Lan,Sec: ShortString);

begin

fCase:=CaseFlag;

fFltrAut:=Aut;

fFltrTit:=Tit;

fFltrLan:=Lan;

fFltrSec:=Sec;

IBDataSet1.Filtered:=False;

IBDataSet1.Filtered:=True;

end;

function TDataModule1.IsFieldContainStr(Field, S: ShortString): Boolean;

begin

if Trim(S)<>'' then

if fCase then

Result:=ANSIContainsStr(Field,S)

else

Result:=ANSIContainsText(Field,S)

else

Result:=True;

end;

procedure TDataModule1.IBDataSet1FilterRecord(DataSet: TDataSet;

var Accept: Boolean);

var

Aut: Boolean;

Tit: Boolean;

Lan: Boolean;

Sec: Boolean;

begin

Aut:=IsFieldContainStr(DataSet['Author'],fFltrAut);

Tit:=IsFieldContainStr(DataSet['Title'],fFltrTit);

Lan:=IsFieldContainStr(DataSet['Language'],fFltrLan);

Sec:=IsFieldContainStr(DataSet['Sections'],fFltrSec);

Accept:=Aut and Tit and Lan and Sec;

end;

procedure TDataModule1.IBDataSet1AfterScroll(DataSet: TDataSet);

var

Stream: TStream;

begin

if not IBDataSet1.FieldByName('Sections').IsNull then

begin

Stream:=IBDataSet1.CreateBlobStream(IBDataSet1.FieldByName('Sections'),bmRead);

Stream.Free;

end;

end;

end.


Приложение Д

Листинг модуля Edit.pas

unit Edit;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls, Buttons, CheckLst, Mask, Menus, ActnList;

type

TEditForm = class(TForm)

Panel1: TPanel;

BCancel: TBitBtn;

BOK: TBitBtn;

Panel2: TPanel;

RadioGroupSource: TRadioGroup;

OpenDialogArc: TOpenDialog;

GroupBoxData: TGroupBox;

LabelTit: TLabel;

LabelLan: TLabel;

LabelTyp: TLabel;

LabelAut: TLabel;

ComboBoxAut: TComboBox;

ComboBoxTit: TComboBox;

ComboBoxLan: TComboBox;

GroupBoxSections: TGroupBox;

GroupBoxPath: TGroupBox;

LabelDir: TLabel;

EditDir: TEdit;

BBrowseDir: TBitBtn;

LabelArc: TLabel;

EditArc: TEdit;

BBrowseArc: TBitBtn;

LabelFile: TLabel;

EditFile: TEdit;

BBrowseFile: TBitBtn;

EditNewArc: TEdit;

LabelNewArc: TLabel;

Memo1: TMemo;

procedure FormActivate(Sender: TObject);

procedure SetComboBox(FieldNum: Integer; CBox: TComboBox);

procedure BBrowseArcClick(Sender: TObject);

procedure BBrowseFileClick(Sender: TObject);

procedure RadioGroupSourceClick(Sender: TObject);

procedure BBrowseDirClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

EditForm: TEditForm;

implementation

uses DB, DirSource, DBUnit, Files, Data;

{$R *.dfm}

procedure TEditForm.FormActivate(Sender: TObject);

begin

SetComboBox(1,ComboBoxAut);

SetComboBox(2,ComboBoxTit);

SetComboBox(3,ComboBoxLan);

RadioGroupSourceClick(Sender);

end;

procedure TEditForm.SetComboBox(FieldNum: Integer; CBox: TComboBox);

var

B : TBookmark;

S : ShortString;

Present: Boolean;

I : Integer;

begin

CBox.Items.Clear;

with DataModule1.IBDataSet1 do

begin

B:=GetBookmark;

First;

DisableControls;

while not EOF do

begin

S:=Fields.Fields[FieldNum].AsString;

if S<>'' then

begin

Present:=False;

for I:=0 to CBox.Items.Count-1 do

if S=CBox.Items.Strings[I] then

begin

Present:=True;

Break;

end;

if (not Present) then

CBox.Items.Add(S);

end;

Next;

end;

GotoBookmark(B);

FreeBookmark(B);

EnableControls;

end;

end;

procedure TEditForm.BBrowseArcClick(Sender: TObject);

begin

with OpenDialogArc do

begin

Title:='Поиск архива';

Filter :=

'Любые архивы|*.RAR;*ZIP;*ARJ'+

'Любые файлы|*.*'+

'RAR-архивы (*.rar)|*.RAR|'+

'ZIP-архивы (*.zip)|*.ZIP|'+

'ARJ-архивы (*.arj)|*.ARJ'; InitialDir:=InitDir;

if Execute then

begin

EditArc.Text:=FileName;

BBrowseFile.Enabled:=True;

EditFile.Text:='';

end;

end;

end;

procedure TEditForm.BBrowseFileClick(Sender: TObject);

var

ArcPath: ANSIString;

OpenDir: ANSIString;

Res : Boolean;

OpenDialogFile: TOpenDialog;

begin

Res:=True;

if RadioGroupSource.ItemIndex = 1 then

begin

Res:=CopyFiles(EditForm.Handle,EditArc.Text,

Root+TmpDir+ExtractFileName(EditArc.Text))=0;

if Res then

begin

ArcPath:=Concat(Root,TmpDir,ExtractFileName(EditArc.Text));

OpenDir:=Concat(Root,BrowseDir);

Res:=UnPackFiles(ArcPath,OpenDir);

end;

end;

if Res then

begin

OpenDialogFile:=TOpenDialog.Create(Application);

with OpenDialogFile do

begin

InitialDir:='E:\Andrew\';

Title:='Главный файл';

Filter :=

'Любые документы |'+

'*.TXT;*.DOC;*.RTF;*.WRI;*.PDF;*.HTM;*.HTML;*.SHTML;*.XML|'+

'Любые файлы (*.*)|*.*|'+

'Текстовые файлы (*.txt)|*.TXT|'+

'Докуметы Word(*.doc)|*.DOC|'+

'Rich Text Format(*.rtf)|*.RTF|'+

'Текст в формате WRI(*.wri)|*.WRI|'+

'Документы Acrobat (*.pdf)|*.PDF|'+

'Web-страницы(*.htm, *.html, *.shtml, *.xml)|*.HTM;*.HTML;*.SHTML;*. case RadioGroupSource.ItemIndex of

0: InitialDir:=DirSourceForm.ShellComboBox1.Path;

1: InitialDir:=Root+BrowseDir;

2: InitialDir:=InitDir;

end;

if Execute then

case RadioGroupSource.ItemIndex of

0: EditFile.Text:=ExtractFileName(FileName);

1: EditFile.Text:=ExtractFileName(FileName);

2: EditFile.Text:=FileName;

end;

end;

OpenDialogFile.Free;

end;

if RadioGroupSource.ItemIndex = 1 then

begin

DeleteFiles(EditForm.Handle,Root+BrowseDir+'*.*');

DeleteFiles(EditForm.Handle,Root+TmpDir+ExtractFileName(EditArc.Text));

end;

end;

procedure TEditForm.RadioGroupSourceClick(Sender: TObject);

begin

LabelDir.Enabled:=RadioGroupSource.ItemIndex = 0;

EditDir.Enabled:=RadioGroupSource.ItemIndex = 0;

BBrowseDir.Enabled:=RadioGroupSource.ItemIndex = 0;

LabelArc.Enabled:=RadioGroupSource.ItemIndex = 1;

EditArc.Enabled:=RadioGroupSource.ItemIndex = 1;

BBrowseArc.Enabled:=RadioGroupSource.ItemIndex = 1;

end;

procedure TEditForm.BBrowseDirClick(Sender: TObject);

begin

if not Assigned (DirSourceForm) then

DirSourceForm:= TDirSourceForm.Create (Application);

DirSourceForm.ShowModal;

if DirSourceForm.ModalResult = mrOK then

EditDir.Text:=DirSourceForm.ShellComboBox1.Path;

end;

end.


Приложение Е

Листинг модуля Delete.pas

unit Delete;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,

Buttons, ExtCtrls;

type

TDeleteForm = class(TForm)

Bevel1: TBevel;

Label1: TLabel;

BYes: TBitBtn;

BNo: TBitBtn;

Image1: TImage;

private

{ Private declarations }

public

{ Public declarations }

end;

var

DeleteForm: TDeleteForm;

implementation

{$R *.dfm}

end.


Приложение Ж

Листинг модуля Filter.pas

unit Filter;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons, ExtCtrls;

type

TFilterForm = class(TForm)

Panel1: TPanel;

Panel2: TPanel;

GBFilterValue: TGroupBox;

EditAut: TEdit;

EditTit: TEdit;

EditLan: TEdit;

LabelAut: TLabel;

LabelTit: TLabel;

LabelLan: TLabel;

BBOK: TBitBtn;

BBCancel: TBitBtn;

LabelSec: TLabel;

EditSec: TEdit;

CBCase: TCheckBox;

procedure FormDeactivate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

FilterForm: TFilterForm;

implementation

uses DB, DBUnit;

{$R *.dfm}

procedure TFilterForm.FormDeactivate(Sender: TObject);

begin

if ModalResult=mrOK then

DataModule1.SetFilter(CBCase.Checked,

EditAut.Text,

EditTit.Text,

EditLan.Text,

EditSec.Text);

end;

end.


Приложение З

Листинг модуля Find.pas

unit Find;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls, Buttons, DB;

type

TFindForm = class(TForm)

Panel1: TPanel;

BOK: TBitBtn;

Panel2: TPanel;

gbValue: TGroupBox;

LabelAut: TLabel;

LabelTit: TLabel;

LabelLan: TLabel;

LabelSec: TLabel;

EditAut: TEdit;

EditTit: TEdit;

EditLan: TEdit;

EditSec: TEdit;

BCancel: TBitBtn;

EditNum: TEdit;

LabelNum: TLabel;

gbParam: TGroupBox;

CheckBoxCase: TCheckBox;

CheckBoxSubStr: TCheckBox;

procedure FormDeactivate(Sender: TObject);

procedure SetFieldParams(FldNum: Byte;

var Fields: ShortString; var Values: Variant);

procedure GetLocateParams(var KeyFields: ShortString;

var KeyValues: Variant; var Options: TLocateOptions);

private

{ Private declarations }

public

{ Public declarations }

end;

var

FindForm: TFindForm;

implementation

uses DBUnit, Data;

{$R *.dfm}

procedure TFindForm.FormDeactivate(Sender: TObject);

const

Txt='Источник не найден';

WinName='Поиск источника';

var

KeyFlds : ShortString;

KeyVals : Variant;

Loc : TLocateOptions;

Res : Boolean;

BM : TBookmark;

begin

if ModalResult=mrOK then

begin

BM:=DataModule1.IBDataSet1.GetBookmark;

GetLocateParams(KeyFlds,KeyVals,Loc);

Res:=DataModule1.IBDataSet1.Locate(KeyFlds,KeyVals,Loc);

with DataModule1 do

fSearchRec:=IBDataSet1.RecNo;

if not Res then

begin

DataModule1.IBDataSet1.GotoBookmark(BM);

DataModule1.fSearchRec:=-1;

Application.MessageBox(Txt,WinName,mb_OK);

end;

DataModule1.IBDataSet1.FreeBookmark(BM);

end;

end;

procedure TFindForm.GetLocateParams(var KeyFields: ShortString;

var KeyValues: Variant; var Options: TLocateOptions);

begin

KeyFields:='';

KeyValues:=VarArrayOf([]);

SetFieldParams(0,KeyFields,KeyValues);

SetFieldParams(1,KeyFields,KeyValues);

SetFieldParams(2,KeyFields,KeyValues);

SetFieldParams(3,KeyFields,KeyValues);

SetFieldParams(4,KeyFields,KeyValues);

Options:=[];

if CheckBoxCase.Checked then

Options:=Options+[loCaseInsensitive];

if CheckBoxSubStr.Checked then

Options:=Options+[loPartialKey];

end;

procedure TFindForm.SetFieldParams(FldNum: Byte;

var Fields: ShortString; var Values: Variant);

var

S: ShortString;

N: Integer;

begin

case FldNum of

0: S:=EditNum.Text;

1: S:=EditAut.Text;

2: S:=EditTit.Text;

3: S:=EditLan.Text;

4: S:=EditSec.Text;

end;

S:=Trim(S);

if S<>'' then

begin

Fields:=Concat(Fields,FieldNames[FldNum],';');

N:=VarArrayHighBound(Values,1)+1;

VarArrayRedim(Values,N);

if (FldNum = 0) then

Values[N]:=StrToInt(S)

else

Values[N]:=S;

end;

end;

end.


Приложение И

Листинг модуля DirSource.pas

unit DirSource;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,

Buttons, ExtCtrls, ComCtrls, ShellCtrls;

type

TDirSourceForm = class(TForm)

Bevel1: TBevel;

BCancel: TBitBtn;

BOK: TBitBtn;

ShellComboBox1: TShellComboBox;

ShellTreeView1: TShellTreeView;

private

{ Private declarations }

public

{ Public declarations }

end;

var

DirSourceForm: TDirSourceForm;

implementation

{$R *.dfm}

end.


Приложение К

Листинг модуля Path.pas

unit Path;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls, Buttons;

type

TPathForm = class(TForm)

Panel1: TPanel;

BBOK: TBitBtn;

BBCancel: TBitBtn;

Panel2: TPanel;

leServer: TLabeledEdit;

leFile: TLabeledEdit;

procedure FormActivate(Sender: TObject);

procedure FormDeactivate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

PathForm: TPathForm;

implementation

uses Data, DBUnit;

{$R *.dfm}

procedure TPathForm.FormActivate(Sender: TObject);

begin

leServer.Text:=DataModule1.fServer;

leFile.Text:=DataModule1.fFile;

end;

procedure TPathForm.FormDeactivate(Sender: TObject);

var

Path : AnsiString;

User : ShortString;

Pass : ShortString;

begin

if ModalResult=mrOK then

begin

Path:=Concat(leServer.Text,':',lefile.Text);

User:=DataModule1.fUser;

Pass:=DataModule1.fPass;

if not DataModule1.Connect(Path,User,Pass) then Close;

end;

end;

end.


Приложение Л

Листинг модуля User.pas

unit User;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls, Buttons;

type

TUserForm = class(TForm)

Panel1: TPanel;

BBOK: TBitBtn;

BBCancel: TBitBtn;

Panel2: TPanel;

leUser: TLabeledEdit;

lePass: TLabeledEdit;

private

{ Private declarations }

public

{ Public declarations }

end;

var

UserForm: TUserForm;

implementation

{$R *.dfm}

end.


Приложение М

Листинг модуля About.pas

unit About;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,

Buttons, ExtCtrls, jpeg;

type

TAboutBox = class(TForm)

Panel1: TPanel;

ProgramIcon: TImage;

ProductName: TLabel;

Version: TLabel;

Copyright: TLabel;

Comments: TLabel;

BitBtnOK: TBitBtn;

Date: TLabel;

private

{ Private declarations }

public

{ Public declarations }

end;

var

AboutBox: TAboutBox;

implementation

{$R *.dfm}

end.


Приложение Н

Листинг модуля Data.pas

unit Data;

{$WRITEABLECONST ON}

interface

uses Graphics;

const

DBDefaultServer: ShortString ='Server-1';

DBDefaultFile: ANSIString ='G:\LibDB\Lib.gdb';

LibDir='\\Server-1\_Literature\__\';

InitDir='\\Server-1\_Literature\';

DBDefaultUser: ShortString ='GUEST';

DBDefaultPass: ShortString ='please';

IniFile='Lib.ini';

TmpDir='Tmp\';

BrowseDir=TmpDir+'Browse\';

TmpFile='Tmp';

ArcExt='.rar';

PathLen =1000;

InsertWinName=Добавление нового источника';

EditWinName='Редактирование источника ';

DeleteWinName='Удаление источника ';

FieldNames: array [0..4] of ShortString=(

'Number', 'Author', 'Title', 'Language', 'Sections');

SQLSortBy : array [0..4] of ShortString=(

'ORDER BY "Number" ',

'ORDER BY "Author" ',

'ORDER BY "Title" ',

'ORDER BY "Language" ',

'');

SQLSortDir: array [0..1] of ShortString=(

'',

'DESC');

DefaultWinState = 2;

DefaultWinTop = 0;

DefaultWinBottom = 0;

DefaultWinLeft = 400;

DefaultWinRight = 600;

DefaultMemoTop = 0;

DefaultMemoBottom = 0;

DefaultMemoLeft = 400;

DefaultMemoRight = 600;

DefaultGrid0= 36;

DefaultGrid1= 117;

DefaultGrid2= 279;

DefaultGrid3= 52;

DefaultGrid4= 150;

DefaultGrid5= 122;

DefaultColor= clWindow;

DefaultFontCharset= 1 ;

DefaultFontColor=clWindowText;

DefaultFontHeight=-11;

DefaultFontName='MS Sans Serif';

DefaultFontPitch=Ord(fpDefault);

DefaultFontSize=8;

DefaultFontBold=False;

DefaultFontItalic=False;

DefaultFontUnderLine=False;

DefaultFontStrikeOut=False;

ConfirmDelete: Boolean = True;

var

Root : ANSIString;

implementation

end.


Приложение О

Листинг модуля Files.pas

unit Files;

interface

uses Windows, SysUtils, Dialogs, IniFiles;

function CopyFiles(Handle:HWND; Source, Dest: ANSIString): Longint;

procedure DeleteFileExt(var Name:ANSIString);

function DeleteFiles(Handle:HWND; Source: ANSIString): Longint;

function ExtractFileLastDir(Name: ANSIString): ANSIString;

function GetNewArcName(Path: ShortString): ShortString;

procedure OpenFile(FileName: TFileName; Dir:ANSIString);

function PackFiles(ArcName, Path: ANSIString): Boolean;

function RunApp(Title, Name, CmdLn: ANSIString): DWORD;

function UnPackFiles(ArcName, Dir: ANSIString): Boolean;

implementation

uses ShellAPI, Forms, Classes, Data;

const

NError=3;

ErrorMsg: array[1..NError] of ShortString=(

'Упаковка файлов прервана',

'Распаковка временных файлов прервана',

'Файл неоткрывается');

RARName ='Rar.exe';

WinRARName='WinRar';

PackKey='a -ep1';

UnPackKey='x';

RARTitle='Óïàêîâêà ôàéëîâ';

Bl =' ';

function CopyFiles(Handle:HWND; Source, Dest: ANSIString): Longint;

var

F : TSHFileOpStruct;

Buffer1: array[0..4096] of Char;

Buffer2: array[0..4096] of Char;

S : PChar;

D : PChar;

begin

FillChar(Buffer1, SizeOf(Buffer1), #0);

FillChar(Buffer2, SizeOf(Buffer2), #0);

S := @Buffer1;

D := @Buffer2;

StrPCopy(S, Source);

StrPCopy(D, Dest);

FillChar(F, SizeOf(F), #0);

F.Wnd := Handle;

F.wFunc := FO_COPY;

F.pFrom := @Buffer1;

F.pTo := @Buffer2;

F.fFlags := 0;

Result:=SHFileOperation(F);

end;

procedure DeleteFileExt(var Name:ANSIString);

var

Ext : ShortString;

LenExt : Integer;

LenName: Integer;

begin

Ext:=ExtractFileExt(Name);

LenExt:=Length(Ext);

LenName:=Length(Name);

Delete(Name,LenName-LenExt+1,LenName);

end;

function DeleteFiles(Handle:HWND; Source: ANSIString): Longint;

var

F : TSHFileOpStruct;

Buffer: array[0..4096] of Char;

S : PChar;

begin

FillChar(Buffer, SizeOf(Buffer), #0);

S := @Buffer;

StrPCopy(S, Source);

FillChar(F, SizeOf(F), #0);

F.Wnd := Handle;

F.wFunc := FO_DELETE;

F.pFrom := @Buffer;

F.fFlags := FOF_NOCONFIRMATION;

Result:=SHFileOperation(F);

end;

function ExtractFileLastDir(Name: ANSIString): ANSIString;

var

I: Integer;

L: Integer;

begin

L:=Length(Name);

I:=L+1;

repeat

Dec(I);

until Name[I]='\';

Result:=Copy(Name,I,L-I);

end;

function GetNewArcName(Path: ShortString): ShortString;

var

ExtLen : Integer;

NameLen: Integer;

I : Integer;

Ext : ShortString;

Dir : ShortString;

Name : ShortString;

begin

Dir:=ExtractFilePath(Path);

Name:=ExtractFileName(Path);

if Trim(Name)='' then

Name:='Arc';

if FileExists(Dir+Name) then

begin

Ext:=ExtractFileExt(Name);

ExtLen:=Length(Ext);

NameLen:=Length(Name);

Insert('1',Name,NameLen-ExtLen+1);

I:=2;

while FileExists(Dir+Name) do

begin

Delete(Name,NameLen-ExtLen+1,Length(Name));

Name:=Concat(Name,IntToStr(I),Ext);

Inc(I);

end;

end;

Ext:=ExtractFileExt(Name);

if Ext='' then

Name:=Concat(Name,ArcExt);

Result:=Concat(Dir,Name);

end;

procedure OpenFile(FileName: TFileName; Dir:ANSIString);

var

PPath : PChar;

POpenDir: PChar;

Res : DWORD;

begin

FileName:=Concat(FileName);

GetMem(PPath,PathLen);

GetMem(POpenDir,Length(Dir)+1);

StrPCopy(POpenDir,Dir);

FindExecutable(PChar(FileName),PChar(Dir),PPath);

Res:=ShellExecute(Application.Handle,'open',PPath,PChar(FileName),

POpenDir,SW_SHOWNORMAL);

if Res<32 then

ShowMessage(ErrorMsg[3]);

FreeMem(POpenDir);

FreeMem(PPath);

end;

function PackFiles(ArcName, Path: ANSIString): Boolean;

var

Param : ShortString;

Res : DWORD;

PPath : PChar;

F : TFileStream;

FName : TFileName;

begin

FName:=Concat(Root,TmpDir,TmpFile,'1',ArcExt);

F:=TFileStream.Create(FName,fmCreate);

GetMem(PPath, PathLen);

if FindExecutable(PChar(FName),PChar(0),PPath)>32 then

begin

Param:=Concat(WinRARName,Bl,PackKey,Bl,ArcName,Bl,Path);

Res:=RunApp('',PPath,Param);

end

else

begin

Res:=0;

end;

if (Res<>0) then

begin

DeleteFiles(Application.Handle,ArcName);

ShowMessage(ErrorMsg[1]);

Result:=False;

end

else

Result:=True;

FreeMem(PPath);

F.Free;

DeleteFiles(Application.Handle,FName);

end;

function RunApp(Title, Name, CmdLn: ANSIString):DWORD;

var

Startup: TStartupInfo;

Process: TProcessInformation;

Status : DWORD;

Env : Pointer;

begin

ChDir(Root);

New(Env);

Startup.lpReserved := PChar(0);

Startup.lpDesktop := PChar(0);

Startup.lpTitle := PChar(Title);

Startup.dwFlags := STARTF_USESHOWWINDOW;

Startup.wShowWindow := SW_SHOWNORMAL;

Startup.cbReserved2 := 0;

Startup.lpReserved2 := PByte(0);

if CreateProcess(

PChar(Name), // lpApplicationName

PChar(CmdLn), // lpCommandLine

PSecurityAttributes(0), // lpProcessAttributes

PSecurityAttributes(0), // lpThreadAttributes

False, // bInheritHandles

NORMAL_PRIORITY_CLASS, // dwCreationFlags

Env, // lpEnvironment

PChar(0), // lpCurrentDirectory

Startup, // lpStartupInfo

Process // lpProcessInformation

)then

begin

GetExitCodeProcess(Process.hProcess, Status);

while Status = STILL_ACTIVE do

begin

Sleep(10);

GetExitCodeProcess(Process.hProcess, Status);

end;

end;

Dispose(Env);

Result:=Status;

end;

function UnPackFiles(ArcName, Dir: ANSIString): Boolean;

var

PPath : PChar;

Param : ShortString;

Res : DWORD;

begin

ArcName:=Concat('"',ArcName,'"');

GetMem(PPath, PathLen);

if FindExecutable(PChar(ArcName),PChar(0),PPath)>32 then

begin

Param:=Concat(WinRARName,Bl,UnPackKey,Bl,ArcName,Bl,Dir);

Res:=RunApp('',PPath,Param);

end

else

begin

Res:=0;

end;

FreeMem(PPath);

if Res<>0 then

begin

DeleteFiles(Application.Handle,Dir+'*.*');

ShowMessage(ErrorMsg[2]);

Result:=False;

end

else

Result:=True;

end;

end.


Информация о работе «Разработка базы данных»
Раздел: Информатика, программирование
Количество знаков с пробелами: 192006
Количество таблиц: 8
Количество изображений: 14

Похожие работы

Скачать
8227
2
24

... Таблица «Счет» Таблица «Товар» Таблица «Товар по счету» Таблица «Товарные группы» Лабораторная работа № 2. Разработка запросов отбора данных и вычислений Цель работы приобретение навыков в описании запросов к базе данных на языке QBE (Query by Example). Выборка неоплаченных счетов Результат выполнения: Выборка поставок Результат выполнения: Поиск ...

Скачать
29742
2
5

... : pered=record st:array[1..12] of string; m:byte; {количество строк в меню} end; temr,tt1,tt2,tt3,tt4:cc – Таблицы базы данных. Тут tt1 – таблица с данными о студентах, tt2 – предметы, tt3 – преподаватели, tt4 – оценки (успеваемость). Temr – временная таблица. Все эти переменные являются динамическими списками. Они описаны в файле tips.pas: tabl2=record {Сама ...

Скачать
45741
9
1

... от используемых в дальнейшем программных средств [1]. Для описания инфологической модели были использованы графические средства. Описание связи «объект-свойство» изображено на рис. 2.2.1 графического материала. База данных «Кадры» разрабатывается для хранения текстовой информации (хотя для удобства ввода некоторые поля таблиц – числовые), поэтому в приложении не будут применены вычисления ...

Скачать
17300
10
0

... проекта 1. Введение. Целью данного курсового проекта является структурирование данных и разработка пользовательского интерфейса. В курсовом проекте рассмотрены следующие теоретические вопросы и практические задания: ü  проведен системно-комплексный анализ выбранного объекта автоматизации ü  разработана структура пользовательского интерфейса автоматизированной системы &# ...

0 комментариев


Наверх