请问一下,在VB如何对ACCESS数据库压缩修复和备份呢?急用,希望大家帮忙?在线等待...高分求教.

解决方案 »

  1.   

    首先要搞清楚ACCESS数据库的文件格式及特点
      

  2.   

    Private Sub m_Compact_Click() '数据库压缩
    On Error Resume Next
      Dim oldMdb As String
      Dim newMdb As String  cnnCMMS.Close  oldMdb = App.Path & "\msDATa.mdb"
      newMdb = App.Path & "\msDATAcopy.mdb"  DBEngine.CompactDatabase oldMdb, newMdb, , , ";"  Kill oldMdb  Name newMdb As oldMdb    Dim sConnect As String
        Dim sSource As String
             sSource = "Data Source=" & App.Path & "\msDATA.mdb"
             sConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & sSource
        Set cnnCMMS = New ADODB.Connection
        With cnnCMMS
             .CursorLocation = adUseClient '.Provider = "Microsoft.Jet.OLEDB.4.0"
             .Open sConnect
        End With
        MsgBox "压缩已完成!"
    End Sub
      

  3.   

    压缩和修复的代码:
    首先在工程菜单的引用里面选中DAO3.6(如果没有,3.51也可以),然后看下面的代码
    Public Sub Compress()
        Dim temp As String
        
        '获取数据库路径
        temp = "C:\"
        
        '关闭连接,准备压缩。(如果这时候程序有打开的连接,必须关闭,我这里的CloseConn
        '是自己写的一个方法。)
        CloseConn
        
        '压缩数据库
        Dim OldFile As String    Dim NewFile As String
        
        OldFile = temp & "\db1.mdb" '待压缩数据库文件名    NewFile = temp & "\tmp.mdb" '压缩后的数据库文件名
        
        '被注释掉的那句是不带密码的数据库的压缩,第二句包含密码。
        'DBEngine.CompactDatabase OldFile, NewFile, , , ";"
        DBEngine.CompactDatabase OldFile, NewFile, , , ";pwd=你的数据库密码"    Kill OldFile  '删除原来的文件    Name NewFile As OldFile  '将压缩后的数据库文件名称改回去
        
        '重新设置连接,这里的OpenConn是我写的一个重新打开连接的方法。
        OpenConn
    End Sub你可以把这段代码直接拷贝在模块里,路径的地方修改一下就可以使用了。
      

  4.   

    Private Sub m_backup_Click() '备份数据库On Error Resume Next            Dim SHFileOp As SHFILEOPSTRUCT            SHFileOp.wFunc = FO_COPY
                SHFileOp.pFrom = App.Path & "\msDATA.mdb"
                SHFileOp.pTo = App.Path & "\back\msDATA.mdb"
                SHFileOp.fFlags = FOF_ALLOWUNDO + FOF_NOCONFIRMMKDIR
                Call SHFileOperation(SHFileOp)
                MsgBox "备份已完成!"
            Exit SubErrHandler:
                Me.MousePointer = 0End Sub
      

  5.   

    Private Sub m_restore_Click() '复原数据库
    On Error Resume Next
      Dim oldMdb As String
      Dim newMdb As String
                Dim SHFileOp As SHFILEOPSTRUCT            SHFileOp.wFunc = FO_COPY
                SHFileOp.pFrom = App.Path & "\back\msDATA.mdb"
                SHFileOp.pTo = App.Path & "\msDATA.mdb"
                SHFileOp.fFlags = FOF_ALLOWUNDO + FOF_NOCONFIRMMKDIR
                Call SHFileOperation(SHFileOp)            MsgBox "复原已完成!"    Exit Sub
    End Sub
      

  6.   


    Public Const FO_MOVE = &H1
    Public Const FO_COPY = &H2
    Public Const FO_DELETE = &H3
    Public Const FOF_NOCONFIRMATION = &H10
    Public Const FOF_NOCONFIRMMKDIR = &H200
    Public Const FOF_ALLOWUNDO = &H40
    Public Const FOF_SILENT = &H4
    Public Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
    '----------------------------
      

  7.   

    至于备份,我一般使用两种方式,一种是直接拷贝数据库文件,另外一种是带Zip压缩的。
    先说第一种直接拷贝:
    在工程引用菜单里引用“Microsoft Scripting Runtime”,并且在窗体上放置一个CommonDialog控件,命名为cd,然后代码如下Private Sub cmdBeifen_Click()
        
        Dim fso As New FileSystemObject, fil    Set fil = fso.GetFile("你的数据库路径,比如C:\db1.mdb")
        '下面这句是设置保存对话框的属性,具体可以查看MSDN的帮助。
        cd.Flags = &H5006
        '打开保存对话框
        cd.ShowSave
        '如果用户选择了一个路径并且选择的路径不是原始文件存在的路径,那么
        If cd.FileName <> "" And cd.FileName <> "db1.mdb" Then
            '进行拷贝文件
            fil.Copy (cd.FileName)
            MsgBox "数据备份已经顺利完成!", vbInformation, "恭喜!"
            cd.FileName = "db1.mdb"
        Else
            MsgBox "没有完成备份,请稍后再试!", vbInformation, "提示!"
        End If
    End Sub
      

  8.   

    如何使用 ADO 來压缩或修复 Microsoft Access 文件?  
    版本:VB6 以前使用 DAO 時,Microsoft 有提供 CompactDatabase Method 來压缩 Microsoft Access 文件,RepairDatabase Method 來修复损坏的 Microsoft Access 文件,。可是自从 ADO 出來之后,好像忘了提供相对的压缩及修复 Microsoft Access 文件的功能。現在 Microsoft 发现了这个问题了,也提供了解決方法,不过有版本上的限制!限制說明如下:ActiveX Data Objects (ADO), version 2.1 
    Microsoft OLE DB Provider for Jet, version 4.0 這是 Microsoft 提出的 ADO 的延伸功能:Microsoft Jet OLE DB Provider and Replication Objects (JRO)这个功能在 JET OLE DB Provider version 4.0 (Msjetoledb40.dll) 及 JRO version 2.1 (Msjro.dll) 中第一次被提出!
    這些必要的 DLL 文件在您安裝了 MDAC 2.1 之后就有了,您可以在以下的网页中下载 MDAC 的最新版本!Universal Data Access Web Site在下载之前先到 VB6 中檢查一下,【控件】【設定引用項目】中的 Microsoft Jet and Replication Objects X.X library 如果已经是 2.1 以上的版本,您就可以不用下载了!在您安裝了 MDAC 2.1 或以上的版本之后,您就可以使用 ADO 來压缩或修复 Microsoft Access 文件,下面的步骤告訴您如何使用 CompactDatabase Method 來压缩 Microsoft Access 文件:1、新建一個新表单,选择功能表中的【控件】【設定引用項目】。
    2、加入 Microsoft Jet and Replication Objects X.X library,其中 ( X.X 大于或等于 2.1 )。
    3、在适当的地方加入以下的程序代码,記得要修改 data source 的內容及目地文件的路径:Dim jro As jro.JetEngine
    Set jro = New jro.JetEngine
    jro.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\nwind2.mdb", _ '來源文件
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\abbc2.mdb;Jet OLEDB:Engine Type=4" '目的文件在 DAO 3.60 之后,RepairDatabase Method 已经无法使用了,以上的程序代码显示了 ADO CompactDatabase Method 的用法,而它也取代了 DAO 3.5 時的 RepairDatabase method! 
      

  9.   

    '拷贝数据库备份
    FileCopy "c:\a.mdb", "d:\bak.mdb"
    '恢复的时候将所有连接断开,然后拷贝回来
    FileCopy "d:\bak.mdb", "c:\a.mdb"