VBA очень медленно работает после разделения БД Access (локальный ПК, а не сетевой) - PullRequest
0 голосов
/ 08 января 2019

После разбиения моей БД Access я обнаружил, что код VBA, выполняемый в MS Project (вызываемый из Access), значительно замедлился (примерно в 6 раз).

Я использую MS Access 2016 и Project 2016 на локальном ПК без сетевого трафика.

Код VBA в MS Project выполняет серию поисков в базе данных Access, и именно эти процедуры выполняются медленно. Я ожидал бы замедления, если бы мой бэкэнд доступа был в корпоративной сети, но я удивлен, увидев замедление, когда и бэкэнд, и интерфейс, и MS Project все локальные.

Есть предложения?

Спасибо

Eric

1 Ответ

0 голосов
/ 15 января 2019

Скорее всего, вы испытываете замедление из-за того, что бэкэнд-файл многократно открывается и закрывается, когда к нему обращается веб-интерфейс. Принятое решение состоит в том, чтобы открыть постоянную связь между внешним интерфейсом и внутренним интерфейсом. Таким образом, бэкэнд-файл будет оставаться открытым до тех пор, пока открыт внешний интерфейс.

Чтобы настроить это, вам нужно создать пустую таблицу в бэкэнде, которая больше нигде не используется в проекте. Я назову это tblKeepOpen

Пример кода: (вызывается в макросе AutoExec)

Public Sub KeepBackendLinkOpen() 
    Static rsOpen As DAO.Recordset ' Static makes the Recordset reference persist
    Set rsOpen = CurrentDb.OpenRecordSet("SELECT * FROM tblKeepOpen", dbOpenSnapshot)
End Sub

Эта ссылка будет сохраняться до сбоя или потери состояния интерпретатора VBA. Вы можете перезагрузить ссылку, запустив KeepBackendLinkOpen из окна Immediate или снова запустив AutoExec.

Некоторым людям нравится управлять постоянными ссылками в скрытой форме. Ваш выбор.

PS - в Интернете много примеров того, как это сделать, но я не смог найти ни одного с хорошим простым примером.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...