怎样实现在应用程序中实现数据库的的备份和还原?谢谢! 怎样实现在应用程序中实现数据库的的备份和还原功能?谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我使用的sql-server数据库,谢谢大家! 这是我的代码//备份procedure TDBBackupForm.XP_Button2Click(Sender: TObject);begin pgbar.Max:=100; pgbar.Min:=0; pgbar.Position:=0; pgbar.Step:=20; With SaveDialog1 do begin filename:='DB'+FormatDateTime('yy_MM_dd_hh_mm_ss',Now); options:=[ofhidereadonly,offilemustexist,ofpathmustexist]; if execute then begin label1.Caption:='正在备份中...'; DataModule1.ADOConnection1.Close; TmpStr:= ExtractFileName(filename); strlen:= Length(TmpStr); DevName:= Copy(TmpStr,1,strlen-4); begin try ADOCommand1.CommandText:='use Master'; pgbar.StepIt; ADOCommand1.Execute; adocommand1.CommandText:='execute sp_helpdevice'; pgbar.StepIt; adocommand1.Execute ; pgbar.stepit; adocommand1.CommandText:='backup database '+InitDB+' to disk='''+filename+''' with init'; pgbar.StepIt; adocommand1.Execute ; adocommand1.CommandText:='Use '+InitDB; pgbar.StepIt; adocommand1.Execute ; Self.Hide; ShowMessage('数据库已经成功备份到 '+filename+'!'); Try DataModule1.ADOConnection1.Connected:= True; Except ShowMessage('无法重新接连数据库!,系统即将退出!'); Application.Terminate; End; self.Close; Except On Exception do if DataModule1.ADOConnection1.InTransaction then DataModule1.ADOConnection1.RollbackTrans; End; End; end; end;end;procedure TDBBackupForm.FormActivate(Sender: TObject);begin//从INI文件中读出数据库的相关信息 SYSINI := TIniFile.Create(ExtractFilePath(Application.ExeName)+'DB.INI'); try InitDB := SYSINI.ReadString('Database', 'InitDB', ''); finally SYSINI.Free; end;end;//还原数据库procedure TDBBackupForm.XP_Button3Click(Sender: TObject);begin pgbar.Max:=100; pgbar.Min:=0; pgbar.Position:=0; pgbar.Step:=20; With OpenDialog1 do begin filename:=''; options:=[ofhidereadonly,offilemustexist,ofpathmustexist]; if execute then begin label1.Caption:='正在还原中...'; DataModule1.ADOConnection1.Close; TmpStr:= ExtractFileName(filename); strlen:= Length(TmpStr); DevName:= Copy(TmpStr,1,strlen-4); pgbar.StepIt; try ADOCommand1.CommandText:='use Master'; ADOCommand1.Execute; pgbar.StepIt; adocommand1.CommandText:='execute sp_helpdevice'; adocommand1.Execute ; pgbar.stepit; adocommand1.CommandText:='Restore database '+InitDB+' From disk='''+filename+''' with replace'; pgbar.StepIt; adocommand1.Execute ; adocommand1.CommandText:='Use '+InitDB; pgbar.StepIt; adocommand1.Execute ; Self.Hide; ShowMessage('数据库已经成功还原到数据库 '+InitDB+'!'); Try DataModule1.ADOConnection1.Connected:= True; Except ShowMessage('无法重新接连数据库!,系统即将退出!'); Application.Terminate; End; self.Close; Except On Exception do if DataModule1.ADOConnection1.InTransaction then DataModule1.ADOConnection1.RollbackTrans; End; end; end;end; 不知道你说的数据库备份和还原是整个SQL Server中某个数据库的备份还原还是某个table的建表备份 还是只备份数据 ?如果是整个数据库的备份dump database 数据库名 to disk=存盘路径 with init如果是还原数据库restore database 数据库名 from disk存盘路径 with recovery这样就可以了可以做成存储过程 谢谢大家,restore database 数据库名 from disk存盘路径 好象不行,必须用 with recovery 参数吗? RESTORE DATABASE 考试系统 FROM DISK='C:\Temp\考试系统备份文件' With RECOVERY, Move '考试系统_dat' To 'd:\考试系统.mdf', Move '考试系统_log' To 'd:\考试系统_log.ldf'USE master EXEC sp_addumpdevice 'disk', 'MyNwind_ss1', 'C:\Temp\考试系统备份文件2001年11月20日11时17分57秒' BACKUP DATABASE 考试系统 TO MyNwind_ss1 EXEC sp_DropDevice 'MyNwind_ss1'================================================================CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!★ 浏览帖子速度极快![建议系统使用ie5.5以上]。 ★ 多种帖子实现界面。 ★ 保存帖子到本地[html格式]★ 监视您关注帖子的回复更新。★ 可以直接发贴、回复帖子★ 采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录! ★ 支持在线检测程序升级情况,可及时获得程序更新的信息。★★ 签名 ● 可以在您的每个帖子的后面自动加上一个自己设计的签名哟。Http://www.ChinaOK.net/csdn/csdn.zipHttp://www.ChinaOK.net/csdn/csdn.rarHttp://www.ChinaOK.net/csdn/csdn.exe [自解压] 文件读入TMemoryStream、TFileStream流后?怎么改流里内容? 一个关于窗体位置的简单问题 请教个简单sql问题 怎么把按纽的颜色和窗体的颜色调成一样? dbgrid中下拉框的问题 请教一个很菜的问题:why 我的DBCHART和decision cube组件不能用? Access数据库操作问题,期盼高手!!! 用sendmessage让某一个窗口显示或者隐藏 有关于InterBase的问题,有知道的吗? delphi程序员的前三个三年 您好,请教动态数组和随机抽取纪录的问题,谢谢。 哪儿有BDE下?
//备份
procedure TDBBackupForm.XP_Button2Click(Sender: TObject);
begin
pgbar.Max:=100;
pgbar.Min:=0;
pgbar.Position:=0;
pgbar.Step:=20;
With SaveDialog1 do
begin
filename:='DB'+FormatDateTime('yy_MM_dd_hh_mm_ss',Now);
options:=[ofhidereadonly,offilemustexist,ofpathmustexist];
if execute then
begin
label1.Caption:='正在备份中...';
DataModule1.ADOConnection1.Close;
TmpStr:= ExtractFileName(filename);
strlen:= Length(TmpStr);
DevName:= Copy(TmpStr,1,strlen-4);
begin
try
ADOCommand1.CommandText:='use Master';
pgbar.StepIt;
ADOCommand1.Execute;
adocommand1.CommandText:='execute sp_helpdevice';
pgbar.StepIt;
adocommand1.Execute ;
pgbar.stepit;
adocommand1.CommandText:='backup database '+InitDB+' to disk='''+filename+''' with init';
pgbar.StepIt;
adocommand1.Execute ;
adocommand1.CommandText:='Use '+InitDB;
pgbar.StepIt;
adocommand1.Execute ;
Self.Hide;
ShowMessage('数据库已经成功备份到 '+filename+'!');
Try
DataModule1.ADOConnection1.Connected:= True;
Except
ShowMessage('无法重新接连数据库!,系统即将退出!');
Application.Terminate;
End;
self.Close;
Except
On Exception do
if DataModule1.ADOConnection1.InTransaction then
DataModule1.ADOConnection1.RollbackTrans;
End;
End;
end;
end;end;
procedure TDBBackupForm.FormActivate(Sender: TObject);
begin
//从INI文件中读出数据库的相关信息
SYSINI := TIniFile.Create(ExtractFilePath(Application.ExeName)+'DB.INI');
try
InitDB := SYSINI.ReadString('Database', 'InitDB', '');
finally
SYSINI.Free;
end;end;
//还原数据库
procedure TDBBackupForm.XP_Button3Click(Sender: TObject);
begin
pgbar.Max:=100;
pgbar.Min:=0;
pgbar.Position:=0;
pgbar.Step:=20;
With OpenDialog1 do
begin
filename:='';
options:=[ofhidereadonly,offilemustexist,ofpathmustexist];
if execute then
begin
label1.Caption:='正在还原中...';
DataModule1.ADOConnection1.Close;
TmpStr:= ExtractFileName(filename);
strlen:= Length(TmpStr);
DevName:= Copy(TmpStr,1,strlen-4);
pgbar.StepIt;
try
ADOCommand1.CommandText:='use Master';
ADOCommand1.Execute;
pgbar.StepIt;
adocommand1.CommandText:='execute sp_helpdevice';
adocommand1.Execute ;
pgbar.stepit;
adocommand1.CommandText:='Restore database '+InitDB+' From disk='''+filename+''' with replace';
pgbar.StepIt;
adocommand1.Execute ;
adocommand1.CommandText:='Use '+InitDB;
pgbar.StepIt;
adocommand1.Execute ;
Self.Hide;
ShowMessage('数据库已经成功还原到数据库 '+InitDB+'!');
Try
DataModule1.ADOConnection1.Connected:= True;
Except
ShowMessage('无法重新接连数据库!,系统即将退出!');
Application.Terminate;
End;
self.Close;
Except
On Exception do
if DataModule1.ADOConnection1.InTransaction then
DataModule1.ADOConnection1.RollbackTrans;
End;
end;
end;end;
还是某个table的建表备份 还是只备份数据 ?
如果是整个数据库的备份
dump database 数据库名 to disk=存盘路径 with init如果是还原数据库
restore database 数据库名 from disk存盘路径 with recovery这样就可以了
可以做成存储过程
restore database 数据库名 from disk存盘路径 好象不行,必须用 with recovery 参数吗?
FROM DISK='C:\Temp\考试系统备份文件'
With
RECOVERY,
Move '考试系统_dat' To 'd:\考试系统.mdf',
Move '考试系统_log' To 'd:\考试系统_log.ldf'
USE master
EXEC sp_addumpdevice 'disk', 'MyNwind_ss1',
'C:\Temp\考试系统备份文件2001年11月20日11时17分57秒'
BACKUP DATABASE 考试系统 TO MyNwind_ss1
EXEC sp_DropDevice 'MyNwind_ss1'
================================================================CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!★ 浏览帖子速度极快![建议系统使用ie5.5以上]。 ★ 多种帖子实现界面。
★ 保存帖子到本地[html格式]★ 监视您关注帖子的回复更新。
★ 可以直接发贴、回复帖子★ 采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录!
★ 支持在线检测程序升级情况,可及时获得程序更新的信息。★★ 签名 ●
可以在您的每个帖子的后面自动加上一个自己设计的签名哟。Http://www.ChinaOK.net/csdn/csdn.zip
Http://www.ChinaOK.net/csdn/csdn.rar
Http://www.ChinaOK.net/csdn/csdn.exe [自解压]