我想在VB中用“备份”、“恢复”两个按钮对ACCESS数据库进行备份和修复,虽然看了网上很多例子,但是还不是很明白,比如:在备份时出现“...数据库被ADMIN以排它方式打开...”等,但关闭数据库又不能操作,还有如果已经在某个位置存在备份文件,若在同一位置放置备份文件该如何覆盖原来的备份文件,(能不能在备份还原的时候用户自己选择还原文件和备份文件的位置)如何把这些如何解决,有没有在数据库打开时可以备份的。还有一个问题:我在查询时用DATAGRID显示了一些数据(温度和其相关的值,但没有具体的函数关系式),我想用一个坐标图,当我按下“图形显示”按钮时动态的在坐标图上显示这些坐标点(温度和其相关的值),并用直线把这些点依次连起来,请各位给我这两个问题一个具体详细的源码。
我初学实在是不会弄,不知道把问题说清楚了没有,望各位鼎力帮助,小弟先谢谢了!!在线等

解决方案 »

  1.   

    备份有两种办法,一是全部复制数据库文件,二是只备份里面的数据。看来你是采取复制数据库文件的办法了。这个要在备份前断开所有连接,备份后再恢复连接。在备份期间禁止用户操作数据库。数据库压缩与修复需要用DAO实现,ADO不能做那个事,具体可以在网上找到相关的例子。你的第二个问题可以用mschart控件解决
      

  2.   

    引用 microsoft tet and replication object 2.6,代码:    Dim miJRO As jro.JetEngine
        Set miJRO = New jro.JetEngine
        miJRO.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0; " _
            & "Data Source=" & App.Path & "\youdb.mdb;" _
            & "Jet OLEDB:Database Password=5966090", _
        "Provider=Microsoft.Jet.OLEDB.4.0; " _
            & "Data Source="& App.path &"\newdb.mdb;" _
            & "Jet OLEDB:Database Password=abc"这样修复压缩备份一举三得,还原就用简装的复制方法就可以了
      

  3.   

    我自己写的,就照这个吧'功能:备份数据库
    '参数:fullFileName 完整的文件名
    '返回:成功1,失败0
    Public Function BackupDB(fullFileName As String) As Integer
        On Error GoTo err
        If fullFileName <> "" Then
            FileCopy sG_DBPath, fullFileName
            BackupDB = 1
        Else
            BackupDB = 0
        End If
        
        Exit Function
    err:
        BackupDB = 0
    End Function'功能:恢复数据库
    '参数:sFullBakFileName 备份文件的完整路径及文件名
    '返回:成功1,失败0
    Public Function RestoreDB(sFullBakFileName As String) As Integer
        On Error GoTo err
        Kill sG_DBPath
        FileCopy sFullBakFileName, sG_DBPath '此时文件不应该被打开
        RestoreDB = 1
        Exit Function
    err:
        RestoreDB = 0
    End Function'功能:压缩数据库文件
    '参数:无
    '返回:成功1,失败0
    Public Function CompactDB() As Integer
        '压缩后数据库会更改记录位置,重新排序
        '引用Microsoft Jet and Replication Object(msjro.dll)
        
        Dim jro As New jro.JetEngine
        Screen.MousePointer = 11
        On Error GoTo err
        jro.CompactDatabase sPro & sG_DBPath & sDBPWD, sPro & _
                            sG_AppPath & "tmp.mdb;" & _
                            "jet oledb:encrypt database=true;" & sDBPWD
        FileCopy sG_AppPath & "tmp.mdb", sG_DBPath
        Kill sG_AppPath & "tmp.mdb"
        Set jro = Nothing
        Screen.MousePointer = 0
        CompactDB = 1
        Exit Function
    err:
        Screen.MousePointer = 0
        Set jro = Nothing
        CompactDB = 0
    End Function第二个用CHART控件
      

  4.   

    sorry ,应该是引用 microsoft jet and replication object 2.6 library
      

  5.   

    to chncoder(VB--C#瞎晃悠):
    首先感谢能给我很详细的大回复!能不能麻烦你把“备份”、“按钮”下的详细代码给我,还有,如何断开数据库,我用adocon.close但是执行行说数据库对象关闭,不允许操作,怎么办?谢谢!期盼你的回复,谢谢!
      

  6.   

    数据库备份就直接用FSO对象COPY一份到指定地方,这样简单
      

  7.   

    在备份、还原时如何关闭数据库而不影响操作,我用adocon.close关闭数据库,执行时出现错误,请问各位该如何解决?谢谢!
      

  8.   

    现在知道要必须关闭数据库,但是不知道该如何关闭啊,我在备份、还原窗体载入时用ADOCON.CLOSE关闭数据库,不行啊,求助各位了,帮忙解决一下了,谢谢!
      

  9.   

    备份窗体的所有代码
    备份子过程:
    Sub BackupMdb(StrBack As String)
    Dim jro As jro.JetEngine
    Set jro = New jro.JetEngine
    jro.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=g:ThermalDBase.mdb", "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:ThermalDBase.mdb;Jet OLEDB:Engine Type=5"
    End Sub
    窗体上备份按钮的代码:
    Private Sub cmdCopy_Click()
    On Error GoTo errcopy
     Dim Str As String
              CommonDialog1.Filter = "数据库文件(*.mdb)|*.mdb"
              CommonDialog1.FilterIndex = 2
              CommonDialog1.DialogTitle = "选择备份文件名称"
              CommonDialog1.ShowOpen
              Str = CommonDialog1.FileName
              
    If adoCon.State <> adStateClosed Then
                    adoCon.Close
                    Set adoCon = Nothing
    End If
              'If adoCon.State = adStateOpen Then adoCon.Close: Set aodcon = Nothing
              Call BackupMdb(Str)      '引用备份过程
              MsgBox "数据备份完成!为了你的数据安全,请经常备份数据库!", vbOKOnly + vbExclamation, "系统提示"
    errcopy:
            MsgBox Err.Description
            
    End Sub
    上面判断数据库关闭的条件语句没有作用,备份时总是出现“...数据库以排他方式打开....”,若在窗体载入的代码下用adocon.close,则出现“对象关闭,不允许操作”,实在不知道如何处理?麻烦大家帮忙一下,谢谢!急!
      

  10.   

    adoCon是全局变量吗?程序中所有的操作都是用这个对象连接数据库的?
      

  11.   

    是全局变量,难道问题就是在这个地方?要是这个问题,请问该如何解决?谢谢vbman2003,经常看到你帮助解答别人问题的帖子,谢谢!
      

  12.   

    这样的话你注释掉上面代码中的adoCon.Close,就是直接set adocon = nothing 试试呢?
      

  13.   

    还有你Sub BackupMdb(StrBack As String)这个过程中指定了原数据库和备份数据库的路径和名称,所以不需要strback这个参数了;这个过程中库路径这样写不正确g:ThermalDBase.mdb,应该:g:\ThermalDBase.mdb,备份路径也是如此
      

  14.   

    “...数据库以排他方式打开....”这个错误一般来说,肯定是你其它的操作是用了非adocon对象的连接,比如ADODC控件的连接,或者又声明了新的connection对象,你仔细查查。
    下线了......
      

  15.   

    好的,真的非常感谢你!
    还是出现“尝试打开的数据库已经被用户admin以排它方式打开...”,出错在备份子过程中的最后一行:
    jro.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=g:\ThermalDBase.mdb", "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\ThermalDBase.mdb;Jet OLEDB:Engine Type=5"
    再次感谢你的回复!
      

  16.   

    cqq_chen(我是谁)说的对,如果你是一个共享的mdb文件,也有可能其它用户正在使用
      

  17.   

    也有可能是你自己正打开着access  :)
      

  18.   

    呵呵,我和别人都没有打开mdb文件啊,我真真找不到解决的板房了
      

  19.   

    你找找看ldb文件,如果你在备份时可以看到ldb文件,就说明你的mdb文件处于打开状态!
      

  20.   

    你用ado啊!如果你用的是dao,可以看看VB自带的visdata例子。
      

  21.   

    结贴了,感谢各位,尤其是vbman2003等人,谢谢!