错误信息:
因为数据库正在使用,所以未能获得对数据库的排它访问权。代码如下:
var
RestoreDB:TADOConnection;
op:TADOQuery;
begin
if ReBackupDialog.Execute then
begin
dbm.dbconn.close; RestoreDB:=TADOConnection.Create(self);
RestoreDB.ConnectionString:='Provider=SQLOLEDB.1;Persist Secrety Info=FALSE;User ID=sa;Password=sa;Initial Catalog=master;Data Source=myserver;
RestoreDB.LoginPrompt:=false;
RestoreDB.Open; op:=TADOQuery.Create(self);
op.Connection:=RestoreDB;
op.SQL.Clear;
op.SQL.Add('Restore DataBase mydatabase from Disk = '''+ReBackupDialog.FileName+''' with replace');
op.ExecSQL;
//showmessage('ok');
op.Close;
op.Free; RestoreDB.Close;
RestoreDB.Free;
end;
因为数据库正在使用,所以未能获得对数据库的排它访问权。代码如下:
var
RestoreDB:TADOConnection;
op:TADOQuery;
begin
if ReBackupDialog.Execute then
begin
dbm.dbconn.close; RestoreDB:=TADOConnection.Create(self);
RestoreDB.ConnectionString:='Provider=SQLOLEDB.1;Persist Secrety Info=FALSE;User ID=sa;Password=sa;Initial Catalog=master;Data Source=myserver;
RestoreDB.LoginPrompt:=false;
RestoreDB.Open; op:=TADOQuery.Create(self);
op.Connection:=RestoreDB;
op.SQL.Clear;
op.SQL.Add('Restore DataBase mydatabase from Disk = '''+ReBackupDialog.FileName+''' with replace');
op.ExecSQL;
//showmessage('ok');
op.Close;
op.Free; RestoreDB.Close;
RestoreDB.Free;
end;
(
@usedbname varchar(100),@setfolder varchar(250)
)
AS
begin declare @sname char(8) set @sname='restr' EXEC sp_addumpdevice 'disk', @sname,@setfolder RESTORE FILELISTONLY FROM @sname
RESTORE DATABASE @usedbname from @sname with RECOVERY EXEC sp_dropdevice @sname return(0)end
在Master数据库中建如下存储过程:
Create Procedure killspid (@dbname varchar(20))
as
begin
declare @sql nvarchar(500)
declare @spid int
set @sql='declare getspid cursor for
select spid from sysprocesses where dbid=db_id('''+@dbname+''')'
exec (@sql)
open getspid
fetch next from getspid into @spid
while @@fetch_status<>-1
begin
exec('kill '+@spid)
fetch next from getspid into @spid
end
close getspid
deallocate getspid
endGO
在恢复数据库之前先执行此存储过程,像这样:Use Master
Go
exec killspid 'mydb'
Go
restore database mydb from disk='c:\mydb.bak'在Delphi中直接用ExecSQL先后执行以上SQL语句即可
2、/////////////////////////////适合单机
AdoConnection1不用断开,
使用一个adoquery,SQL语句如下:
adoquery1.SQL.Clear;
adoquery1.SQL.Add('use master');
adoquery1.SQL.Add('restore database mydb from disk='''c:\mydb.bak''');
adoquery1.SQL.Add('use mydb');恢复数据库之前一定要user master !
以上摘自其他网友的回复。