Bug #41796 SQLConfigDataSource failed: Cannot find driver
Submitted: 30 Dec 2008 16:00 Modified: 20 May 18:51
Reporter: Anton Serbulov
Status: QA testing
Category:Connector/ODBC Severity:S1 (Critical)
Version:5.1.5 OS:Microsoft Windows
Assigned to: Bugs System Target Version:
Tags: SQLConfigDataSource failed: Cannot find driver
Triage: D2 (Serious)

[30 Dec 2008 16:00] Anton Serbulov
Description:
1. Install mysql-connector-odbc-5.1.5-win32.msi on Windows w2k3/w2k8 (x86/x86)
2. Add System DNS via SQLConfigDataSource
3. Result: 
---
Cannot find driver
Cannot find driver
Driver's ConfigDSN, ConfigDriver, or ConfigTranslator failed
---

How to repeat:
#include "stdafx.h"
#include "windows.h"
#include "odbcinst.h"
#include <iostream>

int _tmain(int argc, _TCHAR* argv[])
{
	#define countof(array)	(sizeof(array) / sizeof(array[0]))
	if (!SQLConfigDataSource(NULL,ODBC_ADD_SYS_DSN, 
		_T("MySQL ODBC 5.1 Driver"), 
		_T("DSN=qwe\0") 
		_T("Server=localhost\0") 
		_T("Database=mydb1\0") 
		_T("UID=mydbu1\0")
		_T("PWD=qweqwe\0")))
	{
		std::wstring m_errStr;

		for(WORD i = 1; i <= 8; ++i){
           DWORD errorCode;
           TCHAR errorMsg[SQL_MAX_MESSAGE_LENGTH];
           RETCODE ret = SQLInstallerError(i, &errorCode, errorMsg,
(WORD)countof(errorMsg), NULL);
           if(ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO){
               if(!m_errStr.empty())
                 m_errStr += _T('\n');
               m_errStr += errorMsg;
           }
		}
		std::wcout << m_errStr.c_str() << std::endl;
	}
	return 0;
}

Suggested fix:
--- C:/mysql-connector-odbc-5.1.5r1144/util/installer.c	Sat Aug 09 00:07:56 2008
+++ C:/mysql-connector-odbc-5.1.5r1144/util/installer.c	Tue Dec 30 19:35:41 2008
@@ -999,7 +999,7 @@
 
   /* Get the actual driver info (not just name) */
   driver= driver_new();
-  memcpy(driver->name, ds->driver,
+  memcpy(driver->lib, ds->driver,
          (sqlwcharlen(ds->driver) + 1) * sizeof(SQLWCHAR));
   if (driver_lookup(driver))
   {
[30 Dec 2008 16:02] Anton Serbulov
Sorry...

1. Install mysql-connector-odbc-5.1.5-win32.msi on Windows w2k3/w2k8 (x86/x64)
[8 Jan 17:15] Jess Balint
Anton, Thanks for your bug report. Is the application you've compiled a 32 or 64 bit
application?
[9 Jan 5:00] Anton Serbulov
32-bit application
[13 Jan 12:53] Tonci Grgin
Bug#41867 was marked as duplicate of this report.
[16 Jan 18:25] Mike Beirens
Hello,

I have the same problems, creating it with Setup Factory and VB6
With 3.51 it is working.
Allow me to define what I think the problem may be.
The DLL isn't in system32 directory anymore, but in the Program Files\MySql... what is
not a defaultpath in windows.

Mike
[28 Jan 14:48] Roberto Farioli
We have the same error with MYSQL ODBC 5.1
[28 Jan 21:01] Tonci Grgin
Hi Anton and thanks for your report.

We have tested and discussed it but I won't go into details now. This appears to be the
genuine problem, at least on my W2K8 server x64 box.

So, verified as described.
[29 Jan 22:32] Jess Balint
Problem was, driver lib was passed to ds_add(), which is normally set back to the name in
ShowOdbcParamsDialog().

=== modified file 'setupgui/ConfigDSN.c'
--- setupgui/ConfigDSN.c        2008-03-18 02:12:19 +0000
+++ setupgui/ConfigDSN.c        2009-01-29 21:29:08 +0000
@@ -116,7 +116,22 @@
       rc= FALSE;
       break;
     }
-    ds_set_strattr(&ds->driver, driver->lib);
+    if (hWnd)
+    {
+        /*
+          hWnd means we will at least try to prompt, at which point
+          the driver lib will be replaced by the name
+        */
+        ds_set_strattr(&ds->driver, driver->lib);
+    }
+    else
+    {
+        /*
+          no nWnd is a likely a call from an app, no prompting so
+          we put the driver name already
+        */
+        ds_set_strattr(&ds->driver, driver->name);
+    }
   case ODBC_CONFIG_DSN:
 #ifdef _WIN32
     /*
[29 Jan 23:33] Jess Balint
Duplicate of bug#33825
[4 Mar 8:16] Tonci Grgin
Bug#43350 was marked as duplicate of this report.
[4 Mar 8:21] Tonci Grgin
Jess, I don't see the patch in main dev tree. Where is it pushed to and in which revision?
[5 Apr 3:53] Muhammad Anjum
Hi,
I am just new to MySQL and I am facing the same problem. how can I get the patch for
this. Please guide.thanks.
[13 Apr 19:21] Osvaldo Miatello
There is any news about this Bug?
I'm trying to create from VB 6.0 a DSN, see this http://support.microsoft.com/kb/171146 

It works perfectly if replace:

strDriver = "SQL Server" into this strDriver = "MySQL ODBC 3.51 Driver"

But it doesn't works when i try the 5.1 ODBC Driver:
strDriver = "MySQL ODBC 5.1 Driver"

Any one can Help?

Regards,
[20 May 18:51] Jess Balint
Pushed as rev 832, will be released in 5.1.6.
[27 Jul 11:21] Dennis G
Related post http://forums.mysql.com/read.php?37,271033,271033#msg-271033

I am using Version 5.1.6r828_20090319_0836-win32 and I get the Driver not found error on
ONE machine, whereas not on the other machine. Only obvious difference between the two is
English XP on the working machine, German XP on the not-working one.
Code used was custom, but can be replicated with the Microsoft sample code with the link
posted previously (kb171146)

Switching back to 3.51 makes the code work on all machines. I'm available for any
inquiries concerning the differences of the two machines.
[3 Aug 9:03] Bogdan Degtyariov
Hi Dennis,

Can you please check the following REG_SZ values in the registry of both English and
German versions of WinXP:

HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\<DSN_NAME>\DRIVER
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\MySQL ODBC 5.1 Driver\DRIVER
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\MySQL ODBC 5.1 Driver\SETUP

Thanks.
[3 Aug 12:49] Dennis G
Interesting differences there:
First Working reg on English XP:

HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\<DSN_NAME>\DRIVER
C:\Program Files\MySQL\Connector ODBC 5.1\myodbc5.dll
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\MySQL ODBC 5.1 Driver\DRIVER
C:\Program Files\MySQL\Connector ODBC 5.1\myodbc5.dll
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\MySQL ODBC 5.1 Driver\SETUP
C:\Program Files\MySQL\Connector ODBC 5.1\myodbc5S.dll

-----------------------------------------------
now the not working reg on German XP:
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\<DSN_NAME>\DRIVER
--does not apply-- as Access reports Driver not found I cannot create the DSN - 
a manual creation via ODBC interface leads to correct "C:\windows\system32\myodbc5.dll"
otherwise it is C:\windows\system32\myodbc3.dll for the 3.51 driver
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\MySQL ODBC 5.1 Driver\DRIVER
C:\windows\system32\myodbc5.dll
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\MySQL ODBC 5.1 Driver\SETUP
C:\windows\system32\myodbc5S.dll
-----------------------------------------------

I notice only one point:
On the one machine the MySQL ODBC Connector was installed to Program Files on the other
Machine to system32. Funnily teh driver cannot be found when installed in system32. I
could try reinstalling all the drivers, but still want to report my findings.
[6 Aug 18:28] Jess Balint
Dennis,
Can you try again using at least rev 832? I just checked the snapshots which are at 835.
You can download a copy here:

http://downloads.mysql.com/snapshots.php