我在Master数据库中建如下存储过程,kill掉数据库的所有联接:
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
end
GO
然后用adocommand调用这个过程,成功恢复了数据:
DataM.BackADOCommand.CommandText:='Use Master';
DataM.BackADOCommand.Execute;
DataM.BackADOCommand.CommandText:='exec killspid Gl';      //调用存储过程DataM.BackADOCommand.Execute;
DataM.BackADOCommand.CommandText:='restore database Gl from disk=''D:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\gl.back'' with  recovery,Replace';
DataM.BackADOCommand.Execute;
DataM.BackADOCommand.CommandText:='Use Gl';
DataM.BackADOCommand.Execute;但是在恢复后我该如何刷新dbgrid显示的数据呢?
我的dbgrid是通过ADOTable连接数据库。
好象调用了上面的存储过程把数据库所有的连接都kill了,所以我把ADOTable再次打开数据集就出错。用什么办法重新连接,刷新dbgrid显示的数据?

解决方案 »

  1.   

    问题出在再次连接的时机上。
    当你再次打开ADOTable时,SQL Server正在执行删除连接、恢复数据库的操作,所以出错。
    解决方法:
    拖延一点时间再连接,如出错,再拖延一点时间...
      

  2.   

    呵呵 你有adoconnection吗 重新设置一下connectionstring然后active一下就行了
    前提:所有的table和query都连着这个adoconnection
      

  3.   

    原来这么简单
    把adoconnection的connectionstring重新设置一下,
    把adotable连着这个adoconnection就ok了
    而我一直设置adotable的connectionstring就是不行