2012-03-16 2 views
14

Это не вопрос, который лучше, а вопрос о том, почему они отличаются функционально. Проблема, с которой я столкнулся, была обработана, но мне любопытно, почему это поведение происходит.Разница между 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

Трудно комментировать, не видя свой код, но это может быть проблема типа cusrsor/recordset. Вы полагаетесь на значения по умолчанию в своем коде?Если вы работаете только с Access, DAO - лучший выбор, поскольку он является родным для Access и дает больше контроля, чем ADO – SWa

+2

Где вы используете подстановочные знаки? Это обычная проблема, для ADO подстановочный знак%, тогда как DAO (обычно) *. – Fionnuala

+0

@Remou, я знаком с разницей в шаблоне между ними, но, к сожалению, я не использую их в запросах. – APrough

ответ

11

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

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

+1

+1 DAO - намного лучший выбор, чем ADO для доступа – SWa

+0

@Matt Donnan - Параметры не должны быть проблемой; оба запроса используют их, и после того, как я изменил его на таблицу, он все еще использовал их. Должно быть что-то еще, когда процесс запроса занимает слишком много времени или что-то в этом роде. Тем не менее, мне нравится ваш комментарий. «Использование метода DAO приведет к доступу для выполнения запроса, а не к Excel, и, таким образом, он сможет получить доступ к своим собственным параметрам/ссылкам». Возможно, у ADO есть Excel, пытающийся обработать запрос, и он там пропадает? – APrough

+0

@creamyegg и Кайл. Я согласен с тем, что DAO, вероятно, лучший выбор, но я обычно использую ADO для SQL Server, плюс мои привычки умирают тяжело, и использование ADO в большинстве случаев прекрасное, пока я не столкнулся с такой проблемой: P Ну, сам использовать DAO с этого момента (в этих типах проектов). – APrough

3

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

UtterAccess Wiki Article: Choosing between ADO and ADO

1

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

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

+0

Читайте, что ADO больше не находится в активной разработке Ссылка: http://www.utteraccess.com/ вики/index.php/Choosing_between_DAO_and_ADO –

Смежные вопросы