Лучше использовать ADO или DAO в Access 2007? - PullRequest
20 голосов
/ 24 июня 2009

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

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

Ответы [ 7 ]

15 голосов
/ 25 июня 2009

[Для справки, официальное название того, что когда-то было «Jet», теперь называется «механизм доступа к базе данных».]

Для функций ACE (формат Access2007 .accdb) это должен быть ACEDAO.

Для функций Jet 4.0 это должен быть ADO classic.

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

РЕДАКТИРОВАТЬ: просто чтобы уточнить: «Для функций 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; -)

8 голосов
/ 24 июня 2009

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).

3 голосов
/ 25 июня 2009

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

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

2 голосов
/ 24 июня 2009

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

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

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

2 голосов
/ 24 июня 2009

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

Похоже, что это было с Access 2000 - согласно эта ссылка ,

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

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

1 голос
/ 29 октября 2009

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

0 голосов
/ 17 января 2011

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

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

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

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

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

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

http://www.access -programmers.co.uk / форум / showthread.php? Т = 47040

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

...