Access数据库压缩时CompactDatabase方法的参数?数据库带密码! (50分)

L

lccc

Unregistered / Unconfirmed
GUEST, unregistred user!
Access数据库压缩时CompactDatabase方法的几个
参数?数据库带密码!
没法查找,老是显示“网页上有错误”!
 
已经解决,请版主删除!
 
兄弟,我还不知道呢,你解决了就贴出来吧
 
那就不帖了
 
db.CompactDatabase(filename,tempfile,'',0,';pwd=你的密码');
 
db.CompactDatabase(filename,tempfile,'',0,';pwd=你的密码');
db是什么组件,还是什么类。
 
to lccc:
能帖你解决的方法出来么
谢谢
 
抱歉,刚看到。这时我的一个过程

//压缩和修复数据库,每周1下午五点下班时执行。
//整理数据页和索引页碎片。
procedure CompressDB;
var
DBPath,DBName,TempName:string;//数据库的名称,含路径
V:OLeVarint;
begin
DBPath:=ExctractFilePath(Application.ExeName);
if DBPath[Length(DBPath)]<>'/' then
DBPath:=DBPath+'/';//因为用户可能安装在根目录下面,程序路径尾部没有/
DBName:=DBPath+'Data/PioneerDB.MDF';
TempName:=DBPath+'Data/TempDB.MDF';
V:=CreateOLeObject('DAO.DBEngine.36');//创建OLE对象
try
Swidth;//Swidth方法切换控件的可用性和可见性
Cursor:=crSQLWait;
try
V.CompactDatabase(DBName,TempName,'',0,';pwd=我的密码');
DeleteFile(DBName);
ReNameFile(TempName,DBName);
except
MessageBox(Handle,'修复错误。','提示',MB_OK+MB_ICONERROR);
end;
finally
V:=UnAssigned;//释放OLE对象
Cursor:=crDefault;
Swidth;//Swidth方法切换控件的可用性和可见性
end;
end;
 
Swidth是包含在那个单元,帮助中没有这个方法的说明
ADOTable.Active :=false;
在程序中我已经关闭了数据库,但是还是提示说已经被谁打开了.
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1268352
 
结束!
Switch是我自己的切换方法!
 
lccc兄,Switch方法可是关键,现在我不知到怎样关闭数据库,
你就不能告诉我你的方法吗,我可以给你分。
 
to yanghai0431:
你的程序中应该没有用连接吧,新建一个连接,把所有tadotable,tadoquery之类的用这个
连接访问数据库,关闭时就关闭这个连接,打开记得把tadotable.active设为true
 
to yanghai0437:
Swidth是切换组件的可用性的。
压缩程序是一个单独的程序,是单独运行的。你提到的问题我也
,提示没有独占,所以才单独写的。


ADOConnection必须释放后,才切断连接,要不你用Profiler看看,
我用SQL Server实验了以下:在ADOConnection关闭时,
Profiler中没有监视到切断连接的语句,但如果释放组件
或关闭程序,立即监测到关闭语句
//该成以下代码在我的使用Access的程序中通过。
procedure Switch;
procedure SwitchActive(const NewState:Boolean);
begin
for I:=0 to DM.ComponentCount-1 do
if DM.Components is TADODataSet then
TADODataSet[DM.Components].Active:=NewState
end;
var
I:Integer;
begin
//压缩界面中Query组件Active肯定=False
if ADOConnection<>nil then
begin
SwitchActive(False);//切断表的连接
ADOConnection.Connected:=False;
ADOConnection.Free;
ADOConnection:=nil;
end else
begin
ADOConnection:=TADOConnection.Create(DM);
ADOConnection.Connected:=True;//触发BeforeConnect事件设置连接字符串
SwitchActive(True);//恢复表的连接
end;
end;
 
谢谢你了
 
顶部