其實實現方法別的語言已經很明確了,我這里只是用pb整理了一下,方便需要這個功能的同學。
下面直接給出方法函數:
1、申明外部函數,用來取系統的臨時路徑。
function ulong gettemppath(ulong nbufferlength,ref string lpbuffer)
library "kernel32.dll" alias for "gettemppatha"
2、核心方法:
global type gf_compactandrepairaccessdb from function_objectend type forward prototypesglobal function integer gf_compactandrepairaccessdb (string as_mdb)end prototypesglobal function integer gf_compactandrepairaccessdb (string as_mdb);//檢查數據庫文件是否存在 if not fileexists(as_mdb) then return -1//創建臨時文件名string ls_tmpfilels_tmpfile =space(255)gettemppath(255,ls_tmpfile)ls_tmpfile+="temp.mdb"//創建dbengineinteger resultoleobject ole_dbengineole_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,snewmdbsoldmdb = sprovider + 'data source= ' + as_mdbsnewmdb = sprovider + 'data source= ' + ls_tmpfileole_dbengine.compactdatabase(soldmdb, snewmdb)destroy ole_dbengine//拷貝剛剛壓縮過臨時數據庫文件至原來位置 filecopy(ls_tmpfile,as_mdb,true)//刪除臨時文件filedelete(ls_tmpfile)return 0end function
3、調用方法
gf_compactandrepairaccessdb("e:/eno/collect.mdb")
應注意的是,在壓縮和修復數據庫的過程中,不能有其它的操作打開該數據庫,否則操作會失敗,因此請先關閉掉該數據庫的連接,否則執行會報錯。
此外這個函數經過修改后,可實現備份數據庫的功能,相比較更簡單一些,這里就不提供了。
新聞熱點
疑難解答