如题
解决方案 »
- adoconnection控件怎么连接access?(急)
- dbimage 相片如何保存的问题
- 关于类继承?
- 高分,大家用什么控件做远程数据查询,用DataSetProvider说速度太慢
- 给200元(看清楚不是分啊),求一窗体实现。。。。
- 按照要求,我要自己写一个日期类,可以进行日期的基本运算,大家有什么好的建议?
- 我怎样把stringgrid转成excel表格
- Devexpress printing system的问题
- ide环境下,我的additional面板没有timer控件,我怎么搞???先答先抢分喽!
- 怎么样得到wm_lbuttondown消息消息的参数?求教
- 设置QuickRep的Page属性为自定义页后,为何不能打印?如何解决?
- 如何打包程序
unit BackUp_Form;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, TFlatGaugeUnit, StdCtrls, TFlatEditUnit, ExtCtrls,FileCtrl;type
TBackup_F = class(TForm)
Label1: TLabel;
Label2: TLabel;
ZT_FE: TFlatEdit;
JD_FG: TFlatGauge;
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Backup_F: TBackup_F;implementation{$R *.dfm}Uses
ExtIniFiles,StrUtils;function GetFileNum(dir:string):integer;
var
sr:Tsearchrec;
begin
result:=0;
if findfirst(dir,faanyfile,sr)=0 then
repeat
if(sr.Attr<>fadirectory)and(sr.Name<>'.')and(sr.Name<>'..') then
result:=result+1;
until findnext(sr)<>0;
end;
//***********************************************************************************
procedure Wait(second:Longint);
var
FirstTickCount:longint;
begin
FirstTickCount:=GetTickCount;
repeat
Application.ProcessMessages;
until ((GetTickCount-FirstTickCount) >=second);
end;
//***********************************************************************************
procedure TBackup_F.Timer1Timer(Sender: TObject);
var
myini:TExtIniFile;
cz,num:integer;
spath,dpath,name,RQ:string;
sr:Tsearchrec;
StartupInfo:TStartupInfo;
ProcessInfo:TProcessInformation;
begin
Timer1.Enabled:=false;
myini:=TExtIniFile.Create(ExtractFilePath(Application.ExeName)+'set.ini');
cz:=myini.ReadInteger('bakup','CZ',0);
if cz=0 then
begin
spath:=ExtractFilePath(Application.ExeName)+'Data';
dpath:=myini.ReadString('bakup','BakPath','');
dpath:=dpath+'\'+AnsiReplaceStr(DateTimeToStr(now),':','');
ForceDirectories(dpath);
num:=GetFileNum(spath+'\*.*');
ZT_FE.Text:='正在备份数据库......';
JD_FG.MaxValue:=num;
if findfirst(spath+'\*.*',faanyfile,sr)=0 then
repeat
if(sr.Attr<>fadirectory)and(sr.Name<>'.')and(sr.Name<>'..') then
begin
copyfile(pchar(spath+'\'+sr.Name),pchar(dpath+'\'+sr.Name),false);
JD_FG.Progress:=JD_FG.Progress+1;
end;
Wait(100);
until findnext(sr)<>0;
ZT_FE.Text:='数据库备份成功';
MessageBox(handle,'恭喜你:数据库备份成功!','祝贺你',MB_OK or MB_ICONINFORMATION);
end
else begin
RQ:=myini.ReadString('bakup','RQ','');
spath:=myini.ReadString('bakupdian',RQ,'');
spath:=spath+'\'+RQ;
dpath:=ExtractFilePath(Application.ExeName);
dpath:=dpath+'Data';
num:=GetFileNum(spath+'\*.*');
ZT_FE.Text:='正在还原数据库......';
JD_FG.MaxValue:=num;
if findfirst(spath+'\*.*',faanyfile,sr)=0 then
repeat
if(sr.Attr<>fadirectory)and(sr.Name<>'.')and(sr.Name<>'..') then
begin
copyfile(pchar(spath+'\'+sr.Name),pchar(dpath+'\'+sr.Name),false);
JD_FG.Progress:=JD_FG.Progress+1;
end;
Wait(100);
until findnext(sr)<>0;
ZT_FE.Text:='数据库还原成功';
MessageBox(handle,'恭喜你:数据库还原成功!','祝贺你',MB_OK or MB_ICONINFORMATION);
end;
StartupInfo.cb:=sizeof(StartupInfo);
FillChar(StartupInfo,Sizeof(StartupInfo),#0);
CreateProcess(pchar(ExtractFilePath(Application.ExeName)+'TSGL.exe'),nil,nil,nil,false,0,nil,nil,StartupInfo,ProcessInfo);
close;
end;end.
我不明白呵呵~~才疏学浅.....
学习...
我sql server 不熟,郁闷...
var
SourcePath: string;
begin
SELF.Caption := application.Title + ' - 数据备份';
B_showmessage := true;
SourcePath := ExtractFileDir(Application.ExeName);
//取得应用程序路径
if (StrLen(PChar(SourcePath)) <> 3) then
SourcePath := SourcePath + '\';
Edit_path.Text := SourcePath + 'BAK\Haishi' + formatdatetime('yyyymmdd',
date) + '.back';
//设置路径名+文件名
end;procedure TFrm_shuju_weihu.Edit_pathChange(Sender: TObject);
begin
if trim(Edit_path.Text) <> '' then
BackData.Enabled := True
else
RecoverData.Enabled := False; //当路径框中为空时候, 恢复数据不可用
end;procedure TFrm_shuju_weihu.BackDataClick(Sender: TObject);
begin
self.Caption := '正在备份数据....';
a1.Visible :=true;
a1.Active := true;
Dm_data.cback.CommandText := 'backup database TaxKP to disk=''' + Edit_path.Text +
''''; //备份数据库命令语句
try
Dm_data.cback.Execute;
// 执行备份
a1.Active := false;
showmessage(' 备份成功!'); except
showmessage(' 备份失败!');
a1.Active := false;
a1.Visible :=false;;
end;
self.Caption := '数据备份和恢复';
end;procedure TFrm_shuju_weihu.RecoverDataClick(Sender: TObject);
var
DataPath: string;
begin
self.Caption := '正在恢复数据....';
try
Dm_Data.backconn.Close;
Dm_Data.backconn.Connected := false;
except
MessageBox(0, '关闭数据库错误', '错误', MB_OK + MB_ICONSTOP + MB_TOPMOST);
end; OpenDialog1.Filter := '备份文件 (*.back)|*.back|所有文件 (*.*)|*.*';
//设置备份文件后缀
OpenDialog1.InitialDir := ExtractFileDir(Application.ExeName) + '\Bak';
//设置备份路径
if OpenDialog1.Execute then
DataPath := OpenDialog1.FileName;
if DataPath <> '' then
begin
if
application.MessageBox('此操作将使上次备份以来的所有数据丢失,是否继续?',
'恢复数据', MB_OKCANCEL) = idOK then
begin
a1.Visible :=true;
a1.Active := true;
Dm_Data.backconn.Connected := True;
Dm_Data.cback.Connection := Dm_Data.backconn;
Dm_Data.cback.CommandText :=
'ALTER DATABASE TaxKp SET OFFLINE WITH ROLLBACK IMMEDIATE'; //切断连接
Dm_Data.cback.Execute;
Dm_Data.cback.CommandText := 'restore database TaxKp from disk=''' + DataPath +
'''' + ' with replace'; //恢复数据命令语句
try
try
Dm_Data.cback.Execute;
//执行恢复过程
a1.Visible :=false;
showmessage(' 恢复成功!'); except
showmessage('数据库正在被使用!请确定已关闭其它使用该数据库程序!');
showmessage(' 恢复失败!');
end;
finally
a1.Active := false;
a1.Visible :=false;
// showmessage('start');
Dm_Data.cback.CommandText :=
'ALTER DATABASE TaxKp SET ONLINE WITH ROLLBACK IMMEDIATE'; //重新连接数据库
Dm_Data.cback.Execute;
// 关闭临时数据库
Dm_Data.backconn.Connected := False;
// 打开数据库
// Dm_Data.ClientFamily.CommandText := 'select * from ClientFamilyTable';
Dm_data.AdoCN_Data.Connected := True;
// showmessage('Dm_data.AdoCN_Data.Connected := True');
try
// 打开各个数据表是否有错误
Dm_Data.Ads_Login_User.Open;
Dm_Data.Ads_rizhi.Open;
// Dm_Data.client.Open;
// Dm_Data.Toper.Open;
// Dm_Data.Tuser.Open;
// Dm_Data.ZHBX.Open;
// Dm_Data.Model.Open;
// Dm_Data.ClientFamily.Open;
// Dm_Data.ChargeItem.Open;
// Dm_Data.ClientRoom.Open;
// Dm_Data.Charge.Open;
// Dm_Data.ClientPay.Open;
// Dm_Data.ClientAdvance.Open;
except showmessage('程序运行发生不可预知错误,请重新启动程序!');
//结束该程序 Application.Terminate;
end;
end;
end;
end;
self.Caption := '数据备份和恢复';
end;procedure TFrm_shuju_weihu.BrowseBtnClick(Sender: TObject);
begin
Application.CreateForm(TSelectDir, SelectDir); //显示路径选择窗体
SelectDir.DriveComboBox1.Text := ExtractFileDrive(Edit_path.Text);
if (FileExists(Edit_path.Text)) then //检测路径是否存在
SelectDir.DirectoryListBox1.Directory := Edit_path.Text;
if (SelectDir.ShowModal = mrOK) then //当返回值为mrOK时,得到选择的路径
Edit_path.Text := SelectDir.Label3.Caption + '\TaxFp' +
formatdatetime('yyyymmdd', date) + '.back';
SelectDir.free;
end;end.
有没有讲思路讲得明白一点的说法,麻烦给我讲一下
begin
Application.MessageBox('文件路径不能为空,请选择!','提示!',mb_ok+ mb_iconstop);
Exit;
end;
DM.CLE_Connect.Connected := False;
MySQL := 'ALTER DATABASE DB_CLE SET OFFLINE WITH ROLLBACK IMMEDIATE';
with ADOQueryRestor do
begin
Close;
SQL.Clear;
SQL.Text := MySQL;
try
ExecSQL;
except end;
end;
RestorStr := 'RESTORE DATABASE DB_CLE FROM DISK = ''' + Trim(e_lj.Text) + ''' WITH REPLACE';
with ADOQueryRestor do
begin
Close;
SQL.Clear;
SQL.Text := RestorStr;
try
ExecSQL;
Application.MessageBox('恢复数据库成功!','提示!',mb_ok+mb_iconinformation);
except
Application.MessageBox('恢复数据库出错!','错误!',mb_ok+mb_iconError);
end;
end;
MySQL := 'ALTER DATABASE DB_CLE SET ONLINE WITH ROLLBACK IMMEDIATE';
with ADOQueryRestor do
begin
Close;
SQL.Clear;
SQL.Text := MySQL;
try
ExecSQL;
except end;
end;
DM.CLE_Connect.Connected := True;
要还原的话,就选择Restore Database再选择从设备选择你备份的数据。其余跟着向导来做就行了。