标题:数据库压缩问题
只看楼主
sunboy
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2004-4-18
 问题点数:0 回复次数:7 
数据库压缩问题

模块代码如下:

Option Explicit ' 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

Dim DBEngine As jro.JetEngine

Set DBEngine = New jro.JetEngine

'检查数据库文件是否存在

If Dir(Location) <> "" Then

' 如果需要备份就执行备份

If BackupOriginal = True Then

strBackupFile = GetTemporaryPath & "backup.mdb"

If Dir(strBackupFile) <> "" Then Kill strBackupFile

FileCopy Location, strBackupFile

End If

' 创建临时文件名

strTempFile = GetTemporaryPath & "temp.mdb"

If Dir(strTempFile) <> "" Then Kill strTempFile

'通过DBEngine 压缩数据库文件

DBEngine.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

[此贴子已经被作者于2004-05-01 15:03:50编辑过]

搜索更多相关主题的帖子: 数据库 String Public Dim 
2004-05-01 14:58
sunboy
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2004-4-18
得分:0 

然后我在窗体中调用CompactJetDatabase()

代码是这样的:Call CompactJetDatabase("D:\vcd.mdb",Ture)

运行时错误提示为:初始化字符串不符合OLE DB规定


看到代码晕啦!!!
2004-05-01 15:01
tvrc200379
Rank: 1
等 级:新手上路
帖 子:351
专家分:0
注 册:2004-3-30
得分:0 
333

[attach]84[/attach]

用这个软件试试吧!


我是灌水天堂的新版主,请新老用户来报道啊 (欢迎来灌水。。。) 哈哈哈。。。。 http://websx.home./bbs/list.asp?boardid=35
2004-05-04 09:10
sunboy
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2004-4-18
得分:0 
你有没有源程序啊?有可不可以给我看看啊?

看到代码晕啦!!!
2004-05-05 16:18
tvrc200379
Rank: 1
等 级:新手上路
帖 子:351
专家分:0
注 册:2004-3-30
得分:0 
没有源程序。只是这个可执行的文件啊!

我是灌水天堂的新版主,请新老用户来报道啊 (欢迎来灌水。。。) 哈哈哈。。。。 http://websx.home./bbs/list.asp?boardid=35
2004-05-05 16:23
firechun
Rank: 1
等 级:新手上路
帖 子:135
专家分:0
注 册:2004-4-13
得分:0 

晕,我以为tvrc200379的回贴解决了呢。

JRO的CompactDatabase 方法的两个参数是Jet连接字符串,而不是象DAO那样直接指向文件名。

在程序里加上下面的代码

Dim strSour As String Dim strDesc As String strSour = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Location

strDesc = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strTempFile '调用时改成

DBEngine.CompactDatabase strSour, strDesc

如果数据库有密码,或者压缩后要加上密码,则连接字符串是如下形式:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=你的数据库;Jet OLEDB:Database Password=你的密码"

[此贴子已经被作者于2004-05-08 16:45:37编辑过]


本人在编程中国发表的所有文章,除特别说明外均属原创,转载时请注明作者编程中国
2004-05-06 20:33
sunboy
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2004-4-18
得分:0 

这个方法对我是没有用的,它的压缩比不高。

它只是重新再生成另个一个表,不可覆盖原表。

你们能不能把我那方法修一下啊,那个是不错的。


看到代码晕啦!!!
2004-05-08 10:04
firechun
Rank: 1
等 级:新手上路
帖 子:135
专家分:0
注 册:2004-4-13
得分:0 

我就是改的你的源代码,你仔细看看吧。


本人在编程中国发表的所有文章,除特别说明外均属原创,转载时请注明作者编程中国
2004-05-08 16:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-991-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.140721 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved