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

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

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

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

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

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

Ответы

Ответ 1

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

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

Ответ 2

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

UtterAccess Wiki Article: выбор между ADO и ADO

Ответ 3

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

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