Остановка выполнения кода макроса до завершения SQL-запроса - PullRequest
0 голосов
/ 30 мая 2019

Я написал довольно сложное приложение, которое использует Excel (2016) в качестве интерфейсного приложения для данных, хранящихся в базе данных MS Access, с использованием библиотеки ADO 6.1.Во время выполнения макрокода я заметил, что транзакции SQL, запускаемые моим приложением Excel, могут занять довольно много времени, и часто выполнение следующей строки кода в моем макросе Excel зависит от того, была ли эта транзакция SQL завершена первой.К сожалению, выполнение кода макроса и транзакции SQL являются асинхронными операциями, что означает, что макрос переходит на следующую строку кода, даже если транзакция SQL еще не завершена.

Мой текущий способ - использоватьФункция Sleep () использует Windows API для вставки фиксированной задержки, но это действительно уродливое решение, поскольку оно снижает производительность моего приложения и очень сильно зависит от нагрузки на процессор, поэтому иногда оно может работать, иногда нет.

Мне пока не удалось найти решение этой проблемы, я также не могу найти никаких подсказок в Интернете.

Использование Application.CalculateUntilAsyncQueriesDone здесь тоже не помогает.

У кого-нибудь есть идея или подсказка, как остановить выполнение макрокода в Excel до завершения транзакции SQL?Есть ли в ADO метод проверки завершения транзакции SQL?

1 Ответ

1 голос
/ 31 мая 2019

Ваш запрос находится в разделе «Данные / подключения»?

У меня была эта проблема, я отключил «Включить фоновое обновление» и добавил «VAV» в VBA, это заставляет подключение данных обновляться до того, какэто позволяет коду продолжить.Недостатком этого является то, что Excel чувствует себя запертым, но это решило мою проблему.

Sub Button1_Click()
ActiveWorkbook.Connections("ScrapData").Refresh
DoEvents


....Other code....


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