Public Declare Function GetTempPath Lib "kernel32" Alias _ "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long Public Const MAX_PATH = 260 Public Sub CompactJetDatabase(Location As String, Optional BackupOriginal As Boolean = True) On Error GoTo CompactErr Dim strBackupFile As String Dim strTempFile As String '检查数据库文件是否存在 If Len(Dir(Location)) Then ' 如果需要备份就执行备份 If BackupOriginal = True Then strBackupFile = GetTemporaryPath & "backup.mdb" If Len(Dir(strBackupFile)) Then Kill strBackupFile FileCopy Location, strBackupFile End If ' 创建临时文件名 strTempFile = GetTemporaryPath & "temp.mdb" If Len(Dir(strTempFile)) Then Kill strTempFile '通过DBEngine 压缩数据库文件 Dim zip_db As New DAO.DBEngine zip_db.CompactDatabase Location, strTempFile ' 删除原来的数据库文件 Kill Location ' 拷贝刚刚压缩过临时数据库文件至原来位置 FileCopy strTempFile, Location ' 删除临时文件 Kill strTempFile Else End If CompactErr: Exit Sub End Sub Public Function GetTemporaryPath() Dim strFolder As String Dim lngResult As Long strFolder = String(MAX_PATH, 0) lngResult = GetTempPath(MAX_PATH, strFolder) If lngResult <> 0 Then GetTemporaryPath = Left(strFolder, InStr(strFolder, Chr(0)) - 1) Else GetTemporaryPath = "" End If End Function ---------------------------------------------------------------------------- 请问是这样吗?但是zip_db.CompactDatabase Location, strTempFile 行报错啊 跳过去以后,后面的kill和filecopy也报错,不能用,是不是要引用什么啊??
access2000 引用 microsoft dao 3.6 object library access97 引用 microsoft dao 3.51 object library
引用 DAO3.6 定义一个DAO.DBEngine Dim zip_db As New DAO.DBEngine zip_db.CompactDatabase 要压缩的数据库名,压缩后的数据库名 filecopy 压缩后的数据库名,要压缩的数据库名 kill 压缩后的数据库名 已经备分原数据库!!运行时报错,请问filecopy和kill方法是不是用引用什么之后才能调用啊??zip_db.CompactDatabase 方法应该怎么写啊?数据库名给出了完整正确的路径也报错是 怎么回事啊?
我用的是access2000 引用了 microsoft dao 3.6 object library 还是不行啊,ft
filecopy 和 kill 不用引用呀!!
用这个吧,需要引用“Microsoft Jet and Replication Objects 2.* Library” '压缩数据库 Public Sub CompDatabase() On Error GoTo ErrMsg Dim jro As New jro.JetEngine Dim filePath As String, tempFilePath As String'filePath是原数据库文件路径,tempFilePath是临时的用于存放压缩后文件的路径 Dim conStr1 As String, conStr2 As String
If MsgBox("你确定要压缩当前的数据库吗?", vbQuestion + vbOKCancel, "小心!") = vbCancel Then Exit Sub End If
GetCompactPath filePath, tempFilePath If UCase(Dir(tempFilePath)) = UCase("rsglTemp.mdb") Then Kill tempFilePath End If conStr1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & filePath conStr2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & tempFilePath jro.CompactDatabase conStr1, conStr2 Kill filePath Name tempFilePath As filePath'改回原来的名字 MsgBox "数据库压缩成功", vbInformation + vbOKOnly, "祝贺" Exit Sub ErrMsg: MsgBox "请确保其它应用程序没有使用当前数据库!" & vbCrLf & Err.Description & "然后关闭其它所有子窗体后再恢复!", vbInformation + vbOKOnly, "提示" End Sub
用这个吧,需要引用“Microsoft Jet and Replication Objects 2.* Library” '压缩数据库 Public Sub CompDatabase() On Error GoTo ErrMsg Dim jro As New jro.JetEngine Dim filePath As String, tempFilePath As String'filePath是原数据库文件路径,tempFilePath是临时的用于存放压缩后文件的路径 Dim conStr1 As String, conStr2 As String
If MsgBox("你确定要压缩当前的数据库吗?", vbQuestion + vbOKCancel, "小心!") = vbCancel Then Exit Sub End If
GetCompactPath filePath, tempFilePath If UCase(Dir(tempFilePath)) = UCase("rsglTemp.mdb") Then Kill tempFilePath End If conStr1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & filePath conStr2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & tempFilePath jro.CompactDatabase conStr1, conStr2 Kill filePath Name tempFilePath As filePath'改回原来的名字 MsgBox "数据库压缩成功", vbInformation + vbOKOnly, "祝贺" Exit Sub ErrMsg: MsgBox "请确保其它应用程序没有使用当前数据库!" & vbCrLf & Err.Description & "然后关闭其它所有子窗体后再恢复!", vbInformation + vbOKOnly, "提示" End Sub
使用DAO或ADOX开发,都有压缩Access数据库的方法。
引用 dao3.6
定义一个DAO.DBEngine
Dim zip_db As New DAO.DBEngine
zip_db.CompactDatabase 要压缩的数据库名,压缩后的数据库名
filecopy 压缩后的数据库名,要压缩的数据库名
kill 压缩后的数据库名
注意压缩时先备份原数据库!!
明白?
----------------------------------------------------------------------------
请问是这样吗?但是zip_db.CompactDatabase Location, strTempFile 行报错啊
跳过去以后,后面的kill和filecopy也报错,不能用,是不是要引用什么啊??
access2000 引用 microsoft dao 3.6 object library
access97 引用 microsoft dao 3.51 object library
定义一个DAO.DBEngine
Dim zip_db As New DAO.DBEngine
zip_db.CompactDatabase 要压缩的数据库名,压缩后的数据库名
filecopy 压缩后的数据库名,要压缩的数据库名
kill 压缩后的数据库名
已经备分原数据库!!运行时报错,请问filecopy和kill方法是不是用引用什么之后才能调用啊??zip_db.CompactDatabase 方法应该怎么写啊?数据库名给出了完整正确的路径也报错是
怎么回事啊?
还是不行啊,ft
'压缩数据库
Public Sub CompDatabase()
On Error GoTo ErrMsg
Dim jro As New jro.JetEngine
Dim filePath As String, tempFilePath As String'filePath是原数据库文件路径,tempFilePath是临时的用于存放压缩后文件的路径
Dim conStr1 As String, conStr2 As String
If MsgBox("你确定要压缩当前的数据库吗?", vbQuestion + vbOKCancel, "小心!") = vbCancel Then
Exit Sub
End If
GetCompactPath filePath, tempFilePath
If UCase(Dir(tempFilePath)) = UCase("rsglTemp.mdb") Then
Kill tempFilePath
End If
conStr1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & filePath
conStr2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & tempFilePath
jro.CompactDatabase conStr1, conStr2
Kill filePath
Name tempFilePath As filePath'改回原来的名字
MsgBox "数据库压缩成功", vbInformation + vbOKOnly, "祝贺"
Exit Sub
ErrMsg:
MsgBox "请确保其它应用程序没有使用当前数据库!" & vbCrLf & Err.Description & "然后关闭其它所有子窗体后再恢复!", vbInformation + vbOKOnly, "提示"
End Sub
'压缩数据库
Public Sub CompDatabase()
On Error GoTo ErrMsg
Dim jro As New jro.JetEngine
Dim filePath As String, tempFilePath As String'filePath是原数据库文件路径,tempFilePath是临时的用于存放压缩后文件的路径
Dim conStr1 As String, conStr2 As String
If MsgBox("你确定要压缩当前的数据库吗?", vbQuestion + vbOKCancel, "小心!") = vbCancel Then
Exit Sub
End If
GetCompactPath filePath, tempFilePath
If UCase(Dir(tempFilePath)) = UCase("rsglTemp.mdb") Then
Kill tempFilePath
End If
conStr1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & filePath
conStr2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & tempFilePath
jro.CompactDatabase conStr1, conStr2
Kill filePath
Name tempFilePath As filePath'改回原来的名字
MsgBox "数据库压缩成功", vbInformation + vbOKOnly, "祝贺"
Exit Sub
ErrMsg:
MsgBox "请确保其它应用程序没有使用当前数据库!" & vbCrLf & Err.Description & "然后关闭其它所有子窗体后再恢复!", vbInformation + vbOKOnly, "提示"
End Sub