![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 | |
Форумчанин
Регистрация: 30.01.2009
Сообщений: 418
|
![]()
сравнение форматов баз данных MS Access
начну с того какие новые функции появились в *.ACCDB Цитата:
Поскольку обе базы являются локальными БД то производительность 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? нажимаем "файл"-->"Сохранить и опубликовать" Выбираем там нужный формат и сохраняем. ![]() |
|
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 30.01.2009
Сообщений: 418
|
![]()
проверил работу Office 2007 при последующей установке MS Database Enjine драйвера скачанного отдельно.
до установки TWideString после установки TWideMemo так что если использовать MS Office 12.0 Access DB Engine то надо прописывать в требованиях к вашему ПО что нужен драйвер от 2010 года поскольку офис 2007 щас уже можно считать устаревшим то требование будет оправданым также все работает при остуствии офиса и установленном драйвере 2010 |
![]() |
![]() |
![]() |
#3 | |
Пользователь
Регистрация: 26.08.2010
Сообщений: 39
|
![]() Цитата:
Полезная информация. Мне эта инфа понадобилась в 2020-м). Странно что в далеком 2011-м никто даже спасибо не сказал автору этих постов. |
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа 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 |