Я не понимаю, что вы пытаетесь сделать. Почему вы используете один набор записей DAO и один ADO? Это не имеет никакого смысла. Если вы сохранили запросы в клиентской части Access, то, даже если ваша серверная часть, скажем, SQL Server со ссылками на таблицы ODBC, на самом деле никакой утилиты для использования ADO не существует.
В вашем коде нет никаких признаков цикла, поэтому, если ваш код не вызывается циклом, мне не кажется, что объяснение статьи базы знаний применимо.
Я не знаю, что именно вы хотите сделать, но мысль об открытии базы данных один раз, а не в каждом повторении вашего цикла, должна быть довольно очевидной для любого, кто думает об этом. Если вы запускаете цикл и неоднократно открываете одну и ту же базу данных при каждом повторении цикла, должно быть очевидно, что операция принадлежит за пределами цикла.
Это было бы что-то вроде этого:
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Set db = CurrentDB()
For Each qdf in db.QueryDef
[do whatever here]
Next qdf
Set qdf = Nothing
Set db = Nothing
В этом коде вы используете MDB, открытый в настоящее время в пользовательском интерфейсе, но это не имеет значения - какую бы базу данных вы ни открывали и не просматривали ее объекты, ее нужно открывать только один раз, вне цикла.
Если вы хотите, чтобы ваш цикл находился в подпрограмме, вызываемой из вашего основного кода, то передайте переменную базы данных в качестве аргумента вашей подпрограмме. Подпрограмма будет выглядеть примерно так:
Public Sub ProcessQueries(db As DAO.Database)
Dim qdf As DAO.QueryDef
For Each qdf in db.QueryDef
[do whatever here]
Next qdf
Set qdf = Nothing
End Sub
И вы бы назвали это так:
Dim db As DAO.Database
Set db = CurrentDB()
Call ProcessQueries(db)
Set db = Nothing
Теперь, если вы настаиваете на получении исходных данных из DAO, а затем что-то делаете с ними через ADO, у вас будет цикл DAO и внутри него, и цикл ADO. Из-за этого вы захотите определить соединение ADO вне цикла DAO, а не внутри него. Единственным исключением будет то, что данные, которые вы извлекаете из цикла DAO, определяют, какую базу данных вы открываете с помощью ADO. Поскольку мы не знаем, чего вы на самом деле пытаетесь достичь, практически невозможно дать хороший совет относительно того, что именно вы должны изменить в своем коде.