Delphi ADO与MS Access-运行特定查询后减少查询次数

Delphi ADO与MS Access-运行特定查询后减少查询次数,delphi,delphi-7,ado,ms-access-2003,Delphi,Delphi 7,Ado,Ms Access 2003,我有一个带有3个表单的Delphi应用程序,我使用的是Access 2003和Microsoft.Jet.OLEDB.4.0,我在主表单中有一个ADO连接,并在所有表单中使用它 我使用2.mdb文件,其中my.mdb有指向org.mdb表的链接 一切正常,但速度很慢。经过长时间的搜寻,我终于找到了这个 我不知道为什么,但在我运行这个查询之后,所有其他查询的速度都会显著提高(从10秒到1秒)。(即使是不解开链接表的查询) 表tb_odsotnot在my.mdb中 表Userinfo已链接 wi

我有一个带有3个表单的Delphi应用程序,我使用的是Access 2003和Microsoft.Jet.OLEDB.4.0,我在主表单中有一个ADO连接,并在所有表单中使用它

我使用2.mdb文件,其中my.mdb有指向org.mdb表的链接

一切正常,但速度很慢。经过长时间的搜寻,我终于找到了这个

我不知道为什么,但在我运行这个查询之后,所有其他查询的速度都会显著提高(从10秒到1秒)。(即使是不解开链接表的查询)

表tb_odsotnot在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的计算机上运行我的应用程序,结果是一样的


好的,现在我只是在FormActivate上运行这个查询,但这不是一个永久的解决方案

对链接表运行查询时,Access(或Jet或ADO)会获取ldb文件数据库上的锁。如果关闭查询,则下次查询链接表时必须重新获取该锁。解决这个问题的推荐方法是始终保持后台数据集打开,这样就不必每次都获取锁(强制锁保持有效)

请参阅并查看“提高链接表的性能”部分


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

SQL的这种小小的平静会如何影响所有其他静态数据表?我不想每次启动程序时都运行此查询。如果没有这个,其他查询应该很快。所以我想知道access是否有一些我不知道的“功能/兑现…”。它是否创造了一种隐藏的关系?我将过程移动到一个新表单(创建了一个新连接),并尝试运行不同的查询,结果是相同的。在我运行上面的查询之前,一切都很慢。我不知道还能查到什么。