我有一个包含3个表单的Delphi应用程序,我正在使用Access 2003和Microsoft.Jet.OLEDB.4.0,我在主表单中有一个ADOconnection并以各种形式使用它。
我使用2个.mdb文件,其中my.mdb包含指向org.mdb表的链接。
一切正常,但速度很慢。经过长时间的搜索,我来到了这里。
我不知道为什么,但是在我运行此查询后,所有其他查询的速度都会大幅提高(从1秒钟后的10秒)。 (即使是不排除链接表的查询)。
表tb_odsotnost在my.mdb中 表Userinfo已链接。
with rQueries.ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('SELECT DISTINCT tb_odsotnost.UserID, Userinfo.Name FROM tb_odsotnost');
SQL.Add('LEFT JOIN Userinfo ON Userinfo.UserID = tb_odsotnost.UserID');
SQL.Add('WHERE datum BETWEEN '+startDate+' AND'+endDate);
SQL.Add('ORDER BY Userinfo.Name ASC');
Open;
end;
我尝试使用win7和MS Access 2007在另一台计算机上运行我的应用程序,结果是一样的。
好的,现在我只是在onFormActivate上运行此查询,但这不是一个永久的解决方案。
答案 0 :(得分:3)
对链接表运行查询时,Access(或Jet或ADO)会获取ldb文件的数据库锁。如果关闭查询,则下次查询链接表时必须重新获取该锁定。推荐的解决方法是始终保持背景数据集处于打开状态,以便每次都不必获取锁定(强制锁定保持有效)。
请参阅http://office.microsoft.com/en-us/access-help/improve-performance-of-an-access-database-HP005187453.aspx并查看“提高链接表格的效果”部分。
如果这没有用,请查看Access中的表定义,看看是否在一对多关系中为表字段定义了子数据表。