Разработка базы данных
Разработка удаленной базы данных и приложения-клиента для доступа к электронным источникам литературы, содержащихся на жестком диске сервера предприятия в виде упакованных архивов файлов и пакетов файлов. Реляционное исчисление доменов. Средства Delphi.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 24.03.2011 |
Размер файла | 2,7 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
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.
Размещено на Allbest.ru
Подобные документы
Разработка базы данных книжного магазина в среде программирования Delphi. Создание таблиц и их заполнение. Требования к составу и параметрам технических средств. База данных как набор файлов, содержащих информацию. Этапы создания приложения в Delphi.
курсовая работа [803,6 K], добавлен 04.11.2012Автоматизация подсистемы управления кадрами на ОАО Судостроительный завод "Лотос". Описание предметной области, построение инфологической и даталогической модели. Проектирование базы данных и разработка приложения. Взаимосвязь командных файлов в проекте.
дипломная работа [326,9 K], добавлен 02.10.2013Разработка информационной и инфологической модели базы данных на тему "Командировка". Выбор модели данных и составление ее концептуальной схемы. Получение доступа к БД средствами Delphi, разработка пользовательского интерфейса. Реализация SQL-запросов.
реферат [1,2 M], добавлен 16.06.2009Особенности работы "поисковика" дублирующихся файлов на диске. Выбор среды программирования. Разработка программного продукта. Основные требования, предъявляемые к программе, производящей поиск дублирующихся файлов на диске. Отображение скрытых файлов.
курсовая работа [1,8 M], добавлен 28.03.2015Построение банков данных. Инструментальные средства баз данных Borland. Принцип работы и архитектура баз данных в Delphi. Навигационный способ доступа к базам данных: операции с таблицей, сортировка и перемещение по набору данных, фильтрация записей.
курсовая работа [642,7 K], добавлен 06.02.2014Анализ данных предметной области. Информационно-логическая модель базы данных. Физическое проектирование и мероприятия по защите и обеспечению целостности базы данных. Приложение интерфейса для SQL-сервера базы данных на языке программирования Delphi.
курсовая работа [2,2 M], добавлен 30.05.2013Разработка приложения для работы с базой данных с использованием объектно-ориентированного и визуального программирования. Обзор языка элементов языка программирования Delphi. Проектирование базы данных автозаправки. Клиентская система приложения.
курсовая работа [2,3 M], добавлен 31.01.2016Разработка базы данных и приложения для автоматизации ведения кадрового учёта предприятия. Формирование таблицы анкетных данных. Разработка графического интерфейса пользователя клиентских приложений. Возможность подключения к удаленной базе данных.
дипломная работа [47,6 K], добавлен 17.02.2009Анализ предметной области, потребности различных категорий пользователей разрабатываемой базы данных. Описание концептуальной схемы и преобразование ее в реляционную БД. Создание ER-модели в среде ER-Win. Генерация файлов, разработка запросов в SQL.
курсовая работа [786,4 K], добавлен 15.12.2013- Создание базы данных автомобилестроительного предприятия в виде настольного приложения на языке Java
Разработка логической схемы базы данных автомобилестроительного предприятия. Инфологическое моделирование системы. Создание графического интерфейса пользователя для базы данных средствами языка программирования Java. Тестирование программных средств.
курсовая работа [2,3 M], добавлен 16.12.2013