补充一下:数据库是sqlserver 7.0

解决方案 »

  1.   

    再补充:只要是对要还原的数据库进行了操作(比如删掉一个表),就会在用sql语句还原该数据库时出现”因为该数据库正在使用,所以无法获得排他访问权”的错误信息!请大侠们出手相救!!!!
      

  2.   

    1.backup database DBName to disk='c:\backup' with init,noskip
    2.确认没有用户连接到要恢复的数据库,可以用sp_who来查看
      

  3.   

    对于第二个问题,你试一下把[ conn.close ]改[ set conn=nothing ]
      

  4.   

    备份在工程里引用Microsoft SQLDMO Object LibraryPublic g_SqlServer                  As SQLServer    'SqlServerObject
        Set g_SqlServer = New SQLDMO.SQLServer
        g_SqlServer.Connect strSvName, strUsrID, strPass
        Dim objBackup As New SQLDMO.Backup                
        objBackup.Action = SQLDMOBackup_Database          
        objBackup.Database = strDBName                    '数据库名
        objBackup.Files = strCopyName                     '备份名
        
        objBackup.SQLBackup g_SqlServer                   '备份
        g_SqlServer.Disconnect
      

  5.   

    江西的佬表:第一个问题按照你的做法成功了!
        但是第二个问题,在测试时只有我在操作数据库啊!没别人!
        把[ conn.close ]改[ set conn=nothing ]我也试了,不行啊!
    飞猪:你用了sqlDemo啊,我要研究研究:)第二个问题谁能帮忙啊~~~
      

  6.   

    还原数据库
    Public g_SqlServerConnection        As ADODB.Connection
    If Not g_SqlServerConnection Is Nothing Then
            g_SqlServerConnection.Close
            Set g_SqlServerConnection = Nothing
    End If
    Public objRestore    As SQLDMO.Restore
    Set objRestore = New SQLDMO.Restore
        objRestore.Action = SQLDMORestore_Database          
        objRestore.Database = strDBName                     
        objRestore.Files = strCopyName                      
        
       objRestore.ReplaceDatabase = True                      objRestore.SQLRestore g_SqlServer
      

  7.   

    下面的代码能够实现备份,其中Combo1.Text为数据库名
    On Error GoTo OYKBak
    Dim Bak As ADODB.Recordset
    If (Trim$(Combo1.Text) = "" ) Then
        MsgBox "没有选择合法数据库。", , "警告信息"
    Else
        Dialog1.FileName = ""
        Dim Path As String
        Dialog1.Action = 2
        Path = Dialog1.FileName
        If Path <> "" Then
            Set MDbConn = New ADODB.Connection
            MDbConn.Open "Provider=SQLOLEDB.1;Password='" & MPassWD & "';Persist Security Info=False;User ID=sa;Initial Catalog=master;Data Source='" & MServer & "'"
            MDbConn.CursorLocation = adUseClient
            s = "use [master]"
            Set Bak = New ADODB.Recordset
                With Bak
                    .ActiveConnection = MDbConn
                    .CursorType = adOpenDynamic
                    .LockType = adLockOptimistic
                    .Source = s
                    .Open
                End With
            s = "EXECUTE master.dbo.xp_get_tape_devices"
            Set Bak = New ADODB.Recordset
                With Bak
                    .ActiveConnection = MDbConn
                    .CursorType = adOpenDynamic
                    .LockType = adLockOptimistic
                    .Source = s
                    .Open
                End With
            s = "set noexec off set parseonly off"
            Set Bak = New ADODB.Recordset
                With Bak
                    .ActiveConnection = MDbConn
                    .CursorType = adOpenDynamic
                    .LockType = adLockOptimistic
                    .Source = s
                    .Open
                End With
            s = "xp_regread N'HKEY_LOCAL_MACHINE', N'SOFTWARE\Microsoft\MSSQLServer\Setup', N'SQLDataRoot'"
            Set Bak = New ADODB.Recordset
                With Bak
                    .ActiveConnection = MDbConn
                    .CursorType = adOpenDynamic
                    .LockType = adLockOptimistic
                    .Source = s
                    .Open
                End With
            s = "select name, phyname, cntrltype, status, convert(int, substring(convert(binary(4), 0), 1, 1)), floor(8192.0 / 1048576) from master..sysdevices o where 1 = 1 and (status & 0x10) <> 0 order by o.name"
            Set Bak = New ADODB.Recordset
                With Bak
                    .ActiveConnection = MDbConn
                    .CursorType = adOpenDynamic
                    .LockType = adLockOptimistic
                    .Source = s
                    .Open
                End With
            s = "xp_fileexist '" & Path & "'"
            Set Bak = New ADODB.Recordset
                With Bak
                    .ActiveConnection = MDbConn
                    .CursorType = adOpenDynamic
                    .LockType = adLockOptimistic
                    .Source = s
                    .Open
                End With
            s = "set noexec off set parseonly off"
            Set Bak = New ADODB.Recordset
                With Bak
                    .ActiveConnection = MDbConn
                    .CursorType = adOpenDynamic
                    .LockType = adLockOptimistic
                    .Source = s
                    .Open
                End With
            s = "BACKUP DATABASE [" & Trim$(Combo1.Text) & "] TO  DISK = N'" & Path & "' WITH  NOINIT ,  NOUNLOAD ,  NAME = N'" & Trim$(Combo1.Text) & " backup',  SKIP ,  STATS = 10,  NOFORMAT"
            Set Bak = New ADODB.Recordset
                With Bak
                    .ActiveConnection = MDbConn
                    .CursorType = adOpenDynamic
                    .LockType = adLockOptimistic
                    .Source = s
                    .Open
                End With
            Set Bak = Nothing
            
            MsgBox "数据库备份成功", , "OK"
        End If
      

  8.   

    wangsitao(飞猪)的还原数据库的方法我试了,结果和不用sqldemo是一样的,说”数据库正在使用,备份或还原操作被不正常的终止了”我要还原的数据库就是程序所使用的数据库,提供此功能是为了让不懂数据库操作的人能方便的备份和还原数据库。这些功能是作为程序的一个模块存在的,程序一旦运行就会使用或修改数据库的表。我在执行还原数据库的sql语句之前已经关闭了数据库的连接,而且在企业管理器中没有打开该数据库,但是依然报错”数据库正在使用”!!
      

  9.   

    还原数据库时“数据库正在使用”的错误信息时而出现,时而不出现,这几天一直没有解决!我真的搞不懂怎么样才算真正关闭了数据库的使用???难道用sql语句还原数据库真的这么难么??sql server 企业管理器是怎么做的啊~~~
      

  10.   

    发现问题了~~~
    用sp_who查了一下数据库当前用户发现:spid     status                     loginame           cmd
    1      sleeping                        sa          SIGNAL HANDLER  
    2      background                      sa          LOCK MONITOR
    3      background                      sa          LAZY WRITER 
    4      sleeping                        sa          LOG WRITER
    5      sleeping                        sa          CHECKPOINT SLEEP
    6      background                      sa          AWAITING COMMAND
    8      sleeping                        sa          AWAITING COMMAND
    9      runnable                        sa          SELECT是不是因为我每次执行完程序都没有退出数据库呢?那么应该怎样退出呢?
    还请帮忙!尤其是 gmc007(江西的佬表)大侠,我怎么没早试试您的建议呢555555
      

  11.   

    1.不要叫我大虾,我很菜的^_^
    2.应该连到MASTER来查看(SP_WHO)
    3.如果(很有可能)确有连接没有断开,请再检查你的程序。或者用SQL SERVER PROFILER来监视。比如:你可以先停止SQL 服务(确保所有连接断开),然后启动,再打开SQL SERVER PROFILER,再运行你的程序(在CONN.CLOSE处设置断点),再看看SQL SERVER PROFILER有什么变化,或者再用SP_WHO查看还有什么连接。
      

  12.   

    老表,停止SQL 服务,然后启动,使用sp_who一测,又有很多连接用户