数据库的恢复(20分)

  • 主题发起人 主题发起人 fuxin198311
  • 开始时间 开始时间
F

fuxin198311

Unregistered / Unconfirmed
GUEST, unregistred user!
本人在做数据库的备份与恢复 用的是SQL2000 备份现在没有问题 可是当我恢复数据时
提示:因为数据库正在使用,所以未能获得对数据库的排它访问权

代码是这样的:
procedure TForm1.Button2Click(Sender: TObject);//数据恢复
begin
opendialog1.InitialDir:=extractfilepath(application.ExeName)+'backup' ;
if opendialog1.Execute then
begin
adoconnection1.Connected:=false;
with adoquery1 do
begin
close;
sql.Clear ;
sql.Text:='restore DATABASE fuxin from DISK='''+opendialog1.FileName+'''';
showmessage(sql.Text);
ExecSQL ;
end;
adoconnection1.Connected:=true;
end;
end;
 
确定没有其它程序使用的数据库fuxin,
adoquery1不要连接了数据库fuxin,连接master试试吧,应该可以解决
 
呵呵。楼上都说了!
 
新年同樂啊。。。。。
 
procedure Tbackup_disk.SpeedButton2Click(Sender: TObject);
begin
opendialog1.InitialDir:=extractfilepath(application.ExeName)+'backup' ;
if opendialog1.Execute then
begin
try
with adocmmd do
begin
TCQTDB.ADOCQTDB.Close;
TCQTDB.ADOCQTDB.Connected:=false;
CommandText:='use master';
Execute;
CommandText:='alter database CQTDB set offline with rollback immediate';
Execute;
CommandText:='restore database CQTDB from disk= '''+opendialog1.FileName+''' with recovery ';
Execute;
CommandText:=' alter database CQTDB set online with rollback immediate';
Execute;
end;
TCQTDB.ADOCQTDB.Open ;
TCQTDB.ADOCQTDB.Connected:=TRUE;
showmessage('数据库恢复成功!');
except
on e:exception do
begin
showmessage('数据库恢复失败!'+e.Message);
exit;
end;
end;
end;
end;
现在恢复是行了 可是当我退出这个窗口 去打开其它窗口时 去提示当前我打开窗口引用的表不存 但是数据库确是存在呀 当退出系统 重新打开就行了 ,可不至于我数据恢复完了 还要退出系统再起动吧
 
那你试着动态连接数据库。
adocmmd.CommandText:='use fuxin '
 
恢复的时候 use master 恢复完了要重新 use fuxin
 
谢了 恩 两位楼上的说的没错 可是这样要等很久才提示恢复成功, 想用进度条显示
当前恢复的进度 我有试过 不行
 
if not DirectoryExists(GetCurrentDir+'/backup') then
mkdir(GetCurrentDir+'/backup');
pgbar.Max:=100;
pgbar.Min:=0;
pgbar.Step:=10;
panel.Visible:=true;
label1.Caption:='正在备份数据库,请稍候........';
pgbar.StepIt;
pgbar.StepIt ;
pgbar.StepIt ;
pgbar.StepIt ;
pgbar.StepIt ;
pgbar.StepIt ;
with adoquery1 do
begin
close;
sql.Clear ;
sql.Text:='BACKUP DATABASE fuxin TO DISK='''+GetCurrentDir+'/backup/fuxin''';
pgbar.StepIt;
pgbar.StepIt;
pgbar.StepIt ;
pgbar.StepIt ;
ExecSQL;
end;
panel.Visible:=false;
ShowMessage('数据库备份成功');
这是我备份的 也想显示进度条 不行 正在备份数据库,请稍候........';
这句都不显示 label组件我是放在panel上的
 
加上
Label1.Update;
Application.ProcessMessages;
 
楼主msglzcx 说得没错加上就可以显示数据库正在恢复。。。。请稍等 问题是
我点恢复 进度条就为100%了,panel也不可见了, 而过一会才提示数据恢复成功 !
都觉得进度条没起到作用 ?一运行就100%了
procedure Tbackup_date.SpeedButton2Click(Sender: TObject);
begin
opendialog1.InitialDir:=extractfilepath(application.ExeName)+'backup' ;
if opendialog1.Execute then
begin
pgbar.Max:=100;
pgbar.Min:=0;
pgbar.Step:=10;
panel.Visible:=true;
label7.Caption:='正在恢复数据库,请稍候........';
Label1.Update;
Application.ProcessMessages;
pgbar.StepIt ;
pgbar.StepIt ;
pgbar.StepIt ;
pgbar.StepIt ;
pgbar.StepIt ;
pgbar.StepIt ;
pgbar.StepIt ;
pgbar.StepIt ;
pgbar.StepIt ;
pgbar.StepIt ;
try
with adocmmd do
begin
CommandText:='use master';
Execute;
CommandText:='alter database ss set offline with rollback immediate';
Execute;
CommandText:='restore database ss from disk= '''+opendialog1.FileName+''' with recovery ';
Execute;
CommandText:=' alter database ss set online with rollback immediate';
Execute;
CommandText:='use ss';
Execute;
end;
panel.Visible:=false;
showmessage('数据库恢复成功!');
except
on e:exception do
begin
showmessage('数据库恢复失败!'+e.Message);
exit;
end;
end;
end;
end;
 
后退
顶部