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
压缩和修复的代码: 首先在工程菜单的引用里面选中DAO3.6(如果没有,3.51也可以),然后看下面的代码 Public Sub Compress() Dim temp As String
'重新设置连接,这里的OpenConn是我写的一个重新打开连接的方法。 OpenConn End Sub你可以把这段代码直接拷贝在模块里,路径的地方修改一下就可以使用了。
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
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
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 '----------------------------
至于备份,我一般使用两种方式,一种是直接拷贝数据库文件,另外一种是带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
如何使用 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!
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
首先在工程菜单的引用里面选中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你可以把这段代码直接拷贝在模块里,路径的地方修改一下就可以使用了。
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
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
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
'----------------------------
先说第一种直接拷贝:
在工程引用菜单里引用“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
版本: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!
FileCopy "c:\a.mdb", "d:\bak.mdb"
'恢复的时候将所有连接断开,然后拷贝回来
FileCopy "d:\bak.mdb", "c:\a.mdb"