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

20

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

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

Ваш Ответ

7   ответов
1

ет сравнения.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
0

что это ответ, когда это должен был быть комментарий (у меня нет представителя), но я хотел убрать ошибочное утверждение о том, что 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

Error: User Rate Limit Exceeded
3

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

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

2

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

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

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

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Andrew Scagnelli
8

ерь заменяется 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 и условий обновления доступа для работы с 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 ).

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededusersError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
15

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

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

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

Для функций Jet 3.51 и более ранних версий выберите ADO или DAO. У обоих есть свои преимущества и недостатки. Подавляющее большинство функций ядра СУБД Access является общим для обоих; взаимоисключающий функционал спорный край. Выбор образа жизни, возможно, но ничего страшного. Умный кодер использует лучшее из обоих :)

Я использовал довольно много, и ADO - мое личное предпочтение. Он более современный, чем DAO, поэтому с точки зрения архитектуры он является улучшением: более плоская объектная модель, отсутствие проблем с DAO и т. Д. Больше свойств и методов и ввод событий (у DAO их нет), например. для асинхронного подключения и извлечения записей. Наборы записей ADO могут быть отключены, иерархически и сфабрикованы, а наборы записей DAO - нет. В основном, они взяли хорошие вещи о DAO и сделали их лучше.

DAO не без сильных сторон. Например, вы найдете больше примеров кода DAO, чем ADO для Access / Jet.

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

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

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceedednewError: User Rate Limit Exceeded
2

что 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. & Quot;

Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededdoesError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededdoError: User Rate Limit ExceededdoesError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы