Имя пользователя:

Пароль:


Список форумов ПРАКТИЧЕСКИЕ ВОПРОСЫ Работа Программирование и IT Просмотров: 740

ODBC/OLEDB - проблема совместимости


Давим клаву за бабло
  #1
Сообщение 02 Dec 2014, 15:25
Mitridat Аватара пользователя
СОЗДАТЕЛЬ ТЕМЫ
Canada, Ontario
Город: Оттава
Стаж: 11 лет 6 месяцев 23 дня
Постов: 5814
Лайкнули: 2001 раз
Карма: 35%
СССР: Киев, СПб
Пол: М
Заход: 08 Jul 2021, 20:49

http://dalexeev.livejournal.com/115803.html

У меня есть любимая програмка, которая должна уметь читать данные из Excel'ного файла. Написал я ее на Visual Basic 2008 в Windows 7 (а чо такого?). В Windows 7 (64-битной) у меня установлен Microsoft Office (32-битный). Драйвер ODBC/OLEDB изначально в Windows не установлен, но его можно бесплатно скачать и установить и в принципе он работает и программисты его хвалят. Называется он ACE (видимо от слов Access-Comma Separated-Excel).

Но не тут-то было! Драйвер ACE можно скачать 32 или 64-битный. 64-битный отказывается ставиться потому что он должен быть той же разрядности что и MS Office (32-битный). Если обходными путями суметь-таки установить 64-битный драйвер, то при следующем запуске MS Office его принудительно "переконфигурирует", и тот работать перестанет.

А если поставить 32-битный драйвер ACE, то он установится, но работать не будет, потому что Windows 64-битная. Даже если я свою программу компилирую в 32-битный код. Вот же ж засада! Зачем он тогда вообще соглашается ставиться на 64-битную систему?

Оказывается, должен быть двойной хак: надо принудительно поставить 64-битный драйвер (у него есть ключ командной строки), а потом отредактировать реестр, чтобы спрятать этот драйвер от MS Office и тот не пытался его стереть. И будет работать. И хоть бы кто-нибудь где-нибудь это внятно описал в официальных источниках! Книг на тему Visual Basic и ODBC/OLEDB я изучил штук 5 и статей без счета. Нашел крупицы знаний, глубоко закопанные на форумах.

(встрепенувшись) кто-нибудь из оставшихся в ЖЖ понимает, о чем это я тут говорю? На всякий случай суммирую для нормальных людей: Я бился лбом об эту стену недели три. Проломал. Ура :)

Вдогонку: в 64-битной версии Windows есть две абсолютно одинаково выглядящие программы для изменения настроек ODBC - odbcad32.exe – одна для настройки 64-битных драйверов, а другая – для 32-битных и она спрятана в папке под названием SysWOW64. Да. В папке, в названии которой присутствует число ‘64’ лежит не 64-битная программа, а 32-битная. А 64-битная лежит в папке под названием system32. То есть наоборот. Если не прочесывать форумы, сам не догадаешься.

Вдогонку 2: драйвер ODBC для Excel игнорирует документированный ключ HDR=... , которым можно указать, что в первой строчке таблицы находятся не заголовки столбцов а уже сразу данные. Если в первой строке данные, через ODBC считать их невозможно. В OLEDB работает, в ODBC нет. Эта проблема описана в Microsoft TechNet в 2003 году и с тех пор ее так и не починили, а просто запретили использование этого ключа. Ну и ну!

Но я все равно очень рад :)
Парадокс католицизма: в разных местах хранятся 12 черепов Иоанна Крестителя, но подлинные из них - только 3.

Вам есть что сказать по этой теме? Зарегистрируйтесь, и сможете оставлять комментарии
cron