备份SQL Server2000的数据库成功,但恢复时却失败,提示说我正在使用中,怎办?

我通过ADO进行的SQL语句备份SQL Server2000的数据库成功,但恢复时却失败,提示说我正在使用中,怎样解决?
[60 byte] By [d_delphi] at [2008-5-24]
# 1
可能某程序正在使用该库,把它关闭
drizzt123-驽马十驾 at 2007-10-27 > top of Msdn China Tech,Delphi,数据库相关...
# 2
你等一下,我帮你解决;
# 3
if OpenDialog1.Execute then
begin
//DataBase1.Close;
DataBase1.Connected := False;
DataBase1.Params.Clear;
DataBase1.AliasName := 'master';
DataBase1.DatabaseName := 'master';
DataBase1.Params.Add('User Name=sa');
DataBase1.Connected := True;
Query1.DatabaseName := 'master';
try
with Query1 do
begin
Close;
UnPrePare;
SQL.Clear;
SQL.Add('Restore DataBase tsg from disk = :disk');
Params[0].AsString := OpenDialog1.FileName;
PrePare;
ExecSQL;
end;
except
ShowMessage('恢复失败');
Exit;
end;
end;
Application.MessageBox('恭喜您,数据恢复成功','提示',MB_OK + MB_ICONINFORMATION);
end;
你将BDE换成ADO就可以了;
# 4
另外用一个adoconnection连接master数据库,将原来的连接断开。然后使用Query连接这个Adoconnection使用Sql语句恢复
if RestorDialog.Execute then
begin
with TAdoQuery.Create(nil) do
try
close;
sql.Clear ;
FrmSystemDM.ADOConnection1.Connected := False;
Connection :=FrmSystemDM.ADOConnection2;
FrmSystemDM.ADOConnection2.Connected := True;
SQL.add(Format('Restore DATABASE DHPrint From DISK=''%s'' with Replace', [RestorDialog.FileName]));
ExecSQL ;
finally
FrmSystemDM.ADOConnection1.Connected := True;
FrmSystemDM.ADOConnection2.Connected := False;
free;
end;
end;
end;
dtourist at 2007-10-27 > top of Msdn China Tech,Delphi,数据库相关...
# 5
把SQL Server的服务停止,再试一下就能成功
daidelta-心旷神怡 at 2007-10-27 > top of Msdn China Tech,Delphi,数据库相关...
# 6
我也有过这样的问题
---最后发现问题所在:---
备份完后只要重新打开数据源,恢复就不能进行了。(数据库已被使用)
一般重新运行程序就好了。
但如果在运行期database备份完毕后不打开的话就可以恢复了。
实在不行把恢复单独做出来吧(一个单独的程序);
ssl2000-大宋 at 2007-10-27 > top of Msdn China Tech,Delphi,数据库相关...
# 7

TDataBase 有 CloseDataSEt 的用法,如果AdoConnection也有的话,就可以在恢复前调用
zhxfzhxf1-zhxfzhxf1 at 2007-10-27 > top of Msdn China Tech,Delphi,数据库相关...