对ACCESS数据库的压缩

xyqiqi 2004-10-16 09:57:54
各位高手请帮忙。ACCESS数据库在录入大量数据的时候,数据库会变的很大,但我删除数据的时候,确缩不回来,请问怎么样才能在PB里面用代码对ACCESS数据库文件大小进行压缩。
...全文
373 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
kivens 2005-03-07
  • 打赏
  • 举报
回复
http://kivens.nease.net/compactdb.rar

以前给一个网友写的一个DLL,里面有一个PB7的例子,可以创建和压缩MDB
wu_07 2005-03-07
  • 打赏
  • 举报
回复
pb中压缩整理access数据库文件(mdb)


其实实现方法别的语言已经很明确了,我这里只是用pb整理了一下,方便需要这个功能的同学。

下面直接给出方法函数:

1、申明外部函数,用来取系统的临时路径。 FUNCTION ulong GetTempPath(ulong nBufferLength,ref string lpBuffer) LIBRARY "kernel32.dll" ALIAS FOR "GetTempPathA"



2、核心方法:

global type gf_CompactAndRepairAccessDB from function_object
end type
forward prototypes
global function integer gf_compactandrepairaccessdb (string as_mdb)
end prototypes
global function integer gf_compactandrepairaccessdb (string as_mdb);
//检查数据库文件是否存在
if not FIleExists(as_MDB) then return -1
//创建临时文件名
string ls_tmpFIle
ls_tmpFIle =Space(255)
GetTempPath(255,ls_tmpFIle)
ls_tmpFIle+="temp.mdb"
//创建DBEngine
integer result
oleobject ole_DBEngine
ole_DBEngine = create oleobject
result =ole_DBEngine.connecttonewobject("JRO.JetEngine")
//创建失败
if result<>0 then return result
//通过DBEngine 压缩数据库文件
string sProvider = 'Provider=Microsoft.Jet.OLEDB.4.0;'
string sOldMDB,sNewMDB
sOldMDB = sProvider + 'Data Source= ' + as_MDB
sNewMDB = sProvider + 'Data Source= ' + ls_tmpFIle
ole_DBEngine.CompactDatabase(sOldMDB, sNewMDB)
destroy ole_DBEngine
//拷贝刚刚压缩过临时数据库文件至原来位置
FIleCopy(ls_tmpFIle,as_MDB,true)
//删除临时文件
FileDelete(ls_tmpFIle)
return 0
end function






















3、调用方法

gf_compactandrepairaccessdb("E:\eNo\collect.mdb")



应注意的是,在压缩和修复数据库的过程中,不能有其它的操作打开该数据库,否则操作会失败,因此请先关闭掉该数据库的连接,否则执行会报错。

此外这个函数经过修改后,可实现备份创建数据库的功能,相比较更简单一些,这里就不提供了。

xyqiqi 2004-12-17
  • 打赏
  • 举报
回复
ACCESS本身设置是可以
但是如果用ODBC注册数据源的话,机器可以不用装ACCESS,那就无法打开,也就没有办法用他的工具了。
hygougou 2004-12-13
  • 打赏
  • 举报
回复
pb的ASA也是这样的,要用数据库本身的工具或者设置进行瘦身了
xyqiqi 2004-11-12
  • 打赏
  • 举报
回复
请大家帮忙
minibill 2004-10-29
  • 打赏
  • 举报
回复
没人用吗?
minibill 2004-10-28
  • 打赏
  • 举报
回复
没人知道吗?
minibill 2004-10-28
  • 打赏
  • 举报
回复
可这样不方便,难道做好程序以后,还要把数据库密码交给用户,然后再教他怎么压缩和修复吗?
shouhuzhe 2004-10-28
  • 打赏
  • 举报
回复
我一直用手动的
实用工具里面
minibill 2004-10-27
  • 打赏
  • 举报
回复
没有人帮忙吗?
minibill 2004-10-27
  • 打赏
  • 举报
回复
我也正想问这个问题,我查了一下,要用到DAO,好象用OLE DB也行,但我不知道怎么用PB通过OLE DB来连接数据库。如果实在不行,我朋友用C++B可以实现,我只有求他用CB做成一个dll文件了。
hongxiuxie 2004-10-21
  • 打赏
  • 举报
回复
c++及delhpi编程, 并使用ado时, 有一个专门使用的压缩access的命令, 看怎样调用, 在delphi论坛很多这样的贴子
hwh88888 2004-10-19
  • 打赏
  • 举报
回复
數據量太大就升級數據庫為oracle或sqlserver好了:)
圣殿骑士18 2004-10-16
  • 打赏
  • 举报
回复
没有做过,应该有两种思路:
1.用access编程,写一个压缩数据库的程序(这应该简单),然后用pb的run调用.
2.用pb的ole功能,远程调用压缩数据库功能.

估计还是第一种方式快吧.

752

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧