Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.08.2011, 17:26   #1
Lesha
Форумчанин
 
Аватар для Lesha
 
Регистрация: 30.01.2009
Сообщений: 418
Вопрос MDB или ACCDB

сравнение форматов баз данных MS Access

начну с того какие новые функции появились в *.ACCDB

Цитата:
Новые возможности формата файлов Office Access 2007

Поля подстановок, одновременно допускающие несколько значений
Большая часть программ баз данных, включая ранние версии Access, позволяли хранить одиночные значения в каждом поле. В Office Access 2007 можно создавать поля подстановок, которые содержат одновременно более одного значения в поле. Это создает отношения «многие ко многим» внутри поля и скрывает детали реализации в системных таблицах.

Тип данных «Вложение»

Новый тип данных «Вложение» позволяет хранить документы и двоичные файлы любых типов в базе данных без излишнего увеличения ее объема. Чтобы уменьшить общий объем хранимых данных, вложения автоматически сжимаются, если это возможно.

Интеграция с Windows SharePoint Services 3.0 и Microsoft Office Outlook 2007

Работа с автономными списками SharePoint

Отслеживание истории поля MEMO
Поля MEMO полезны для хранения больших объемов информации. При работе с Office Access 2007 можно задать свойство (Только добавление(AppendOnly)), при котором приложение Access сохраняет историю всех изменений поля MEMO.
если так посмотреть то с точки зрения Конструирования БД ничем не отличает от MDB

Поскольку обе базы являются локальными БД то производительность ACCDB даже если и будет выше, то не намного.
Исходя из этого можно сделать вывод что существенной разницы между MDB и ACCDB как между Базами данных нет.

теперь посмотрим на специфику подключения баз данных.

доступ к ACCDB осуществляется через
MS Office 12.0 Access DB Engine

MDB может работаь как через
MS Office 12.0 Access DB Engine
так и через
MS Jet 4.0 OLE DB

последний причем работает только в x86 Windows ОС

итак в чем же главная разница?
а дело все в том что эти драйверы по-разному указывают тип данных полей для Delphi, если вычисляемое поле находится внутри SQL запроса,
а не вычисляется внутри Delphi

итак возмем базу в формате MDB (разницы нет ибо дело в драйвере)
таблица tt



тип полей ttt и ttt2 являются строковыми до 255 символов

теперь создадим проект в Delphi подключим базу через драйвер
MS Office 12.0 Access DB Engine

скриншот

напишем SQL запрос
и поместим его в ADOQuery


и теперь самое интересное
угадайте какой тип поля получит колонка в датасете?
TWideMemo !!!
то есть из универсальной безопасной строки мы получили MEMO поле которое нужно еще дополнительно преобразовывать в Delphi чтобы отобразить в Гриде например



а теперь посмотрим что нам покажет другой драйвер
MS Jet 4.0 OLE DB
переподключаем базу

после переподключения базы и попытке активации AdoQuery получаем следующее

скриншот

что означает что драйвер регистрирует поле другим типом данных TWideString
удалим поле и создадим заново


получим тип поля TWideString который более гибкий чем TWideMemo

Можно было закрыть глаза на эти несовметимости, однако есть самый существенный баг который ставит крест на использовании ACCDB
это несовместимость драйвера в офисе 2007 с драйвером 2010
То есть один и тот же драйве баз данных
MS Office 12.0 Access DB Engine
в разных версиях офиса возвращает разные типы полей для delphi

в 2007 этот запрос на поле tt3 вернет TWideString как и старый MS Jet4
а вот в 2010 уже будет Memo поле.

то есть получаем что программа написанная с использованием ACCDB на том или ином офисе будет вылетать изза того что один и тот же драйвер в разных офисах себя по-разному ведет.

выход из этой ситуации это использовать для доступа MS Jet4.0 и формат MDB который не зависит от офиса и работать будет везде.

ДОПОЛНЕНИЕ

как сохранить базу данных *.accdb в формате *.mdb через Access 2010?

нажимаем "файл"-->"Сохранить и опубликовать"
Выбираем там нужный формат и сохраняем.


Lesha вне форума Ответить с цитированием
Старый 26.08.2011, 03:37   #2
Lesha
Форумчанин
 
Аватар для Lesha
 
Регистрация: 30.01.2009
Сообщений: 418
По умолчанию

проверил работу Office 2007 при последующей установке MS Database Enjine драйвера скачанного отдельно.

до установки TWideString
после установки TWideMemo

так что если использовать MS Office 12.0 Access DB Engine
то надо прописывать в требованиях к вашему ПО что нужен драйвер от 2010 года

поскольку офис 2007 щас уже можно считать устаревшим то требование будет оправданым

также все работает при остуствии офиса и установленном драйвере 2010
Lesha вне форума Ответить с цитированием
Старый 24.06.2020, 14:24   #3
Aleks_www
Пользователь
 
Регистрация: 26.08.2010
Сообщений: 39
По умолчанию

Цитата:
Сообщение от Lesha Посмотреть сообщение
проверил работу Office 2007 при последующей установке MS Database Enjine драйвера скачанного отдельно.

до установки TWideString
после установки TWideMemo

так что если использовать MS Office 12.0 Access DB Engine
то надо прописывать в требованиях к вашему ПО что нужен драйвер от 2010 года

поскольку офис 2007 щас уже можно считать устаревшим то требование будет оправданым

также все работает при остуствии офиса и установленном драйвере 2010

Полезная информация. Мне эта инфа понадобилась в 2020-м). Странно что в далеком 2011-м никто даже спасибо не сказал автору этих постов.
Aleks_www вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа Delphi с *.accdb MS Access ArtGrek БД в Delphi 15 19.04.2011 00:12
Не могу открыть файл с расширением .accdb valerij Microsoft Office Access 3 25.01.2011 11:25
с Датасет в *.mdb info БД в Delphi 3 18.11.2009 12:47
MDB в DELHI cowboy БД в Delphi 6 16.06.2009 17:06
Запись из файла txt или mdb в базу данных DerSky БД в Delphi 6 09.06.2008 12:50