我的软件做成了C/S模式,我在备份了数据库后,还原时出现了“数据库正在使用,没有获得数据库的排它访问权”的提示。但我不知怎样才能断掉数据库的所有连接,是不是有什么系统过程可以利用?
。
。
解决方案 »
- 在线诚等,求一问题的解决方法!
- 请教一下,如果将上面的语句修改成delphi版本,用下面的语句可以吗?有什么错误啊?
- 大家快來幫忙,等待中。。。。。。。解決了馬上結帖。。。。。
- 如何用ADO连DBF文件? OLE DB 应该选什么?
- 在d6中, toolbar 中toolbutton 的menuitem屬性與 mainmenu 連接過後, 為什麼mainmenu還會顯示在form上呀!
- 请教报表打印的一个问题,急得我睡不着
- 快救救我吧!关于线程的内存释放问题!!!
- 哪位大侠给一个彩色按钮的控件或者自定义的类!!(D6)
- 控件
- 请教有关多层分布的问题?
- [版务]最近本版倒分严重,请大家不要以身试法!
- 中间层自定义函数调用
Alter DataBase DBName SET ONLINE WITH ROLLBACK IMMEDIATE
但必须用:ALTER DATABASE DB_CLE SET ONLINE WITH ROLLBACK IMMEDIATE还原
adoquery1.SQL.text:='use master';
adoquery1.ExecSQL;
这样就可以转移到master数据库,下面就是你自己的恢复数据库语句
CREATE proc restoredatabase
@dbname varchar(200) --要关闭进程的数据库名
, @filename varchar(500) --要还原的数据库备份的地址
as
declare @sql nvarchar(500)
declare @spid nvarchar(20) declare #tb cursor for
select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname)
open #tb
fetch next from #tb into @spid
while @@fetch_status=0
begin
exec('kill '+@spid)
fetch next from #tb into @spid
end
close #tb
deallocate #tb
restore database YHK_WaterL from disk=@filename
GO然后在Delphi程序里调用如下:
try
//检查存储过程
Str:='select 1 from sysobjects where name=''restoredatabase'' and objectproperty(id,''IsProcedure'')=1';
QrOpenSql(ADOQuery1,Str);
if ADOQuery1.Eof then
begin
Application.messagebox(pchar('数据库发生错误:存储过程丢失!'),'提示信息',Mb_ok + Mb_IconError);
exit;
end;
ComputerName:='server';//用来存计算机名
DatabaseName:='yourdatabase';
with ADOQuery1 do
begin
close;
sql.Clear;
sql.Add('use master exec restoredatabase '+DatabaseName+','''+trim(Edt_Path.Text)+'''');
execsql;
end;
except
Application.MessageBox('未预料的情况发生,数据恢复失败','数据恢复失败',MB_IconInformation);
exit;
end;