我把我的程序帖出来,给各位高手看看,要如何修改? SERVER端程序代码如下: begin if DM_s.ADOConnection1.Connected then begin with DM_s.ADOQuery9 do begin close; sql.Clear; sql.Add('use master'); prepared; execsql; close; sql.Clear; sql.Add('exec killspid ''aa'''); prepared; execsql; close; sql.Clear; sql.Add('restore database aa from disk='c:\aa.bak' with replace'); prepared; try execsql; showmessage('恢复系统数据库成功!'); except showmessage('恢复系统数据库出错!'); end; close; sql.Clear; sql.Add('use aa'); prepared; execsql; end; end else begin showmessage('数据库连接失败!'); Application.Terminate; end; end; CLIENT端程序代码如下: BUTTON双击事件: begin if DM.ADOConnection1.Connected then begin with DM.ADOQuery1 do begin Close; sql.Clear; sql.Add('select * from User order by UserName'); prepared:=true; Open; end; end else begin showmessage('数据库连接失败!'); Application.Terminate; end; end; 当SERVER端和CLIENT端程序都在运行时,SERVER执行数据恢复操作后,在CLIENT端双击BUTTON出现“连接失败”的提示。
你可以通过下面的SP,来返回数据库的状态。当@RC=-2时,你就可以提示一个信息给CLIENT. create proc usp_CheckDBStatus @chr_dbname sysname asSET NOCOUNT ON/******************************************************************/ /* initialization */ /******************************************************************/ Declare @rc int Declare @Status int Declare @output varchar(255)select @rc=0 select @Status=0 select @output=''if @chr_dbname is null begin select @rc=-1 return @rc end/******************************************************************/ /* Get STATUS from MASTER..SYSDATABASES */ /******************************************************************/ if @rc=0 begin select @status=status&192 from master..sysdatabases where [name]=@chr_dbname if @status=192 begin select @rc=-2 print @chr_dbname +'status is pre recovery or recovering' end else begin print @chr_dbname +'status is not in pre recovery or recovering' end end
user master
exec killspid 'aa'
restore database aa from disk='c:\aa.bak' with replace
use aa
还是不行呀
再说,强制中断,可能会造成数据丢失,还是去掉,exec killspid 'aa' 比较好,
SERVER端程序代码如下:
begin
if DM_s.ADOConnection1.Connected then
begin
with DM_s.ADOQuery9 do
begin
close;
sql.Clear;
sql.Add('use master');
prepared;
execsql;
close;
sql.Clear;
sql.Add('exec killspid ''aa''');
prepared;
execsql;
close;
sql.Clear;
sql.Add('restore database aa from disk='c:\aa.bak' with replace');
prepared;
try
execsql;
showmessage('恢复系统数据库成功!');
except
showmessage('恢复系统数据库出错!');
end;
close;
sql.Clear;
sql.Add('use aa');
prepared;
execsql;
end;
end
else
begin
showmessage('数据库连接失败!');
Application.Terminate;
end;
end;
CLIENT端程序代码如下:
BUTTON双击事件:
begin
if DM.ADOConnection1.Connected then
begin
with DM.ADOQuery1 do
begin
Close;
sql.Clear;
sql.Add('select * from User order by UserName');
prepared:=true;
Open;
end;
end
else
begin
showmessage('数据库连接失败!');
Application.Terminate;
end;
end;
当SERVER端和CLIENT端程序都在运行时,SERVER执行数据恢复操作后,在CLIENT端双击BUTTON出现“连接失败”的提示。
create proc usp_CheckDBStatus
@chr_dbname sysname
asSET NOCOUNT ON/******************************************************************/
/* initialization */
/******************************************************************/
Declare @rc int
Declare @Status int
Declare @output varchar(255)select @rc=0
select @Status=0
select @output=''if @chr_dbname is null
begin
select @rc=-1
return @rc
end/******************************************************************/
/* Get STATUS from MASTER..SYSDATABASES */
/******************************************************************/
if @rc=0
begin
select @status=status&192 from master..sysdatabases
where [name]=@chr_dbname if @status=192
begin
select @rc=-2
print @chr_dbname +'status is pre recovery or recovering'
end
else
begin
print @chr_dbname +'status is not in pre recovery or recovering'
end
end