Лучше ли использовать ADO или DAO в Access 2007?
При создании новой базы данных в Access 2007 должны использоваться ADO (объекты данных ActiveX) или DAO (объекты доступа к данным)?
Изменить: часть этой базы данных будет импортировать данные из электронных таблиц Excel 2007.
Ответы
Ответ 1
[Для записи официальное название того, что когда-то было "Jet", теперь является "механизмом доступа к базе данных".]
Для ACE (формат файла .accdb для Access2007) он должен быть ACEDAO.
Для функций Jet 4.0 он должен быть классическим ADO.
Для функций Jet 3.51 и ранее выберите либо ADO, либо DAO. Есть преимущества и недостатки для обоих. Подавляющее большинство функций ядра базы данных Access являются общими для обоих; взаимоисключающая функциональность спорно бахрома. Выбор образа жизни, возможно, но не имеет большого значения. Умный кодер использует лучшее из обоих:)
Я использовал оба довольно много, и ADO - мое личное предпочтение. Это более современно, чем DAO, поэтому в архитектуре это улучшенная модель: более плоская объектная модель, ни одна из проблем с отклонением DAO и т.д. Больше свойств и методов и вводит события (DAO не имеет), например. для асинхронного подключения и выборки записей. Записи ADO могут быть отключены, иерархичны и сфабрикованы, наборы DAO не могут. В основном, они брали хорошие вещи о DAO и делали их лучше.
DAO не лишен сильных сторон. Во-первых, вы найдете больше примеров кода DAO, чем ADO для Access/Jet.
P.S. по какой-то причине, людям, которым нравится DAO, действительно не нравится ADO. Игнорируйте пропаганду. ADO не устарел. ACE имеет поставщика OLE DB и в настоящее время является единственным способом использования ACE в 64 бит. ADO.NET не заменил ADO classic больше, чем VB.NET заменил VBA6 в проектах Access.
EDIT: просто уточнить: "Для функций Jet 4.0 он должен быть классическим ADO", это связано с тем, что DAO 3.6 получил несколько улучшений для новых функций Jet 4.0. Например, для типа данных DECIMAL
вы не можете указать масштаб/точность. Другие функции полностью отсутствуют из DAO. Например, можете ли вы сделать следующее в Jet 4.0, используя DAO (или ACEDAO в ACE, если на то пошло)?
CREATE TABLE Test (
col1 CHAR(4) WITH COMPRESSION DEFAULT '0000' NOT NULL,
CHECK (NOT EXISTS (
SELECT T1.col1
FROM Test AS T1
WHERE T1.col1 <> '0000'
GROUP
BY T1.col1
HAVING COUNT(*) > 1
))
);
(подсказка: сжатый столбец с фиксированной шириной с ограничением целостности данных на уровне таблицы). Нет, вы не можете.
AFAIK единственными улучшениями в ACEDAO были новые функциональные возможности ACE, то есть они не возвращались и заполняли пробелы Jet 4.0 в DAO. И почему они должны? У нас еще есть ADO, чтобы подключить разрывы. Лучше, чтобы команда потратила свое время более продуктивно, как исправление этой раздражающей ошибки сортировки DECIMAL
, для меня самое лучшее в ACE; -)
Ответ 2
DAO - это рекомендуемая технология здесь. ADO значительно обесценилась и теперь заменена ADO.net.
Не только DAO является родной и рекомендуемой моделью объектов данных для использования доступа к MS, она продолжает расширяться и теперь имеет целую кучу новых функций для sharepoint. В Access 2007 теперь мы имеем списки поддержки для SharePoint. Это означает, что новая объектная модель DAO в 2007 году позволяет использовать список sharepoint и рассматривать его как таблицу SQL-сервера. Это означает, что вы можете использовать SQL в списках sharepoint (в том случае, если у вас нет даже провайдера oleDB, который позволяет вам использовать списки SharePoint таким образом, но с DAO вы можете это сделать). В ADO ничего подобного не было добавлено. Таким образом, списки SharePoint с точки доступа (dao) видят эти списки SharePoint как стандартную таблицу.
Кроме того, DAO в доступе также поддерживает то, что мы называем сложными типами данных. Это было сделано для поддержки списков XML из sharepoint. Имейте в виду, что для следующей версии доступа (2010) мы увидим целую кучу новых дополнительных функций, добавляемых в DAO (JET теперь называется ACE).
Таким образом, без сомнения, DAO является правильной и хорошей моделью для использования. ADO не получает никаких дополнительных улучшений и был заменен ADO.NET.
Итак, будущее принадлежит DAO, и ясно, что Microsoft вкладывает свои деньги с точки зрения доступа к MS и условий обновления доступа к работе с sharepoint.
Access 2007 получил многозначные возможности для своих определений полей, и снова это стало результатом улучшений для поддержки sharepoint. Однако эти функции являются частью JET, и эти улучшения могут использоваться без sharepoint. они теперь являются частью DAO.
изменить:
Возможно, я немного расширюсь, и попробую уточнить, что у нас есть такие противоположные ответы здесь, я могу заверить вас, что при использовании доступа 2007 вам гораздо лучше использовать DAO.
В случае возникновения путаницы, если вы посмотрите на ссылки на инструменты, когда вы решите использовать доступ к данным по модели объектов данных по умолчанию 2007, проблема здесь в том, что она больше не называется DAO. Теперь он называется ACE.
Когда вы используете DAO в Access 2007 Youll в ссылках на инструмент, ссылка не установлена на DAO 3.6 (эта версия была обесценена, а также теперь не является частью загрузки MDAC). Вы заметите, что новая ссылка при использовании DAO в ms-access называется:
База данных Microsoft Office 12.0 с доступом к базе данных объектов
Теперь вышесказанное немного устарело, но вышеописанный для справочного доступа 2007, когда вы собираетесь использовать DAO вместо ADO.
Другими словами, возможно, мы должны назвать этот DAO II.
Другими словами, этот механизм данных продолжает улучшаться и, несомненно, увидит 64-битную версию этого движка для Office 2010 (офис 14).
Таким образом, вопрос или путаница сосредотачиваются вокруг того, какой термин будет использоваться, когда мы будем ссылаться на использование DAO в доступе 2007. Путаница здесь в том, что документация и даже ссылки на инструменты → не называют ее DAO.
В конце дня в доступе 2007, если вы планируете использовать DAO, это означает, что вы установили вышеуказанную ссылку и не устанавливаете ссылку на DAO 3.6. Несмотря на это, нет смысла начинать использовать ADO сейчас, когда его обесценили, а новая объектная модель DAO для доступа продолжает расширяться и инвестироваться Microsoft.
Надеюсь, это поможет нам разобраться в этом. В то время как DAO/JET Its обесценивается, доступ к новой версии 2007 основан на одной и той же базе кода, за исключением того, что она продолжает улучшаться. Таким образом, новый механизм данных в доступе можно рассматривать и называть новой объектной моделью DAO.
В настоящее время я под NDA по этой проблеме, но я могу с уверенностью сказать вам, что для следующей версии офиса (2010) мы снова увидим целый ряд улучшений.
Таким образом, среди разработчиков Access почти единогласно, что при разработке приложений доступа и использовании встроенного механизма данных предпочтение отдается использованию объектной модели DAO (но помните, что больше не называли ее, мы называли ее ACE).
Ответ 3
Ответ на вопрос зависит от того, что вы делаете. Если вы используете Access для работы с данными, которые в формате, ADO-интерфейс которого более универсален, используйте ADO. Если вы используете данные Jet или используете механизм базы данных Jet для работы с другим движком базы данных (через ODBC), тогда DAO является правильным выбором.
Но этот ответ предполагает, что вы работаете из Access. Если вы работаете из какой-либо другой среды программирования, ответы, вероятно, будут совершенно разными.
Ответ 4
ADO - текущий рекомендуемый метод доступа. Я думаю, что DAO устарели уже довольно много лет.
Похоже, что с момента выхода Access 2000 - согласно эта ссылка,
Список устаревших технологий доступа к данным - http://msdn.microsoft.com/en-us/library/ms810810.aspx#mdac технологии дорожная карта old_topic9
Цитата из вышеупомянутой статьи, которая была изменена. Dec 2008 - "Объекты доступа к данным (DAO): DAO предоставляет доступ к базам данных JET (Access). Этот API может использоваться с Microsoft Visual Basic, Microsoft Visual С++ и языков сценариев Он был включен в Microsoft Office 2000 и Office XP. DAO 3.6 является окончательной версией этой технологии. Он не будет доступен в 64-разрядной операционной системе Windows".
Ответ 5
Это зависит от ваших потребностей. Ожидается, что ни один из инструментов не исчезнет в ближайшее время.
Если у вас нет опыта в ADO или DAO, вы обнаружите, что DAO намного проще. Поэтому, если вам не нужен ADO, используйте DAO.
Вы добавили этот важный элемент: "Я пытаюсь извлечь данные из внешнего источника в базу данных доступа". Для этой связи может потребоваться ADO.
Ответ 6
DAO просто сказывается с точки зрения производительности по сравнению с ADO. Нет никакого сравнения.
Ответ 7
Извиняется, что это ответ, когда он должен был быть комментарием (у меня нет ответа), но я хотел прояснить ошибочное утверждение о том, что DAO/ACEDAO не поддерживает запись в Jet 4.0. Это происходит, и это поведение по умолчанию, независимо от того, что утверждают некоторые статьи MS.
Проблема заключается в том, что при использовании DAO edit/update может возникнуть огромный вздутие (чрезвычайно фрагментированный файл DB), и вы не можете отключить его в DAO/ACEDAO.
Если у вас есть эта проблема, вы можете отключить ее, сначала открыв базу данных через соединение OLEDB, используя правильные настройки режима OLEDB: настройки блокировки базы данных, которые позволят вам установить базу данных на блокировку на уровне страницы. Затем это свойство будет соблюдаться посредством последовательных соединений, DAO или иным образом, поэтому вы можете использовать DAO для быстрого обновления и т.д.
Это позволит DAO вернуться к обычной производительности 8X по сравнению с выполнением операторов SQL.
Вот несколько ссылок, указывающих на проблему:
Поддерживает ли ACEDAO блокировку уровня строки?
http://www.access-programmers.co.uk/forums/showthread.php?t=47040
Статья в MS KB, включая код настройки режима блокировки с ADO, затем с помощью DAO на этом БД - http://support.microsoft.com/?id=306435