Adodc1.RecordSource = "BACKUP DATABASE [123] To DISK='c:\123.bak'"
Adodc1.Refresh如果不加第二行,根本不能备份,加了第二行,备份了,但同时也弹出个出错框:当对象关闭时不允许操作哪个高手讲解一下啊

解决方案 »

  1.   

    我给你一个例子吧,需要的话给我发个邮件[email protected]
      

  2.   

    Public Function fBackupDatabase_a(ByVal sBackUpfileName$ _
                                    , ByVal sDataBaseName$ _
                                    , Optional ByVal sIsAddBackup As Boolean = False _
                                    ) As String
                                    
        Dim iDb As ADODB.Connection
        Dim iConcStr$, iSql$, iReturn$
        
        On Error GoTo lbErr
        
        '创建对象
        Set iDb = New ADODB.Connection
        
        '连接数据库服务器,根据你的情况修改连接字符串
        iDb.ConnectionString = "Provider=SQLOLEDB.1;Password=" & funEncrypt & ";Persist Security Info=True;User ID=Hyper;Initial Catalog=HyperDB;Data Source=" & Left(sName, iRep)
        iDb.Open
        '生成数据库备份语句
        iSql = "backup database [" & sDataBaseName & "]" & vbCrLf & _
                "to disk='" & sBackUpfileName & "'" & vbCrLf & _
                "with description='" & "HyperDB-backup at:" & Date & "(" & Time & ")'" & vbCrLf & _
                IIf(sIsAddBackup, "", ",init")
                
        iDb.Execute iSql
        iReturn = "数据库备份完成!"
        GoTo lbExit
        
    lbErr:
        iReturn = Error
    lbExit:
        fBackupDatabase_a = iReturn
    End Function
      

  3.   

    我觉得这种方法过于复杂,所以想用sql语句来直接实现的
    而且我到现在还不明白,我们的老师教的都是控件方法来实现的
    如:adodc1.****=******
    这种形式但现在好像流行这种形式:dim rs as new****
    ....
    ....
    rs.***=****
    rs.***=****我不知道有什么分别,但觉得还是老师教的方法比较容易理解些
      

  4.   

    如果只是为了备份数据库,多加一行代码也能蒙过去,但我只是想知道问题的源头和原理
    On Error Resume Next
    Adodc1.RecordSource = "BACKUP DATABASE [123] To DISK='c:\123.bak'"
    Adodc1.Refresh
      

  5.   

    基本上可以了,可能还有对细节完善一下,等我搞好了,在贴上来。Public Function fBackupDatabase_a(ByVal sBackUpfileName$ _
                                    , ByVal sDataBaseName$ _
                                    , Optional ByVal sIsAddBackup As Boolean = False _
                                    ) As String
                                    
        Dim Conn As adodb.Connection
        Dim Rs As adodb.Recordset
        Dim ConcStr$, Sql$, iReturn$
        Dim FoundDevice As Boolean
        On Error GoTo lbErr
        
        '创建对象
        Set Conn = New adodb.Connection
        Set Rs = New adodb.Recordset
        
        '连接数据库服务器,根据你的情况修改连接字符串
        'iConcStr = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Data Source=zj"
        ConcStr = "Provider=SQLOLEDB;server=(local);uid=sa;pwd=dirlxy;DATABASE=master;"
        Conn.Open ConcStr
        
        Sql = "select * from sysdevices where name='device_bak'" '查询系统中是否存在名字为device_bak的转储设备
        Set Rs = Conn.Execute(Sql)
        If Not Rs.EOF Then
            FoundDevice = True  '已经存在
        Else
            FoundDevice = False  '不存在
        End If
        Rs.Close
        
        If FoundDevice = False Then     '如果不存在这个转储设备则建立一个
            Sql = "EXEC sp_addumpdevice 'disk','device_bak','e:\a2.dat'"
            Conn.Execute (Sql)
        End If
        
        '生成数据库备份语句
        Sql = "BACKUP DATABASE " & sDataBaseName & " TO device_bak"
        Conn.Execute Sql
        
        fBackupDatabase_a = ""
        Exit Function
    lbErr:
        fBackupDatabase_a = Error
    End Function