在delphi里压缩修复access数据库后出现的排序问题(200分)

  • 主题发起人 主题发起人 lorca
  • 开始时间 开始时间
L

lorca

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在delphi里压缩与修复access数据库的方法我已经会了,在大富翁里有很多代码,我用的是function CompactDatabase(AFileName,APassWord:string):boolean;想必很多人一看函数就知道用的是哪个了:)(这只是其中的一种方法)
但出现的问题是:无论用哪种方法,对数据库使用后破坏了排序规则,SQL语句中的order by变得无效,希望有高人能指点,如何改进能使排序正常,先谢过了。(注:ADODataset的Sort方法还可以正确排序,现只讨论用SQL语句中的order by)
有这样一个例子:access数据库里的一个test表,academy是一个字符型字段,表示毕业院校,有三条记录如下:
academy
云南大学
三门峡师专
中州大学
.......
使用ADOQuery打开表并按院校排序代码如下:
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from test order by academy');
Open;
end;
正确的排序结果应当是(三S、云Y、中Z):
academy
三门峡师专
云南大学
中州大学
......
好,开始压缩修复access数据库。。。。。
方法1:直接在MS access里打开数据库,使用“工具|数据库实用工具|压缩和修复数据库”
再打开ADOQuery1,显示排序结果正常
方法2:在Delphi里用上面的代码压缩和修复数据库,再打开ADOQuery1,显示排序结果:
academy
三门峡师专
中州大学
云南大学
结果显然不符合要求!
 
压缩后还有这样的?以后不压了
 
觉得和索引可能存在联系。
你使用academy做key,建立索引再压缩试试?
 
版本差异,如果安装了ACCESS的话可以使用COM直接调用
CompactRepair(SourceFile, DestinationFile, LogFile
进行压缩。。
要不我看够戗。。。。。
以后还要升级。。。这个原始的DAO的东西就不行了。
 
回zywcd,已经建立了索引
 
有知道改进方法的吗??
 
ACCESS2000以后的mdb数据库格式变了,JRO的压缩方法不再可靠.
如果装了ACCESS,则可以用以下函数压缩数据库
function CompactRepair(
const ASourceFile : string;
const AObjectFile : string
):Boolean;
var
access : OleVariant;
begin
try
access := CreateOleObject('Access.Application');
Result := access.CompactRepair(ASourceFile, AObjectFile, False);
access.Quit;
except
Result := False;
end;
end;
 
这问题还真没注意过。。汗!
 
轻舞肥羊兄:这个函数怎么用啊,总是执行到Result := access.CompactRepair(ASourceFile, AObjectFile, False);
这一行出现CompactRepair不被automation object支持。。。
 
后退
顶部