我用如下代码进行access压缩,为什么几十M的内容都看不到一点变化,而用access里面自带的"修复或压缩"却可以压缩到以前的3/4左右?
var zz:OLEVariant;
begin
datamodule1.adoconnection1.Close;
screen.Cursor:=crHourGlass;
zz:=CreateOleObject('zz.DBEngine.36');
zz.CompactDatabase('capture.mdb','temp.mdb');
DeleteFile('capture.mdb');
RenameFile('temp.mdb','capture.mdb');
datamodule1.adoconnection1.Open;
datamodule1.adotable1.Active:=true;
screen.Cursor:=crDefault;
var zz:OLEVariant;
begin
datamodule1.adoconnection1.Close;
screen.Cursor:=crHourGlass;
zz:=CreateOleObject('zz.DBEngine.36');
zz.CompactDatabase('capture.mdb','temp.mdb');
DeleteFile('capture.mdb');
RenameFile('temp.mdb','capture.mdb');
datamodule1.adoconnection1.Open;
datamodule1.adotable1.Active:=true;
screen.Cursor:=crDefault;
解决方案 »
- 如何定义整型?、、、
- 哪個代理我工作?????????
- CxGrid_V5.0这个那里能够下载到啊 ,给个有效的地址,要安装的那种,不能安装的不要,我看有很多汉化的,但是原始安装的没有找到,请大家
- 求救:在delphi中调用VC写的DLL时出现“无法定位程序输入点QueryDetail于动态链接库上”错误!!
- Access数据表,怎样用select 查询出符合"指定日期"条件的语句?
- 200分,求调通下边代码!有关(DirectX)的!
- 关于。dll文件
- 谁有delphi函数的书啊!
- 关于用DELPHI和MSSQL做一个C/S的简单数据库管理系统的问题!!
- 不为名不为利,delphi小组的计划书,请朋友们进来!!!
- 在richedit中如何把指定的文字插入到光标所在的位置?
- 见鬼了(Delphi6+Oracle8.1.7) 为什么sql报错呀?
zz:=createoleobject('jro.jetengine');
注:要用到ComCtrls和JRO_TLB单元
中导入。
原文件: Main.MDB 大小8.52MB
压缩后的文件:NewMain.MDB 大小仅为336K,与手工用ACCESS2002压缩的效果一样使用单元:……,Variants,comobj;procedure TForm1.Button1Click(Sender: TObject);
const
Provider = 'Provider=Microsoft.Jet.OLEDB.4.0;';
var
Myobj:variant;
NewMdbStr,OldMdbStr:string;
begin
NewMdbStr:=Provider+'Data Source=NewMain.Mdb';
OldMdbStr:=Provider+'Data Source=Main.Mdb';
MyObj:=createoleobject('jro.jetengine.2.1');
MyObj.CompactDatabase(OldMDBStr, NewMDBStr);
end;
修复压缩数据库时,若出现“类字符串无效”。
原 因 是:用户计算机中没有或者未注册“MSJRO.DLL”文件。
解决办法:若$(system)目录中没有上述文件,则复制该文件到$(system)目录下;若$(system)目录有上述文件,那么在$(system)目录下执行下列命令:regsvr32 MSJRO.dll
若还出现“类字符串无效” 请尝试将“MyObj:=createoleobject('jro.jetengine.2.1');”一句改为:MyObj:=createoleobject('jro.jetengine');
注:$(system)目录,即为用户计算机中操作系统的系统目录。如:C:\Windows\System” 。(哈,可以结贴给分了吧?!)
请尝试将“MyObj:=createoleobject('jro.jetengine.2.1');”一句改为:MyObj:=createoleobject('jro.jetengine');
认然对MyObj.CompactDatabase(OldMDBStr, NewMDBStr);这一句提示"指定的初始化字符串不符合ole db规定"
这是为什么啊?大侠FlyCity(都市飞天) !
我把你的代码根据我的情况做了如下修改,我觉得这样更完善一些:
var
dir:string;
Myobj:variant;
NewMdbStr,OldMdbStr:string;
begin
dir:=ExtractFilePath(Application.ExeName);
NewMdbStr:=Provider+'Data Source='+dir+'\temp.mdb';
OldMdbStr:=Provider+'Data Source'+dir+'\capture.mdb';
datamodule1.adoconnection1.Close;
MyObj:=createoleobject('jro.jetengine');
MyObj.CompactDatabase(OldMDBStr, NewMDBStr);
DeleteFile('capture.mdb');
RenameFile('temp.mdb','capture.mdb');
datamodule1.adoconnection1.Open;
datamodule1.adotable1.Active:=true;
end;
给你一个DAO维护Access的例子
*
****************************************************************}unit unAccessTools;interfaceuses Sysutils,ComObj,Dialogs;function DaoActive(var DaoObject:OleVariant):Boolean;
function DaoCompactDB(const FileName:string):Boolean;
function DaoRepairDB(const FileName:string):Boolean;implementationfunction DaoActive(var DaoObject:OleVariant):Boolean;
begin
Result:=False;
try
DaoObject:=GetActiveOleObject('DAO.DBEngine.36');
Result:=True;
except
try
DaoObject:=CreateOleObject('DAO.DBEngine.36');
Result:=True;
except
DaoObject:=Null;
end;
end;
end;//压缩Access数据库
function DaoCompactDB(const FileName:string):Boolean;
var
db:OleVariant;
TempFile:string;
begin
Result:=False;
try
if not DaoActive(db) then
Exit;
try
TempFile:=ExtractFilePath(FileName)+'msaTemp.mdb';
db.CompactDatabase(FileName,TempFile);
DeleteFile(FileName);
RenameFile(TempFile,FileName);
Result:=True;
except
on E:EOleException do
ShowMessage(E.Message);
end
finally
db:=Unassigned;
end;
end;//修复Access数据库
function DaoRepairDB(const FileName:string):Boolean;
var
db:OleVariant;
begin
Result:=False;
try
if not DaoActive(db) then
Exit;
try
db.RepairDatabase(FileName);
Result:=True;
except
on E:EOleException do
ShowMessage(E.Message);
end
finally
db:=Unassigned;
end;
end;end.