如何在Delphi中用程序实现在客户端备份和还原 服务器中SqlSever2000的数据库?
在客户的机房(服务器所在)常被锁是很有用的哟.
在客户的机房(服务器所在)常被锁是很有用的哟.
解决方案 »
- 用socket连接时,怎样让服务器上数据库中的记录显示在客户端combobox1上来?
- quickreport中打印图片的问题
- 利用 adoquery 连接到 vfp 数据库,运行“selec * into dbf tbname from table” 语句没反应
- 怎样将文件夹下的文件添加到一个ListBox中?
- 一个入门的问题
- 关于设计有些难度的问题
- 文本文件的压缩
- 请问:哪里有免费的手机(Nokia )短信开发包。
- 请问如何实现在资源管理器中的右键弹出菜单中使文件关联自己的程序...
- 如何编写个输入法安装程序用Delphi?(各位大虾帮帮我啊!)
- 窗体拉伸!!
- 执行完函数后出现EAccessviolation问题?
unit backup;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Buttons, ComCtrls, DB, ADODB;type
TFbackup = class(TForm)
Panel1: TPanel;
StatusBar1: TStatusBar;
Panel3: TPanel;
btnClose: TBitBtn;
btnBackup: TBitBtn;
btnRestore: TBitBtn;
pgBar: TProgressBar;
Label1: TLabel;
SaveDialog1: TSaveDialog;
ADOQuery1: TADOQuery;
procedure btnBackupClick(Sender: TObject);
procedure btnRestoreClick(Sender: TObject);
procedure btnCloseClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;var
Fbackup: TFbackup;implementation
uses dldata;
{$R *.dfm}procedure TFbackup.btnBackupClick(Sender: TObject);
var
i:integer;
device_is:boolean;
begin
with pgbar do
begin
pgbar.Max:=100;
pgbar.Min:=0;
pgbar.Position:=0;
pgbar.Step:=20;
end;
with savedialog1 do
begin
filter:='备份文件(*.dat)*.dat';
defaultext:='dat';
filename:='';
options:=[ofhidereadonly,offilemustexist,ofpathmustexist];
device_is:=false;
if execute then
begin
statusbar1.Panels[1].Text:='正在备份中....';
try
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('execute sp_helpdevice');
open;
pgbar.Stepit;
first;
while not eof do
begin
if trim(fieldbyname('device_name').AsString)='dl_1' then
begin
device_Is:=true;
break;
end;//if fieldbyname('name').AsString='dl_1' then
next;
end;//for i:=0 to recordcount-1 do
pgbar.Stepit;
//-----------------------------------------------------------
if device_Is then
begin
close;
sql.Clear;
sql.Add('execute sp_dropdevice ''dl_1''');
execsql;
end;//if not device_Is then
pgbar.Stepit;
//------------------------------------------------------------
close;
sql.Clear;
sql.Add('execute sp_addumpdevice ''disk'',''dl_1'','''+filename+'''');
execsql;
//--------------------------------------------------------
pgbar.Stepit;
close;
sql.Clear;
sql.Add('backup database dl to dl_1');
execsql;
pgbar.Stepit;
end;//with adoquery1 do
except
showmessage('备份失败!');
end;//try
end;//if execute then
end;//with savedialog1
statusbar1.Panels[1].Text:='备份完成。';
end;
procedure TFbackup.btnRestoreClick(Sender: TObject);
begin
with pgbar do
begin
pgbar.Max:=100;
pgbar.Min:=0;
pgbar.Position:=0;
pgbar.Step:=50;
end;
if messagedlg('恢复数据库后必须重新登陆!是否继续?',mtwarning,[mbok,mbcancel],0)=mrok then
begin
statusbar1.Panels[1].Text:='正在恢复中....';
dm.dlconnection.Close;
dm.Free;
//try
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('restore database dl from dl_1');
execsql;
end;//with do
//except
// showmessage('备份文件不存在!ss');
//end;
pgbar.StepIt;pgbar.StepIt;
statusbar1.Panels[1].Text:='恢复完成.';
application.MainForm.Caption:='正在关闭系统....';
winexec(pchar(application.exename),sw_show);
application.Terminate;
end;//if messagedlg()=mrok
end;procedure TFbackup.btnCloseClick(Sender: TObject);
begin
close;
end;procedure TFbackup.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action:=cafree;
end;end.备份:
begin
pgbar.Max:=100;
pgbar.Min:=0;
pgbar.Step:=20;
adoconnection1.Close;
if adoconnection1.Connected then
begin
application.MessageBox('数据库数据正在使用','系统提示')
end
else
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 docmanage to disk=''c:\back1.bak'' with init';
pgbar.StepIt;
adocommand1.Execute ;
adocommand1.CommandText:='backup log docmanage to back1';
pgbar.StepIt;
adocommand1.Execute;
try
aDOConnection1.Connected:=true;
except
ShowMessage('无法连接指定的数据库!');
application.Terminate;
end;
form1.Hide;
if messagedlg('数据库docmanage已成功备份到c:\back1.bak!是否继续?',mtwarning,[mbok],0)=mrok then
begin
form1.close
end;
except
on exception do
if ADOConnection1.InTransaction then
ADOConnection1.RollbackTrans
end;
end;
end;
还原:
begin
pgbar.Max:=100;
pgbar.Min:=0;
pgbar.Step:=20;
try
ADOCommand1.CommandText:='use master ';
pgbar.StepIt;
pgbar.StepIt;
adocommand1.Execute ;
adocommand1.CommandText:='RESTORE database docmanage FROM DISK = ''c:\back.bak'' with replace ';
pgbar.StepIt; pgbar.StepIt;
pgbar.StepIt;
adocommand1.Execute ;
try
aDOConnection1.Connected:=true;
except
ShowMessage('无法连接指定的数据库!');
application.Terminate;
end;
form1.Hide;
if messagedlg('c:\back.bak已成功还原到数据库docmanage!继续?',mtwarning,[mbok],0)=mrok then
begin
form2.close
end;
except
on exception do
if ADOConnection1.InTransaction then
ADOConnection1.RollbackTrans;
end;
end;
end;
你试试看了我这里能用!!!!用Delphi程序实现起来不难,在Form中放上一个ADOConnection和一个ADOCommand,设好ADOConnection的DefaultDatabase和Connected为True,ADOCommand的Connection为ADOConnection1,CommandText写为backup database mydatabase to disk='\\mycomputer\mypath\bk_mydat.dat' with init,你想把数据备份到哪台机器上,就在那台机器上设置一个完全共享的目录即可,想同时备份多个数据库就在CommandText中写多条语句,在Form的onShow事件中加入ADOCommand1.Execute,然后利用Windows自带的“计划任务”程序,让你编译好的程序在某个时间执行即可,如果还有什么不懂,欢迎来信:[email protected]
网上的
procedure TForm18.BitBtn1Click(Sender: TObject);
begin
adoquery1.Close;
try
with adoquery1 do
begin
close;
sql.Clear;
sql.add('backup database mdf to disk=''c:\back1.bak''');
execsql;
end;
showmessage('备份完成');
except
on e:exception do
showmessage('备份失败');
end;
end;///////////////还原///////////////////////////
procedure TForm18.BitBtn2Click(Sender: TObject);
begin
adoquery1.Close;
try
with adoquery1 do
begin
close;
sql.Clear;
sql.add('restore database mdf from disk=''c:\back1.bak''');
execsql;
end;
showmessage('还原成功');
except
on e:exception do
showmessage('还原失败');
end;
end;
网上相关例子多的是
你SS
id:Integer;
s:string;
begin
if dfrm.ADOQback.RecordCount<=0 then id:=1 else
begin
dfrm.ADOQback.Last;
id:=dfrm.ADOQback.fieldbyname('id').AsInteger+1;
end;
s:='d:\jdcdatabackup\'+IntToStr(id)+'.bak';
try
dfrm.ADOConnection1.BeginTrans;
with dfrm.adoqDoback do
begin
close;
sql.Text:='BACKUP DATABASE jdcdata TO DISK = '+QuotedStr(s);
ExecSQL;
end;
with dfrm.ADOQback do
begin
Insert;
FieldByName('datatime').AsDateTime:=Now;
FieldByName('path').AsString:=s;
Post;
end;
dfrm.ADOConnection1.CommitTrans;
except
dfrm.ADOConnection1.RollbackTrans;
ShowMessage('±¸·Ýʧ°Ü£¬¿ÉÄÜÆäËûÓû§ÕýÔÚä¯ÀÀÊý¾Ý£¡');
end;
end;
备份:
use Master BACKUP DATABASE DBName TO DISK='C:\a.bak' With Init
恢复:
select spid from sysprocesses where dbid in(select dbid from sysdatabases where name=DBName 提示正在使用,不能恢复
use Master RESTORE DATABASE DBName FROM DISK='C:\a.bak'