Set Rst = New ADODB.Recordset
With Rst
.CursorLocation = adUseClient
.CursorType = adOpenStatic
Set .ActiveConnection = mCon
.Open ("restore database kindergarten from DISK='" & App.Path & "\kindergartenbak'")
End With
为什么我在用上面的程序作数据库恢复时,会提示如下错误:
" 实时错误 '-2147217900(80040e14)'
因为数据库正在使用,所以未能获得对数据库的排它访问权"请问一
解决方案 »
- 如何使用VB做一个类似于VB那样的窗体设计器
- 一个关于对话框很简单的问题
- 试题(选择题),十万火急,万望各位朋友拔刀相助!!
- mshflex合并表头列?
- VB里有一个图表的控件,如果你有关于它的好例子,能给我发一个吗,本人感激不尽
- 在线等!!请问vb中操作word对象和excel对象需要那个动态连接库???
- 想把日期型变量Date1中的"年","月","日"提取出来应该怎么办?
- 只打印屏幕显示出来的记录,VB+ACCESS+ADO+VB自带的报表设计器.引无数英雄竞折腰?
- 如何将一个指定的文件夹共享为只读.(文件路径可以为变量)
- 如何获得股市行情的数据???问了几个,还是不知所云,只有关注!
- 女朋友要跟我分手,郁闷!放分!!!
- 挑战----硬件管理嚣
'引用ADO2.1及以上的版本
'恢复数据库,返回出错信息,正常恢复,返回""
'调用:frestoredatabase_a "备份文件名","数据库名"
Public Function fRestoreDatabase_a(ByVal sBackUpfileName$ _
, ByVal sDataBaseName$ _
, Optional ByVal sDataBasePath$ = "" _
, Optional ByVal sBackupNumber& = 1 _
, Optional ByVal sReplaceExist As Boolean = False _
) As String
Dim iDb As ADODB.Connection, iRe As ADODB.Recordset
Dim iConcStr$, iSql$, iReturn$, iI&
'On Error GoTo lbErr
'创建对象
Set iDb = New ADODB.Connection
Set iRe = New ADODB.Recordset
'连接数据库服务器
iConcStr = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Data Source=zj"
iDb.Open iConcStr
'得到还原后的数据库存放目录,如果没有指定,存放到SQL SERVER的DATA目录
If sDataBasePath = "" Then
iSql = "select filename from master..sysfiles"
iRe.Open iSql, iDb, adOpenKeyset, adLockReadOnly
iSql = iRe(0)
iRe.Close
sDataBasePath = Left(iSql, InStrRev(iSql, "\"))
End If
'检查数据库是否存在
If sReplaceExist = False Then
iSql = "select 1 from master..sysdatabases where name='" & sDataBaseName & "'"
iRe.Open iSql, iDb, adOpenKeyset, adLockReadOnly
If iRe.EOF = False Then
iReturn = "数据库已经存在!"
iRe.Close
GoTo lbExit
End If
iRe.Close
End If
'获取数据库恢复信息
iSql = "restore filelistonly from disk='" & sBackUpfileName & "'" & vbCrLf & _
"with file=" & sBackupNumber
iRe.Open iSql, iDb, adOpenKeyset, adLockReadOnly
'生成数据库恢复语句
iSql = "restore database [" & sDataBaseName & "]" & vbCrLf & _
"from disk='" & sBackUpfileName & "'" & vbCrLf & _
"with file=" & sBackupNumber & vbCrLf
With iRe
While Not .EOF
iReturn = iRe("PhysicalName")
iI = InStrRev(iReturn, ".")
iReturn = IIf(iI = 0, "", Mid(iReturn, iI)) & "'"
iSql = iSql & ",move '" & iRe("LogicalName") & _
"' to '" & sDataBasePath & sDataBaseName & iReturn & vbCrLf
.MoveNext
Wend
.Close
End With
iSql = iSql & IIf(sReplaceExist, ",replace", "")
iDb.Execute iSql
iReturn = ""
GoTo lbExit
lbErr:
iReturn = Error
lbExit:
fRestoreDatabase = iReturn
End Function
/*
关闭用户打开的进程处理
*/
use master
goif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_killspid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_killspid]
GOcreate proc p_killspid
@dbname varchar(200) --要关闭进程的数据库名
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
go--用法
exec p_killspid '数据库名'