Delphi ADO с MS Access - время выполнения запроса сокращается после выполнения определенного запроса - PullRequest
1 голос
/ 14 февраля 2012

У меня есть приложение Delphi с 3 формами, я использую Access 2003 и Microsoft.Jet.OLEDB.4.0, у меня было соединение ADO в основной форме, и я использую его во всех формах.

Я использую 2 файла .mdb, где my.mdb имеет ссылки на таблицы org.mdb.

Все работает, но очень медленно.Так что после долгих часов поисков я пришел к этому.

Не знаю почему, но после выполнения этого запроса скорость всех остальных запросов резко возрастает (с 10 секунд до 1 секунды).(Даже запросы, которые не исключают связанные таблицы).

Таблица 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, и в результате получилосьтак же.

Хорошо, сейчас я просто запускаю этот запрос на ForformActivate, но это не постоянное решение.

1 Ответ

3 голосов
/ 15 февраля 2012

Когда вы запускаете запрос к связанной таблице, Access (или Jet или ADO) получает блокировку базы данных для файла ldb.Если вы закроете запрос, эта блокировка должна быть восстановлена ​​при следующем запросе к связанной таблице.Рекомендуемый способ обойти это - всегда держать открытый набор фоновых данных, чтобы блокировку не приходилось получать каждый раз (чтобы блокировка оставалась в силе).

См. http://office.microsoft.com/en-us/access-help/improve-performance-of-an-access-database-HP005187453.aspx и посмотрите на раздел «Повышение производительности связанных таблиц».

Если это не поможет, посмотрите определения таблиц в Access, чтобы увидеть, есть ли у вас под-таблицы, определенные для полей таблицы в одно-к-одному.много отношений.

...