сравнение форматов баз данных MS Access
Запись от Alex_pac размещена 27.05.2012 в 02:20
Показов 9349
Комментарии 0
|
сравнение форматов баз данных 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? нажимаем "файл"-->"Сохранить и опубликовать" Выбираем там нужный формат и сохраняем. Также для драйвера MS Office 12.0 Access DB Engine можно приклеплять с приложением этот сам драйвер, чтобы даже если офис отсуствует или он не той версии чтобы приложение работало. http://www.microsoft.com/downl... x?id=13255 работает как 2010 (TWideMemo) как mdb так и accdb |
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.


