Если вы объявляете просто Recordset
без указания, является ли это DAO или ADO, Access самостоятельно решит, будет ли это DAO или ADO, в зависимости от порядка ваших ссылок:
Откройте окно кода, перейдите в Инструменты -> Ссылки и посмотрите там список.
Это будет выглядеть примерно так:
![Access references window](https://i.stack.imgur.com/Knm4x.jpg)
Вы видите, что в этом примере есть ссылка на DAO («Библиотека объектов Microsoft DAO 3.6») и ADO («Библиотека объектов данных Microsoft ActiveX 2.5»).
Если вы объявите свой набор записей без указания типа, Access выберет первую из этих ссылок (= ту, которая больше в верхней части списка) и создаст набор записей этого типа.
Так что в этом примере это будет DAO.Recordset
.
Теперь вернемся к вашему вопросу:
Вы объявляете свой Recordset без указания типа.
Так что если первая ссылка в вашей Access базе данных ADO, Access создаст ADODB.Recordset
.
Затем вы открываете его методом DAO, который ожидает DAO.Recordset
, и именно поэтому вы получаете ошибку.
Есть два способа решения вашей проблемы:
- Убедитесь, что ваша база данных Access имеет ссылку только на ADO или DAO (но не оба), тогда вам не нужно указывать тип набора записей.
- Если вам действительно нужны обе ссылки, всегда объявляйте ваши наборы записей как
DAO.Recordset
или ADODB.Recordset
, чтобы убедиться, что это действительно тот тип, который ожидает ваш код.