Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: доступ к 32-х разрядному Microsoft.Jet.OLEDB bp 64-х разрядной ОС  (Прочитано 26219 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Mikl
Постоялец

ru
Offline Offline

« : 15-12-2009 08:25 » 

Уважаемые, подскажите если кто сталкивался и решил проблему.

Есть база на Access.

И мне надо с ней работать. В 32-х разрядной операционке все без проблем.
В 64-х разрядной ни в какую. Пишет, что драйвер не найден.

Нашел в интернете что в 64-х разрядной ос есть 32-х разрядные драйвера windows\system\wow64\odbc... - как-то так.
Они там действительно есть, а вот как к ним достучаться из программы, поскольку 64-х разрядных Jet нет и не будет.
А по умолчанию обращение идет к 64-х разрядным драйверам.

Технология доступа что ADO, что DAO не работает естественно ни та ни другая.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 15-12-2009 08:58 » 

Mikl, вариантов два:

1. Поставь 64-битный драйвер и не мучайся.

2. 32-битные драйвера ODBC прекрасно работают в 64-битной винде. Вопрос в другом, что программа администрирования DNS-записей не работает с ними (но можно перенести настройки из реестра одной машины на другую).


А теперь детальнее.
1. Расскажи, что именно не получается.
2. Какой драйвер?
3. Покажи строку DSN.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Mikl
Постоялец

ru
Offline 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
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 15-12-2009 10:02 » 

А если вместо Provider попробовать "Driver=C:\\WINDOWS\\system32\\odbcjt32.dll"?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Mikl
Постоялец

ru
Offline Offline

« Ответ #4 : 15-12-2009 10:05 » 

Мысль. Спасибо.
Вечерос попробую (комп с х64 дома). О результатах напишу.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 15-12-2009 10:08 » 

Кстати, в чем разница - работать через Microsoft.Jet.* и через драйвер ODBC? Я не совсем разбираюсь в данной виндовой теме касательно файловых баз. Мне ODBC драйверов хватает и Jet не интересовался.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Mikl
Постоялец

ru
Offline Offline

« Ответ #6 : 15-12-2009 10:10 » 

Тут я Вам не советчик.

Насколько я разбирался что ADO что DAO все это надстройки над ODBC.

Т.е. можно как-то напрямую работать с ODBC, но как - меня никогда не интересовало.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 15-12-2009 10:59 » 

Mikl, я когда-то точно так же сказал и получил вот такой ответ:
https://forum.shelek.ru/index.php/topic,1692.msg28081.html#msg28081
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Mikl
Постоялец

ru
Offline 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
Постоялец

ru
Offline 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
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 15-12-2009 19:57 » 

У меня дому установлена WinXP 64.

Полный путь к файлу можно найти в данном ключе реестра:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI\Microsoft Access Driver (*.mdb)\Driver

Но... его там нет! Необходимый драйвер находится в папке "%SystemRoot%\SysWOW64".
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
lag
Участник

ru
Offline Offline

« Ответ #11 : 16-12-2009 07:03 » 

Цитата
я когда-то точно так же сказал и получил вот такой ответ:
https://forum.shelek.ru/index.php/topic,1692.msg28081.html#msg28081
Однако вспомнил вдруг свою строку подключения к 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
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 20-12-2009 10:20 » 

lag, какой результат?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
lag
Участник

ru
Offline Offline

« Ответ #13 : 20-12-2009 10:27 » 

Цитата
какой результат?
так работает программа уже года четыре Улыбаюсь
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 20-12-2009 10:43 » 

А чего же мы тут решали? Ага
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
lag
Участник

ru
Offline 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
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #16 : 20-12-2009 11:54 » 

lag, так речь же шла о драйвере Access...

Кстати, MySQL Connector 5.1 есть и для 32-битных, и для 64-битных машин. Совместимость со старыми версиями MySQL-серверов хорошая и видел только один отзыв о проблемах, когда потребовалось откатываться на 3.51.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
lag
Участник

ru
Offline Offline

« Ответ #17 : 20-12-2009 13:55 » 

Так, в принципе, какая разница - MySQL или Access - только разные драйверы.

С полгода-год назад пробовал MySQL 5.1 (хз какой версии) - не пошел он у меня в работающей программе. Я даже в отладке нашел в какой именно API-функции, правда сейчас уже не помню деталей. Был репорт о баге на mysql.com. Недавно снова попробовал, уже 5.1.6 - все работает, также как в 3.51, видимо исправили. Но полностью я пока не тестировал, некогда Улыбаюсь
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #18 : 20-12-2009 13:59 » 

Драйвер 5.1 хорош тем, что поддерживает свежие версии протоколов и может использовать возможности серверов 4.1 и 5.х, когда как драйвер 3.51 ограничен возможностями серверов 3.26 и 4.0, а с более новыми серверами работает по старому протоколу и, соотв., не поддерживает всех их фичей.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
lag
Участник

ru
Offline Offline

« Ответ #19 : 20-12-2009 14:34 » 

Мне 5.1 теоретически интересен тем, что с 3.51 у меня не всегда работали вложенные процедуры, причем так, что выявить неисправность не было возможности, т.е. работает-работает, вдруг раз - процедура не сработала Улыбаюсь - не разобрался. Хочу как-нибудь попробовать 5.1 - протестить досконально. Хотя, может быть, причина была и в сервере (5.0 на тот момент).
Записан
Mikl
Постоялец

ru
Offline 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
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #21 : 21-12-2009 06:30 » 

Mikl, с чем быть? Вопрос не понятен...
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Mikl
Постоялец

ru
Offline Offline

« Ответ #22 : 21-12-2009 09:50 » 

Строка

m_database->Open(DBFullPath,false,false);

В 32-х разрядной ОС работает. В 64-х разрядной нет.
Для DAO при доступе к .mdb базе никакой строки указывать не надо - так написано в MSDN.

Вопрос - как подключиться посредством DAO к базе данных .mdb в 64-х разрядной ОС.
Записан
lag
Участник

ru
Offline Offline

« Ответ #23 : 21-12-2009 17:01 » 

Попробуй зайди в Панель управления->Администрирование->Источники данных(ODBC).
Посмотри, есть ли там Access ODBC driver. По идее, должен быть, наверное, если установлен Access из MS Office.
Записан
Mikl
Постоялец

ru
Offline Offline

« Ответ #24 : 21-12-2009 17:13 » 

Его там нет.
Точнее есть, но при попытке его настроить - вываливается сообщение что он не установлен.
Это происходит, т.к. панель управления по умолчанию обращается к 64-битным драйверам.

А если запустить из каталога syswow64\odbc32.exe (как-то так - точно не помню), то он показываети дает настраивать 32-х разрядные драйвера. И там драйвер для Access есть и работает.
Записан
lag
Участник

ru
Offline 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
Постоялец

ru
Offline Offline

« Ответ #26 : 21-12-2009 19:23 » 

Настройки проекта - все так и стоит.

По ссылке - раздел "решение проблемы"

To maintain backward compatibility, no resolution for this problem is currently available.

Если я правильно понял - "фигВам".
Записан
lag
Участник

ru
Offline Offline

« Ответ #27 : 21-12-2009 21:19 » 

Попробуй скопировать odbcad32.exe из SysWoW64 в system32 - опять интересный за...скок MS - 64-битные драйвера в system32, 32-битные в syswow64 Улыбаюсь
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines