| 
			| 
					
						| 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.ConnectionadoConnect.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   |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	|  |