带有MS Access的Delphi ADO - 运行特定查询后查询时间减少

时间:2012-02-14 17:47:38

标签: delphi delphi-7 ado ms-access-2003

我有一个包含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上运行此查询,但这不是一个永久的解决方案。

1 个答案:

答案 0 :(得分:3)

对链接表运行查询时,Access(或Jet或ADO)会获取ldb文件的数据库锁。如果关闭查询,则下次查询链接表时必须重新获取该锁定。推荐的解决方法是始终保持背景数据集处于打开状态,以便每次都不必获取锁定(强制锁定保持有效)。

请参阅http://office.microsoft.com/en-us/access-help/improve-performance-of-an-access-database-HP005187453.aspx并查看“提高链接表格的效果”部分。

如果这没有用,请查看Access中的表定义,看看是否在一对多关系中为表字段定义了子数据表。