Разница между ADO и DAO

Это не вопрос о том, что лучше, а вопрос о том, почему они отличаются функционально. Проблема, с которой я столкнулся, была решена, но мне любопытно, почему такое поведение происходит.

Фон - использование Excel vba для извлечения данных из базы данных Access. Когда пользователь нажимает кнопку, из Access извлекается набор записей, и он заполняет различные данные в электронной таблице. Затем другой набор записей извлекается из другого запроса, чтобы заполнить другую часть электронной таблицы.

Что делает ADO - ADO отлично работает для моего первого набора записей. Однако мой второй набор записей идет к запросу в Access, выполняется и не возвращает строк. Если я выполню этот запрос в Access, он откроется (примерно через 3-4 секунды). Этот запрос имеет несколько объединений, вычисляемых элементов, ограничений и, возможно, запросов на объединение (я пробовал много разных способов, с объединением / без и т. Д.). Я попытался закрыть и снова открыть соединение ADO. Я попытался изменить значения тайм-аута, и я даже протестировал с помощью команды ADO, чтобы выполнить запросы таблицы Make для этих данных, а затем вместо этого извлекать из таблицы (это работало, кстати, но не в лучшем случае, так как данные постоянно меняются и я не хочу запускать запрос make table каждый раз, когда кто-то использует этот инструмент).

Итак, я изменил второе извлечение данных на DAO, и вот, это работает. Первым извлечением данных по-прежнему является ADO (который я обычно предпочитаю использовать), но сейчас я рассматриваю вопрос об изменении его на DAO, потому что я предпочел бы иметь один метод доступа к данным в коде.

Итак, может кто-нибудь объяснить мне, почему ADO не будет извлекать данные в одном случае, а DAO будет? Опять же, это чисто для информационных целей.

3 ответа

Решение

DAO - это собственный метод доступа к данным для таблиц данных Jet (Ms-Access). ADO "Active X Data Objects" - это дружественное к отрасли соединение практически со всеми типами баз данных.

При стандартном запросе в этом случае нет причины, по которой ADO не должен возвращать никаких записей, где это делает DAO, я подозреваю, что запрос также должен содержать параметры, относящиеся к элементам в базе данных Access. Если это так, то ADO не будет работать, так как у него не будет возможности использовать указанные параметры, так как это всего лишь внешняя ссылка на Excel. Использование метода DAO вызовет Access для выполнения запроса, а не Excel, и поэтому будет работать быть в состоянии получить доступ к своим собственным параметрам / ссылкам.

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

Статья Вики UtterAccess: Выбор между ADO и ADO

В Visual Basic вам доступны три интерфейса доступа к данным: объекты данных ActiveX (ADO), удаленные объекты данных (RDO) и объекты доступа к данным (DAO). Интерфейс доступа к данным - это объектная модель, которая представляет различные аспекты доступа к данным. Используя Visual Basic, вы можете программно контролировать соединение, построители операторов и возвращаемые данные для использования в любом приложении.

Почему в Visual Basic есть три интерфейса доступа к данным? Технология доступа к данным постоянно развивается, и каждый из трех интерфейсов представляет собой современное состояние. Последним является ADO, который имеет более простую, но более гибкую объектную модель, чем RDO или DAO. Для новых проектов вы должны использовать ADO в качестве интерфейса доступа к данным.

Другие вопросы по тегам