Лучше использовать ADO или DAO в Access 2007?

Следует ли при создании новой базы данных в Access 2007 использовать ADO (объекты данных ActiveX) или DAO (объекты доступа к данным)?

Изменить: Часть этой базы данных будет импортировать данные из таблиц Excel 2007.

7 ответов

Решение

[Для записи, официальное название того, что когда-то было "Jet", теперь называется "Access database engine".]

Для функций 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.

PS почему-то люди, которым нравится DAO, действительно не любят ADO. Игнорировать пропаганду. ADO не считается устаревшим ACE имеет поставщика OLE DB и в настоящее время является единственным способом использования ACE в 64-битной среде. ADO.NET не заменил ADO classic больше, чем VB.NET заменил VBA6 в проектах Access.

РЕДАКТИРОВАТЬ: просто чтобы уточнить: "Для функций Jet 4.0 это должен быть ADO classic", это потому, что 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;-)

DAO - это рекомендуемая технология здесь. ADO сильно обесценился, и теперь заменяется ADO.net.

DAO не только является родной и рекомендуемой моделью объектов данных для использования доступа MS, она продолжает совершенствоваться и теперь имеет целый ряд новых функций для sharepoint. В Access 2007 у нас теперь есть поддержка списков SharePoint. Это означает, что новая объектная модель DAO для 2007 позволяет использовать список общих точек и просматривать их как таблицу сервера SQL. Это означает, что вы можете использовать SQL в списках sharepoint (хотя нет даже поставщика oleDB, который бы позволял вам использовать списки SharePoint таким образом, но теперь с DAO вы можете сделать это). Ничего подобного не было добавлено в ADO. Таким образом, списки SharePoint с точки зрения доступа (дао) рассматривают эти списки SharePoint как стандартную таблицу.

Кроме того, DAO в доступе также поддерживает так называемые сложные типы данных. Это было сделано для поддержки списков XML с sharepoint. Имейте в виду, что в следующей версии доступа (2010) мы увидим еще кучу новых дополнительных функций, добавляемых в DAO (JET теперь называется ACE).

Так что, без сомнения, DAO является правильной и хорошей моделью для использования. ADO больше не получает улучшений и был заменен ADO.NET.

Таким образом, будущее принадлежит DAO, и совершенно очевидно, что именно туда Microsoft вкладывает свои деньги с точки зрения доступа к MS и условий обновления Access для работы с вещами sharepoint.

Access 2007 получил многозначные возможности для своих определений полей, и снова это стало результатом улучшений для поддержки sharepoint. Тем не менее, эти функции являются частью JET, и эти улучшения могут использоваться без sharepoint. теперь они являются частью DAO.


редактировать: возможно, я собираюсь немного подробнее остановиться на этом, и попытаться уточнить, что у нас есть такие противоположные ответы здесь, я могу заверить вас, что при использовании Access 2007, вам гораздо лучше использовать DAO.

Отсюда и путаница: если вы посмотрите на ссылки на инструменты, когда решите использовать модель доступа к данным по умолчанию для доступа к 2007, проблема в том, что она больше не называется DAO. Теперь это называется ACE.

Когда вы используете DAO в Access 2007, вы заметите, что в ссылках на инструмент не указывается DAO 3.6 (эта версия устарела и больше не является частью загрузки MDAC). Вы заметите, что новая ссылка при использовании DAO в ms-access называется:

Microsoft Office 12.0 доступ к базе данных ядро ​​библиотеки объектов

Теперь вышесказанное является полным ртом, но приведенное выше является правильным для справочного доступа 2007, когда вы собираетесь использовать DAO вместо ADO.

Другими словами, возможно, мы должны назвать это DAO II.

Другими словами, этот механизм обработки данных продолжает совершенствоваться и наверняка увидит 64-разрядную версию этого механизма для Office 2010 (Office 14).

Таким образом, вопрос или путаница заключаются в том, какой термин собирались использовать, когда мы говорим об использовании DAO в Access 2007. Здесь путаница заключается в том, что документация и даже ссылки на инструменты -> не называют это DAO.

В конце дня в Access 2007, если вы планируете использовать DAO, это означает, что вы установили вышеупомянутую ссылку и не устанавливаете ссылку на DAO 3.6. Несмотря на это, нет абсолютно никакого смысла начинать использовать ADO сейчас, когда он устарел, и новая объектная модель DAO для доступа продолжает совершенствоваться и инвестироваться Microsoft.

Я надеюсь, что это поможет прояснить запутанный здесь. Хотя DAO/JET устарела, новая версия access 2007 основана на той же кодовой базе, за исключением того, что она продолжает улучшаться. Таким образом, новый механизм доступа к данным можно рассматривать и называть новой объектной моделью DAO.

В настоящее время я работаю в NDA по этому вопросу, но могу с уверенностью сказать, что в следующей версии Office (2010) мы снова увидим множество улучшений.

Таким образом, среди разработчиков Access почти единодушно, что при разработке приложений доступа и использовании собственного обработчика данных предпочтение здесь отдано использованию объектной модели DAO (но имейте в виду, что мы больше не называем это так, мы назвали это ACE).

Ответ на вопрос зависит от того, что вы делаете. Если вы используете Access для работы с данными в формате, интерфейс ADO которого более универсален, используйте ADO. Если вы используете данные Jet или ядро ​​базы данных Jet для работы с другим ядром базы данных (через ODBC), то DAO - правильный выбор.

Но этот ответ предполагает, что вы работаете с Access. Если вы работаете в какой-то другой среде программирования, ответы, вероятно, будут совершенно другими.

ADO - текущий рекомендуемый метод доступа. Я думаю, что DAO устарела в течение многих лет.

Похоже, это было с Access 2000 - по этой ссылке,

Список устаревших технологий доступа к данным - http://msdn.microsoft.com/en-us/library/ms810810.aspx дорожная карта технологий old_topic9

Цитата из вышеприведенной статьи, которая была изменена в декабре 2008 г. - "Объекты доступа к данным (DAO): DAO предоставляет доступ к базам данных JET (Access). Этот API можно использовать из Microsoft Visual Basic, Microsoft Visual C++ и языков сценариев. включены в Microsoft Office 2000 и Office XP. DAO 3.6 является окончательной версией этой технологии. Она не будет доступна в 64-разрядной операционной системе Windows ".

Это зависит от ваших потребностей. Ожидается, что ни один инструмент не исчезнет в ближайшее время.

Если у вас нет опыта ни в ADO, ни в DAO, вы обнаружите, что DAO намного, намного проще. Поэтому, если вам не нужен ADO, используйте DAO.

Вы добавили этот критический пункт: "Я пытаюсь извлечь данные из внешнего источника в базу данных Access". Это подключение может потребовать ADO.

DAO просто потрясающий в плане производительности по сравнению с ADO. Там нет сравнения.

Извиняюсь, что это ответ, когда это должен был быть комментарий (у меня нет представителя), но я хотел убрать ошибочное утверждение о том, что DAO/ACEDAO не поддерживает блокировку записей Jet 4.0. Это так, и это поведение по умолчанию, независимо от того, что утверждают некоторые статьи MS.

Проблема в том, что при использовании редактирования / обновления DAO это может привести к появлению большого раздувания (файла с сильно фрагментированной БД), и вы не можете отключить его в DAO/ACEDAO.

Если у вас есть эта проблема, вы можете отключить ее, сначала открыв базу данных через соединение OLEDB, используя правильные настройки Jet OLEDB: Режим блокировки базы данных, что позволит вам установить для базы данных блокировку на уровне страницы. Это свойство будет затем учитываться при последующих подключениях, DAO или иным образом, поэтому вы можете использовать DAO для быстрого обновления и т. Д.

Это позволит DAO вернуться к обычной 8-кратной производительности по сравнению с выполнением операторов SQL.

Вот несколько ссылок, указывающих на проблему:

Поддерживает ли ACEDAO блокировку на уровне строк?

http://www.access-programmers.co.uk/forums/showthread.php?t=47040

Статья MS KB, включая код установки режима блокировки с помощью ADO, а затем использования DAO в этой БД - http://support.microsoft.com/?id=306435

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