2012-02-14 59 views
1

我有一個Delphi應用程序與3個窗體,我使用Access 2003和Microsoft.Jet.OLEDB.4.0,我有一個ADOconnection在主窗體中,並使用它以各種形式。德爾福ADO與MS Access - 查詢時間減少後,運行特定查詢

我使用2個.mdb文件,其中my.mdb具有指向org.mdb表的鏈接。

一切正常,但非常緩慢。所以經過長時間的搜索,我來到了這裏。

我不知道爲什麼,但是在我運行這個查詢後,所有其他查詢的速度顯着增加(從1秒以下的10秒)。 (即使不排除鏈接表的查詢)。

表tb_odsotnost在my.mdb中
Table 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

你的問題是什麼? – RRUZ 2012-02-14 19:54:32

+0

這個SQL的小小和平如何影響所有其他quieries?我不想每次啓動程序時都運行這個查詢。沒有這些,其他查詢應該很快。所以我想知道如果訪問有一些「功能/兌現......」我不知道。它創造了一種隱藏的關係嗎?我將該過程移動到一個新窗體(創建一個新連接),並嘗試運行不同的查詢,結果相同。一切運行緩慢,直到我運行上面的查詢。我不知道我還能檢查什麼。 – user805528 2012-02-14 20:32:46

回答

3

當您對鏈接表運行查詢時,Access(或Jet或ADO)獲取ldb文件的數據庫鎖定。如果關閉查詢,則在下次查詢鏈接表時必須重新獲取該鎖。推薦的解決方法是始終保持背景數據集處於打開狀態,以便不必每次都獲取鎖定(強制鎖定保持有效)。

請參閱http://office.microsoft.com/en-us/access-help/improve-performance-of-an-access-database-HP005187453.aspx並查看「提高鏈接表的性能」部分。

如果這沒有幫助,請查看您在Access中的表格定義,以查看是否在一對多關係中爲表格字段定義了子數據表。