我想在前端用代码实现数据库的备份和恢复功能,备份的我已经搞定了,但是在写恢复代码的时候总是报错:数据库正在使用不能恢复,我用的是restore database 请问有谁写过恢复数据库的代码?请教一下应该如何处理这个问题?
解决方案 »
- 高分请教: ''Thread Creation Error:存储空间不足,无法处理此命令''这是什么问题呢?
- Cannot assign a TFont to a TFont
- 对于同时新增出货单,造成从表混乱的问题
- Delphi怎么调用打印机啊 用PrinterSetupDialog1或PrintDialog1菜鸟 详细点 谢谢
- 如何屏蔽 PrintScreen键?如何屏蔽截屏软件的截屏功能?
- 如何解决XPMenu和FastReport冲突的问题?
- 有关运算的问题?
- ListView的困惑 请大虾赐教
- 有关dll和ado的问题!!!答对的一定给分
- 如何使EDIT控件内只输入数字?
- 主窗体与子窗体....????????
- 什么叫左连接,右连接,子表?
begin
Try
Close;
SQL.Clear;
sql.Add('restore database ' + dbname + ' from disk =' + #39 + ExtractFilePath(paramstr(0)) + 'file\zip.fst' + #39 + ' with replace');
ExecSQL;
Messagebox(handle, '数据库恢复成功!', '提示:', MB_OK + MB_ICONINFORMATION);
Except
Messagebox(handle, '数据库恢复失败!', '提示:', MB_OK + MB_ICONWARNING);
Raise;
End;
end;
结贴吧楼主
2:要将其它打开该数据库的进程kill掉
3: 如下 kill use master
go
create proc killspid (@dbname varchar(20))
as
begin
declare @sql nvarchar(500),@temp varchar(1000)
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 =0
begin
set @temp='kill '+rtrim(@spid)
exec(@temp)
fetch next from getspid into @spid
end
close getspid
deallocate getspid
end --用法
use master
exec killspid '数据库名'
ExtractFilePath(paramstr(0))是你的备份文件名的存放路径