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.
... Таблица «Счет» Таблица «Товар» Таблица «Товар по счету» Таблица «Товарные группы» Лабораторная работа № 2. Разработка запросов отбора данных и вычислений Цель работы приобретение навыков в описании запросов к базе данных на языке QBE (Query by Example). Выборка неоплаченных счетов Результат выполнения: Выборка поставок Результат выполнения: Поиск ...
... : 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 {Сама ...
... от используемых в дальнейшем программных средств [1]. Для описания инфологической модели были использованы графические средства. Описание связи «объект-свойство» изображено на рис. 2.2.1 графического материала. База данных «Кадры» разрабатывается для хранения текстовой информации (хотя для удобства ввода некоторые поля таблиц – числовые), поэтому в приложении не будут применены вычисления ...
... проекта 1. Введение. Целью данного курсового проекта является структурирование данных и разработка пользовательского интерфейса. В курсовом проекте рассмотрены следующие теоретические вопросы и практические задания: ü проведен системно-комплексный анализ выбранного объекта автоматизации ü разработана структура пользовательского интерфейса автоматизированной системы ...
0 комментариев