数据库的压缩!(50分)

  • 主题发起人 主题发起人 berg
  • 开始时间 开始时间
B

berg

Unregistered / Unconfirmed
GUEST, unregistred user!
access数据库,
我发现删除记录后,数据库的大小并没有改变,必须压缩数据库后才能释放空间?
不知道有怎么来用代码压缩数据库(或者用api函数,不知道用哪个api函数)!
 
怎么没人回答啊,对你们来说应该不是很难的啊!
 
有人告诉我说这么压缩,我也没试过,好象要有一个临时库。

procedure TForm1.Button2Click(Sender: TObject);
var
Dest_DB_Connection: OleVariant;
l_Source_Con_Str, l_Dest_Con_Str: string;
begin
try
Dest_DB_Connection := CreateOleObject('JRO.JetEngine');
except
Exit;
end;

l_Source_Con_Str := 'Data Source=C:/1.mdb;';

l_Dest_Con_Str := 'Data Source=C:/2.mdb;';

try
OleCheck(Dest_DB_Connection.CompactDatabase(l_Source_Con_Str, l_Dest_Con_Str));
except
end;
end;
 
不是很理解!
C:/2.mdb相当于一个临时库,那么这个库是要事先存在的了,
可没当运行到OleCheck(Dest_DB_Connection.CompactDatabase(l_Source_Con_Str, l_Dest_Con_Str));
时总是提示:database already exists?

在别的地方看到:
function CampactAccessDB(const FileName: String):Boolean;
var
db:OLEVariant;
tempfile:String;
begin
Result:=False;
try
Screen.Cursor:=crHourGlass;
try
tempfile:=AppendSlash(ExtractFilePath(FileName))+'AccessTemp.mdb';
db.CompactDatabase(FileName,tempfile);
DeleteFile(FileName);
RenameFile(tempfile,FileName);
Result:True;
except
on E:EOleException do
MsgError(E.Message);
end;
finally
db:=Unassigned;
Screen.Cursor:=crDefault;
end;
end;

不知道要用到哪些单元,AppendSlash是不可识别的

 
搜索一下,这里有一篇文章,讲的非常详细
 
我也很想知道,相信这也是大家关心的吧
 
我用 DiamondAccess 操作 ACCESS 的数据库 (快, 好用. 发布方便 )

就用这样的代码就办了.

我也是在这找来的. 你看看好不好用.

对了. 我的 数据库是 ACCESS 2000

procedure Tfmmain.N32Click(Sender: TObject);
begin
if Application.MessageBox('是否要压缩数据库(inv.mdb)?!', '提示', 48 + mb_OkCancel + MB_DEFBUTTON2) = IDOK then
begin

dm_main.DAODb_main.Close;
dm_main.DAODb_main.Connected := False;
if __DBEngine36 = nil then CreateEngine(Dao36, '');
__DBEngine36.CompactDatabase('inv.mdb', 'invtemp.mdb', ';pwd=userpass', 0, '; pwd=userpass');
DeleteFile('inv.mdb');
RenameFile('invtemp.mdb', 'inv.mdb');
dm_main.DAODb_main.Open;
Application.MessageBox('压缩数据库成功!', '提示', 48 + mb_ok);

end;
end;
 
我有ACCESS压缩的控件要不要,要的话给我发EMAIL
HAPPYBOYJIA·163.COM
 
山猫:我没有用DiamondAccess控件(因为开始我并没有用access数据库)
happyboyjia:我给你发了邮件,请接收!
 
后退
顶部