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