Mikl
Постоялец
Offline
|
|
« : 15-12-2009 08:25 » |
|
Уважаемые, подскажите если кто сталкивался и решил проблему.
Есть база на Access.
И мне надо с ней работать. В 32-х разрядной операционке все без проблем. В 64-х разрядной ни в какую. Пишет, что драйвер не найден.
Нашел в интернете что в 64-х разрядной ос есть 32-х разрядные драйвера windows\system\wow64\odbc... - как-то так. Они там действительно есть, а вот как к ним достучаться из программы, поскольку 64-х разрядных Jet нет и не будет. А по умолчанию обращение идет к 64-х разрядным драйверам.
Технология доступа что ADO, что DAO не работает естественно ни та ни другая.
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #1 : 15-12-2009 08:58 » |
|
Mikl, вариантов два:
1. Поставь 64-битный драйвер и не мучайся.
2. 32-битные драйвера ODBC прекрасно работают в 64-битной винде. Вопрос в другом, что программа администрирования DNS-записей не работает с ними (но можно перенести настройки из реестра одной машины на другую).
А теперь детальнее. 1. Расскажи, что именно не получается. 2. Какой драйвер? 3. Покажи строку DSN.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Mikl
Постоялец
Offline
|
|
« Ответ #2 : 15-12-2009 09:32 » |
|
>Поставь 64-битный драйвер и не мучайся.
Если бы он был - я бы так и сделал. И тут бы не спрашивал. Но его нет и не будет - так утверждают в MS. Ссылку на это искать нет времени.
>32-битные драйвера ODBC прекрасно работают в 64-битной винде. Вопрос в другом, что программа администрирования >DNS-записей не работает с ними (но можно перенести настройки из реестра одной машины на другую).
Вы не поняли. Я в курсе, что они работают. И программа администрирования тоже с ними прекрасно работает. Но 32-х разрядная, о чем я и писал.
Не получается подключиться к 32-х разрядному драйверу, т.к. по умолчанию обращение идет к 64-х разрядному.
Строка
sprintf(szBuf, "Provider='Microsoft.Jet.OLEDB.%d.%d';Data Source='%s'", nJetVer, nJetVerEx, pStrFileName);
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #3 : 15-12-2009 10:02 » |
|
А если вместо Provider попробовать "Driver=C:\\WINDOWS\\system32\\odbcjt32.dll"?
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Mikl
Постоялец
Offline
|
|
« Ответ #4 : 15-12-2009 10:05 » |
|
Мысль. Спасибо. Вечерос попробую (комп с х64 дома). О результатах напишу.
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #5 : 15-12-2009 10:08 » |
|
Кстати, в чем разница - работать через Microsoft.Jet.* и через драйвер ODBC? Я не совсем разбираюсь в данной виндовой теме касательно файловых баз. Мне ODBC драйверов хватает и Jet не интересовался.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Mikl
Постоялец
Offline
|
|
« Ответ #6 : 15-12-2009 10:10 » |
|
Тут я Вам не советчик.
Насколько я разбирался что ADO что DAO все это надстройки над ODBC.
Т.е. можно как-то напрямую работать с ODBC, но как - меня никогда не интересовало.
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #7 : 15-12-2009 10:59 » |
|
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Mikl
Постоялец
Offline
|
|
« Ответ #8 : 15-12-2009 11:36 » |
|
http://www.xakep.ru/magazine/xs/052/020/1.aspТут вроде все популярно объяснено кому интересно. Может как раз поэтому для меня что OLE DB ("Есть и другой (весьма популярный для SQL РБД) метод - OLE DB-надстройка над механизмами ODBC") что ODBC - одинаково. Был неправ.
|
|
|
Записан
|
|
|
|
Mikl
Постоялец
Offline
|
|
« Ответ #9 : 15-12-2009 18:02 » |
|
Решил сначала проверить в 32-х разрядной ОС предложенную строку
sprintf(szBuf, "Driver=C:\\WINDOWS\\system32\\odbcjt32.dll;Data Source='%s'", pStrFileName);
получил ошибку
"Ошибка при открытии соединения[Microsoft][Диспетчер драйверов ODBC]. Источник данных не найден и не указан драйвер используемый по умолчанию"
|
|
« Последнее редактирование: 15-12-2009 18:09 от Алексей1153++ »
|
Записан
|
|
|
|
RXL
|
|
« Ответ #10 : 15-12-2009 19:57 » |
|
У меня дому установлена WinXP 64.
Полный путь к файлу можно найти в данном ключе реестра:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI\Microsoft Access Driver (*.mdb)\Driver
Но... его там нет! Необходимый драйвер находится в папке "%SystemRoot%\SysWOW64".
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
lag
Участник
Offline
|
|
« Ответ #11 : 16-12-2009 07:03 » |
|
Однако вспомнил вдруг свою строку подключения к MySQL из VB6: Set adoConnect = New ADODB.Connection adoConnect.ConnectionString = "driver={MySQL ODBC 3.51 Driver};" & _ "server=" & sServer & ";uid=" & sUid & ";pwd=" & sPwd & ";database=" & sDB adoConnect.ConnectionTimeout = 3000 adoConnect.Open
и так как с OLEDB не работал - хватало ODBC - тоже считал, что ADO - надстройка над ODBC.
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #12 : 20-12-2009 10:20 » |
|
lag, какой результат?
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
lag
Участник
Offline
|
|
« Ответ #13 : 20-12-2009 10:27 » |
|
какой результат? так работает программа уже года четыре
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #14 : 20-12-2009 10:43 » |
|
А чего же мы тут решали?
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
lag
Участник
Offline
|
|
« Ответ #15 : 20-12-2009 11:38 » |
|
из плюсов это выглядит так вариант 1: CDatabase gdb;
CString sConnectString = "DRIVER=MySQL ODBC 3.51 Driver;UID=lag;PWD=123;SERVER=192.168.0.64;DATABASE=test;"; gdb.OpenEx(sConnectString, CDatabase::useCursorLib | CDatabase::noOdbcDialog);
В дальнейшем стал определять источник данных ODBC в Панель управления->Администрирование->Источники данных(ODBC) и подключался так вариант 2: CDatabase gdb;
gdb.Open("mysql-5", FALSE, FALSE, NULL); // где mysql-5 - имя DSN для драйвера MySQL ODBC 5.1
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #16 : 20-12-2009 11:54 » |
|
lag, так речь же шла о драйвере Access...
Кстати, MySQL Connector 5.1 есть и для 32-битных, и для 64-битных машин. Совместимость со старыми версиями MySQL-серверов хорошая и видел только один отзыв о проблемах, когда потребовалось откатываться на 3.51.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
lag
Участник
Offline
|
|
« Ответ #17 : 20-12-2009 13:55 » |
|
Так, в принципе, какая разница - MySQL или Access - только разные драйверы. С полгода-год назад пробовал MySQL 5.1 (хз какой версии) - не пошел он у меня в работающей программе. Я даже в отладке нашел в какой именно API-функции, правда сейчас уже не помню деталей. Был репорт о баге на mysql.com. Недавно снова попробовал, уже 5.1.6 - все работает, также как в 3.51, видимо исправили. Но полностью я пока не тестировал, некогда
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #18 : 20-12-2009 13:59 » |
|
Драйвер 5.1 хорош тем, что поддерживает свежие версии протоколов и может использовать возможности серверов 4.1 и 5.х, когда как драйвер 3.51 ограничен возможностями серверов 3.26 и 4.0, а с более новыми серверами работает по старому протоколу и, соотв., не поддерживает всех их фичей.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
lag
Участник
Offline
|
|
« Ответ #19 : 20-12-2009 14:34 » |
|
Мне 5.1 теоретически интересен тем, что с 3.51 у меня не всегда работали вложенные процедуры, причем так, что выявить неисправность не было возможности, т.е. работает-работает, вдруг раз - процедура не сработала - не разобрался. Хочу как-нибудь попробовать 5.1 - протестить досконально. Хотя, может быть, причина была и в сервере (5.0 на тот момент).
|
|
|
Записан
|
|
|
|
Mikl
Постоялец
Offline
|
|
« Ответ #20 : 21-12-2009 06:25 » |
|
Все это здорово.
Но у меня нет MySQL.
И как быть с CDaoXXXX классами. Там, чтобы подключиться к базе Access вообще ничего передавать не надо
CDaoWorkspace* m_workspace; CDaoDatabase* m_database; CDaoRecordset* m_pRs1;
m_workspace=new CDaoWorkspace(); m_database=new CDaoDatabase(m_workspace); m_database->Open(DBFullPath,false,false);
И как тут быть?
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #21 : 21-12-2009 06:30 » |
|
Mikl, с чем быть? Вопрос не понятен...
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Mikl
Постоялец
Offline
|
|
« Ответ #22 : 21-12-2009 09:50 » |
|
Строка
m_database->Open(DBFullPath,false,false);
В 32-х разрядной ОС работает. В 64-х разрядной нет. Для DAO при доступе к .mdb базе никакой строки указывать не надо - так написано в MSDN.
Вопрос - как подключиться посредством DAO к базе данных .mdb в 64-х разрядной ОС.
|
|
|
Записан
|
|
|
|
lag
Участник
Offline
|
|
« Ответ #23 : 21-12-2009 17:01 » |
|
Попробуй зайди в Панель управления->Администрирование->Источники данных(ODBC). Посмотри, есть ли там Access ODBC driver. По идее, должен быть, наверное, если установлен Access из MS Office.
|
|
|
Записан
|
|
|
|
Mikl
Постоялец
Offline
|
|
« Ответ #24 : 21-12-2009 17:13 » |
|
Его там нет. Точнее есть, но при попытке его настроить - вываливается сообщение что он не установлен. Это происходит, т.к. панель управления по умолчанию обращается к 64-битным драйверам.
А если запустить из каталога syswow64\odbc32.exe (как-то так - точно не помню), то он показываети дает настраивать 32-х разрядные драйвера. И там драйвер для Access есть и работает.
|
|
|
Записан
|
|
|
|
lag
Участник
Offline
|
|
« Ответ #25 : 21-12-2009 18:18 » |
|
Здорово! MS для своих программ не делает нужные драйвера. Удивительно. Попробуй в настройках проекта - Project -> Solution Properties -> Build -> Platform Target -> x86 Может быть поможет. Еще может быть попробовать посмотреть - http://support.microsoft.com/kb/942976Вот еще нашел - Office 2010 will come in a native x64 version so we should expect native x64 drivers then.
|
|
« Последнее редактирование: 21-12-2009 18:33 от lag »
|
Записан
|
|
|
|
Mikl
Постоялец
Offline
|
|
« Ответ #26 : 21-12-2009 19:23 » |
|
Настройки проекта - все так и стоит.
По ссылке - раздел "решение проблемы"
To maintain backward compatibility, no resolution for this problem is currently available.
Если я правильно понял - "фигВам".
|
|
|
Записан
|
|
|
|
lag
Участник
Offline
|
|
« Ответ #27 : 21-12-2009 21:19 » |
|
Попробуй скопировать odbcad32.exe из SysWoW64 в system32 - опять интересный за...скок MS - 64-битные драйвера в system32, 32-битные в syswow64
|
|
|
Записан
|
|
|
|
|