?? main.pas
字號:
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls, ComCtrls, DB, DBTables, Grids, DBGrids,ComObj,
Excel2000, OleServer, ADODB;
type
Tfrmmain = class(TForm)
MainMenu1: TMainMenu;
menuysxm: TMenuItem;
menudbfwh: TMenuItem;
submenudbfbf: TMenuItem;
submenudbfhf: TMenuItem;
menufzgl: TMenuItem;
submenuyskm: TMenuItem;
submenuyskmlb: TMenuItem;
submenuglbm: TMenuItem;
submenugsbm: TMenuItem;
submenupzmc: TMenuItem;
menuxtgl: TMenuItem;
menuquit: TMenuItem;
conn: TADOConnection;
ADOQuery1: TADOQuery;
menuysxmxc: TMenuItem;
ADOQuery2: TADOQuery;
procedure menuxtglClick(Sender: TObject);
procedure menuquitClick(Sender: TObject);
procedure submenuyskmlbClick(Sender: TObject);
procedure submenuyskmClick(Sender: TObject);
procedure submenupzmcClick(Sender: TObject);
procedure submenugsbmClick(Sender: TObject);
procedure submenuglbmClick(Sender: TObject);
procedure menuysxmClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure submenudbfbfClick(Sender: TObject);
procedure submenudbfhfClick(Sender: TObject);
procedure menuysxmxcClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure writename(name:string);
end;
var
frmmain: Tfrmmain;
//記錄用戶名
username:string;
//記錄用戶密碼
userpwd:string;
//記錄用戶權(quán)限
userqx:string;
//記錄數(shù)據(jù)庫連接字符串
adoconn:string;
//記錄數(shù)據(jù)庫備份文件存放的路徑
path:string;
implementation
uses Unit2, yskmlb, yskm, pzlb, fygsbm, gkglbm, kjyw, login, splash,
display, dbfxz, search, Unit1, ts;
{$R *.dfm}
procedure Tfrmmain.menuxtglClick(Sender: TObject);
begin
frmuser:=tfrmuser.create(application);
frmuser.ShowModal;
// frmuser.Close;
frmuser.Free;
end;
procedure Tfrmmain.menuquitClick(Sender: TObject);
begin
close;
end;
procedure Tfrmmain.submenuyskmlbClick(Sender: TObject);
begin
frmyskmlb:=tfrmyskmlb.create(application);
frmyskmlb.ShowModal;
//frmyskmlb.Close;
frmyskmlb.Free;
end;
procedure Tfrmmain.submenuyskmClick(Sender: TObject);
begin
frmyskm:=tfrmyskm.create(application);
frmyskm.ShowModal;
frmyskm.Close;
frmyskm.Free;
end;
procedure Tfrmmain.submenupzmcClick(Sender: TObject);
begin
frmpzlb:=tfrmpzlb.create(application);
frmpzlb.ShowModal;
frmpzlb.Close;
frmpzlb.Free;
end;
procedure Tfrmmain.submenugsbmClick(Sender: TObject);
begin
frmfygsbm:=tfrmfygsbm.create(application);
frmfygsbm.ShowModal;
//frmfygsbm.Close ;
frmfygsbm.Free;
end;
procedure Tfrmmain.submenuglbmClick(Sender: TObject);
begin
frmgkglbm:=tfrmgkglbm.create(application);
frmgkglbm.ShowModal;
// frmgkglbm.Close;
frmgkglbm.Free;
end;
procedure Tfrmmain.menuysxmClick(Sender: TObject);
begin
//建立“預算項目管理”的窗體對象
frmkjyw:=tfrmkjyw.create(application);
// 顯示“預算項目管理”窗口
frmkjyw.ShowModal;
//關(guān)閉“預算項目管理”窗口
frmkjyw.Close;
//釋放“預算項目管理”窗口占用的資源
frmkjyw.Free;
end;
procedure Tfrmmain.FormShow(Sender: TObject);
var
//模式對話框返回值
rt:integer;
//登陸時允許的失敗次數(shù)
n:integer;
begin
n:=0;
frmsplash:=tfrmsplash.create(application);
frmsplash.ShowModal;
//frmsplash.Free;
frmlogin:=tfrmlogin.create(application);
while n<3 do
begin
rt:=frmlogin.ShowModal ;
//用戶按'取消'按鈕
if rt=mrcancel then
begin
close;
exit;
end
else if (rt=mrok) and frmlogin.canpass then
//用戶登陸成功
begin
username:=frmlogin.comboxname.text;
userpwd:=frmlogin.editpass.text;
userqx:=frmlogin.Querycompanyuser.FieldValues['yhjb'];
frmlogin.Close;
frmlogin.Free;
if userqx='一般人員' then
begin
frmmain.menuysxm.Enabled:=false;
frmmain.menufzgl.Enabled:=false;
frmmain.menudbfwh.enabled:=false;
frmmain.menuxtgl.Enabled:=false;
end;
exit;
end
else
//用戶登陸失敗
begin
//失敗次數(shù)加1
n:=n+1;
if n>=3 then
//用戶登陸失敗次數(shù)超過3次
begin
messagedlg('您已經(jīng)登陸失敗3次,程序?qū)⒅兄?#039;,mtwarning,[mbok],0);
close;
application.Terminate;
exit;
end
//重新嘗試登陸
else
messagedlg('密碼錯誤,請重試',mtwarning,[mbok],0);
end
end
end;
procedure Tfrmmain.submenudbfbfClick(Sender: TObject);
var
path:string;
str:string;
begin
if MessageDlg('準備備份數(shù)據(jù)庫,您確認備份數(shù)據(jù)庫嗎?',mtInformation,[mbYes,mbNo],0)=mrno THEN
exit;
//改變光標的顯示狀態(tài)為工作忙狀態(tài)
Screen.Cursor:= crHourGlass;
str := path+'backup\ysglbookdedelphi'+datetostr(Date);
//判斷系統(tǒng)設(shè)備表中是否存在設(shè)備名為ysgldelphibak的設(shè)備,如果沒有則創(chuàng)建
//設(shè)備名為ysgldelphibak的設(shè)備
If adoquery1.EOF = True Then
//系統(tǒng)設(shè)備表中沒有設(shè)備名為ysgldelphibak的設(shè)備,創(chuàng)建設(shè)備名為ysgldelphibakk的設(shè)備
begin
conn.Execute ('EXECute sp_addumpdevice '''+'disk'','''+'ysgldelphibak'','''+str+'.bak''');
//備份當前數(shù)據(jù)庫
conn.Execute ('BACKUP DATABASE [ysglbookdelphi] TO [ysgldelphibak] WITH INIT ,NOUNLOAD , NOSKIP , STATS = 10, NOFORMAT ');
//刪除設(shè)備名為ysgldelphibak的設(shè)備
conn.Execute ('execute sp_dropdevice '''+'ysgldelphibak''');
end
Else
//系統(tǒng)設(shè)備表中存在設(shè)備名為ysgldelphibak的設(shè)備,備份當前數(shù)據(jù)庫
conn.Execute ('BACKUP DATABASE [ysgl2004bookdelphi] TO [ysgldelphibak] WITH INIT ,NOUNLOAD , NOSKIP , STATS = 10, NOFORMAT ');
str :='ysglbookdedelphi'+datetostr(Date);
writename(str);
Screen.Cursor:=crArrow ;
showmessage('備份成功');
end;
procedure Tfrmmain.writename(name:string);
var
f: TextFile;
filename:string;
str:string;
begin
//獲得“預算管理.ini配置文件“的具體路徑
filename:=extractfilepath(application.ExeName)+'bfwj.txt';
{$I-}
//將配置文件與文件變量關(guān)聯(lián)
AssignFile(f, filename);
//以附加文本方式打開文件
append(f);
//在文件末尾添加數(shù)據(jù)庫備份文件名
writeln(f, name);
//關(guān)閉文件
CloseFile(F);
end;
procedure Tfrmmain.submenudbfhfClick(Sender: TObject);
var
//模式對話框返回值
rt:integer;
path:string;
str:string;
begin
//建立數(shù)據(jù)庫備份選擇窗口
frmdbfxz:=tfrmdbfxz.create(application);
//選擇數(shù)據(jù)庫備份選擇窗口
rt:=frmdbfxz.ShowModal;
if rt=mrcancel then
begin
exit;
end;
//提示用戶將進行數(shù)據(jù)的恢復操作
if MessageDlg('準備恢復數(shù)據(jù)庫,請關(guān)閉所有使用該數(shù)據(jù)庫的應(yīng)用程序,您確認恢復數(shù)據(jù)庫嗎?'
,mtInformation,[mbYes,mbNo],0)=mrno THEN
//用戶選擇了“取消”按鈕,取消數(shù)據(jù)庫恢復操作
begin
exit;
end;
//獲得用戶選擇的數(shù)據(jù)庫備份的文件名
str := path+'backup\'+frmdbfxz.listboxdbf.Items.Strings[frmdbfxz.listboxdbf.itemindex];
//關(guān)閉數(shù)據(jù)庫備份選擇窗口
frmdbfxz.Close;
//釋放數(shù)據(jù)庫備份選擇窗口占用的資源
frmdbfxz.Free;
//改變光標的顯示狀態(tài)為工作忙狀態(tài)
Screen.Cursor:= crHourGlass;
//判斷是否有使用欲恢復的數(shù)據(jù)庫的應(yīng)用程序
While adoquery2.EOF = False do
//存在使用欲恢復的數(shù)據(jù)庫的應(yīng)用程序或進程
begin
//停止使用欲恢復的數(shù)據(jù)庫的應(yīng)用程序或進程
str := 'kill '+inttostr(adoquery2.FieldValues['spid']);
conn.Execute(str);
adoquery2.MoveBy(1);
end;
//判斷系統(tǒng)設(shè)備表中是否存在設(shè)備名為ysgldelphibak的設(shè)備,如果沒有則創(chuàng)建設(shè)備名為
//ysgldelphibak的設(shè)備
If adoquery1.EOF = True Then
//系統(tǒng)設(shè)備表中沒有設(shè)備名為ysgldelphibak的設(shè)備,創(chuàng)建設(shè)備名為ysgldelphibak的設(shè)備
begin
conn.Execute ('EXECute sp_addumpdevice '''+'disk'','''+'ysgldelphibak'','''+str+'.bak''');
//恢復當前數(shù)據(jù)庫
conn.Execute ('restore DATABASE [ysgl2004bookdelphi] TO [ysgldelphibak]');
//刪除設(shè)備名為ysglbak的設(shè)備
conn.Execute ('execute sp_dropdevice '''+'ysgldelphibak''');
end
Else
//系統(tǒng)設(shè)備表中存在設(shè)備名為ysglbak的設(shè)備,恢復當前數(shù)據(jù)庫
conn.Execute ('restore DATABASE [ysgl2004bookdelphi] from [ysgldelphibak]');
Screen.Cursor:= crArrow;
showmessage('恢復成功')
end;
procedure Tfrmmain.menuysxmxcClick(Sender: TObject);
begin
frmsearch:=tfrmsearch.create(application);
frmsearch.ShowModal;
frmsearch.Close;
frmsearch.Free;
end;
procedure Tfrmmain.FormCreate(Sender: TObject);
var
f: TextFile;
filename:string;
begin
//獲得“預算管理.ini配置文件“的具體路徑
filename:=extractfilepath(application.ExeName)+'預算管理.ini';
{$I-}
//將配置文件與文件變量關(guān)聯(lián)
AssignFile(f, filename);
//以只讀方式打開配置文件
reset(f);
//讀出數(shù)據(jù)庫連接字符串
readln(f,adoconn);
//讀出數(shù)據(jù)庫的備份路徑
readln(f,path);
//關(guān)閉配置文件
CloseFile(F);
//配置conn控件的數(shù)據(jù)庫連接字符串
conn.ConnectionString:=adoconn;
conn.Connected:=true;
end;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -