为什么经常要压缩数据库????

qiyou 2002-05-16 08:50:34
一个使用了数据库的程序,在调试和使用中经常会出现null指针使用这样的错误,
把使用的数据库用数据库实用工具里的压缩数据库压缩一下就好了,用的是
vb5+acess97。请问大概是什么方面的原因能引起这样的错误阿?
多谢大家!!!!!!
...全文
4 点赞 收藏 5
写回复
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiyou 2002-05-16
多谢楼上大哥!给您分先:)
回复
gump2000 2002-05-16
Const OFS_MAXPATHNAME = 128
Const OF_EXIST = &H4000

Private Type OFSTRUCT
cBytes As Byte
fFixedDisk As Byte
nErrCode As Integer
Reserved1 As Integer
Reserved2 As Integer
szPathName(OFS_MAXPATHNAME) As Byte
End Type

Private typOfStruct As OFSTRUCT
Declare Function apiOpenFile Lib "Kernel32" Alias "OpenFile" (ByVal lpFileName As String, lpReOpenBuff As OFSTRUCT, ByVal wStyle As Long) As Long


Public Function FileExists(ByVal sFilename As String) As Boolean
On Error Resume Next
If Len(sFilename) > 0 Then
apiOpenFile sFilename, typOfStruct, OF_EXIST
FileExists = typOfStruct.nErrCode <> 2
End If
End Function

判断文件是否存在的Func
回复
gump2000 2002-05-16
您可以尝试添加10000条记录,然后看文件大小。
再删除记录,再看文件大小。
再压缩,再看文件大小。
您就会明白了。

您可以在程序启动的时候做。

'修复压缩数据库
Public Sub RepairDataBase()

Dim TmpData As String

TmpData = App.Path & "\DataBase\tmp.mdb"

If FileExists(TmpData) Then Kill TmpData

DBEngine.CompactDatabase SYSDATABASE, TmpData, , , ";pwd=" & DataBasePWD
Kill SYSDATABASE
Name TmpData As SYSDATABASE

End Sub

SYSDATABASE : 数据库路径
(App.Path & "\Data\My.MDB")
DatabasePWD : 数据库密码

这个sub在程序开始时候调用。
回复
qiyou 2002-05-16
那有没有什么办法能自动完成这些工作呢?
多谢楼上的老大!!!
还有您最后一句我没看懂…………
回复
gump2000 2002-05-16
程序的不正常关闭(连接不正常断开,记录集不正常关闭)
就有可能导致。

所以每次启动程序的时候最好修复、压缩一下数据库。

还有,直接Access数据库的删除并没有真正删除,您需要压缩才能
真正的释放空间。
回复
发动态
发帖子

1180

社区成员

VB 数据库(包含打印,安装,报表)
申请成为版主
社区公告
暂无公告