Excel VBA connect to MySQL - architecture mismatch error - mysql

I am trying to connect to MySQL from my local machine located on a server using VBA. Initially I was receiving the below error.
[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified.
After some research, I figured out that the MySQL ODBC driver should be installed first. I installed the driver from the below location.
http://dev.mysql.com/downloads/connector/odbc/
I have a 64 bit machine and so I installed the driver for 64 bit and tried to establish the connection. Even then I was receiving the same data source name not found error. However from the ODBC data source administrator, if I select System DSN, I am able to see MySQL driver installed and I am able to create a new data source for my database in the server.
However from VBA, if I call the data source I receive another error.
[Microsoft][ODBC Driver Manager] The specified DSN contains an architecture mismatch between the Driver and Application.
This is how I am calling the data source from my VBA.
Dim oConn As ADODB.Connection
Set oConn = New ADODB.Connection
oConn.Open "data_source_name"
Also,for the 64 bit ODBC connector I am able to see two drivers as below in my System DSN.
MySQL ODBC 5.2 ANSI Driver
MySQL ODBC 5.2 Unicode Driver
For both of the drivers, my connection is successful from the ODBC data administrator.
I tried to figure out a solution for the architecture mismatch problem and I read if I create the DSN by running the ODBC application from the below location on a 64 bit machine, it might work.
C:\Windows\System32\odbcad32
However for this scenario too, I received the same architecture mismatch error.
I even tried installing MySQL Connector/ODBC 5.2.5 32 bit in my machine. For this case, I am not able to see the driver listed in the system DSN.
Can someone help me figure out what am actually doing wrong?

I can select and loop thru results sets and do inserts. data verified in db. let me know if you need help
windows 7 Ultimate
version 6.1 (build 7601: service pack 1)
64 bit
************************************************************************
ODBC Data Source Administrator
run by command: %windir%\system32\odbcad32.exe
2 drivers:
MySQL ODBC 5.2 ANSI Driver , 5.02.05.00, Oracle, MYODBC5A.DLL, 4/4/2013
MySQL ODBC 5.2 Unicode Driver , 5.02.05.00, Oracle, MYODBC5W.DLL, 4/4/2013
************************************************************************
create System DSN, named hp
using Unicode Driver
dsn=hp
descr=hp
tcpip server=192.168.1.11
user=root
password=xxxxx
Database=test
************************************************************************
ODBC Data Source Admin tool
far right tab called About
Admin, Control Panel, Cursor Library, Driver Mgr, Localized R DLL, Unicode Cursor Lib all Version 6.1.7601-ish
************************************************************************
MSFT Office Professional Plus 2010
Version 14.0.6129.5000 (64 bit)
VBA 7.0
Tools Menu / References / References - VBAProject, scroll down, click on:
Microsoft ActiveX Data Objects 6.1 Library
References Location= c:\program files\common files\system\ado\msado15.dll
************************************************************************
code same, get into an excel Macro:
Sub Macro1()
'
' Macro1 Macro
'
Dim oConn As ADODB.Connection
Dim rsPass As ADODB.Recordset
Dim sql As String
Set oConn = New ADODB.Connection
oConn.Open "hp"
Set rsPass = New ADODB.Recordset
sql = "select * from charlie1"
rsPass.Open sql, oConn
rsPass.Close
sql = "insert into charlie1 (billybob,birthdate,funny_num) values (5,now(),383.111)"
rsPass.Open sql, oConn
End Sub

Run Task Manager and look for EXCEL.EXE - most likely it has *32 after it (the issue is you are running a 32-bit version of excel, attempting to use the 64-bit version of MySQL Connector/ODBC).
To resolve:
Be sure to remove any defined ODBC data sources (DSNs) before
uninstalling the 64-bit driver (unable to remove if the driver is
already uninstalled)
Uninstall 64-bit MySQL Connector/ODBC driver
Download and install 32-bit version of MySQL Connector/ODBC driver
To setup DSN, see this http://forums.mysql.com/read.php?37,357786,360776#msg-360776
Note: You may be able to have both the 64-bit and 32-bit drivers installed and therefore not require uninstall of the 64-bit version. I did not need both so I haven't tested whether it is possible to have both installed.

I was recently fighting with this problem myself.
Taking advice from iOSdedude, I followed the link you originally posted, downloaded the 32-bit driver, and my ODBC connection started working again.
I am running Windows 7 on and my OS shows 64-bit under My Computer --> Properties --> System Info, so I was surprised to see that the 64-bit driver didn't work.
Not a good explanation as to why this works, but it worked for me.

Related

microsoft odbc driver manager data source name not found and no default driver specified

I am trying to run a Classic ASP application on Windows 8.1. It keeps on failing with error: data source name not found and no default driver specified
I am using an Access database. I have the same problem using a MySQL database. I tried with both 32 bit and 64 bit MySQL drivers -- first installing one then uninstalling and then installing the other.
driver={MySQL ODBC 5.3 Driver};option=3;server=localhost;user=root;password=;DATABASE=test;
I'm using these MySQL ODBC drivers:
mysql connector 5.3.4 - win32
mysql connector odbc 5.3.2 - winx64
Access can't be accessed through the MySQL drivers (they're for MySQL not Ms Access), what you need is the Microsoft OLEDB database connections.
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\myAccessFile.accdb;
Jet OLEDB:Database Password=MyDbPassword;
Source; https://www.connectionstrings.com/access/
Also for MySQL, if you're running a 32bit MySQL server on a 64bit machine the standard ODBC management tool won't work since it's the 64bit version by default.
You'd need to install in on the 32bit ODBC manager here c:\Windows\SysWOW64\odbcad32.exe
Once that's done you'd need the following connection string to work with a 32bit DB on a 64bit machine. Provider=MSDASQL;Driver={MySQL ODBC 5.2 ANSI Driver};Server=localhost;
Database=myDataBase;User=myUsername;Password=myPassword;Option=3;
Source; https://www.connectionstrings.com/mysql-connector-odbc-5-2/

pyodbc + MySQL + Windows: Data source name not found and no default driver specified

I am trying to connect to MySQL 5.6 on a Windows Server 2008 R2 localhost with pyodbc. I used the full installation for the MySQL instance on the localhost, including the ODBC connector. I have it connecting to a remote SQL Server instance beautifully, but for the life of me I can't get it to connect to the local MySQL instance. I am using this guide from connectionstrings.com as reference.
Here's some code:
import pyodbc
def create_mssql_conn():
return pyodbc.connect(r'Driver={SQL Server};Server=MSSQLSRV;Database=ecomm;Trusted_Connection=yes;')
def create_mysql_conn():
return pyodbc.connect(r'Provider=MSDASQL;Driver={MySQL ODBC 5.6 UNICODE Driver};Server=127.0.0.1;Database=ecomm;User=root;Password=myP#$$w0rd;Option=3;')
# conn = create_mssql_conn() # This one works
conn = create_mysql_conn() # This one breaks
cursor = conn.cursor()
cursor.execute('SELECT * FROM inventory')
while 1:
row = cursor.fetchone()
if not row:
break
print row
Here is the error:
pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')
I tried everything from adding Provider=MSDASQL; to changing ANSI to UNICODE in the connection string. Any suggestions?
I was having a similar issue. I am using windows 8, and mysql.
The way I solved the problem was by going into my
control panel>Systems and Security>Administrative Tools.>ODBC Data Sources
Either the 32 bit or 64 bit version depending on your computer.
Then you click on the System DNS file. If you do not see any MySQL driver you have to click ADD. It brings up a list, from that list select the MySQL driver.
For me it was MySQL ODBC 5.3 ANSI(they have a unicode driver also). Click finish. Once you do that then you have to change your connection line in your code to the corresponding Driver that you just filled out.
Ex:
def create_mysql_conn():
return pyodbc.connect(r'Driver={MySQL ODBC 5.3 ANSI Driver};Server=MSSQLSRV;Database=ecomm;Trusted_Connection=yes;')
This should work, or at least it solved my connection issue because I was getting all sorts of different errors with everything I tried. This was what solved the issue for me.
In Win64 there are two ODBC environments: 32 and 64 bit and you can work with Python 32 bit or Python 64 bit. Check what version of Python you use and then use proper version of odbcad32.exe (32 bit version is located in the SysWoW64 directory) to create SystemDSN. With SystemDSN you can check if you can connect to the database. Then try to connect to DB from Python code.
You can list ODBC datasources available to pyodbc via my code recipe: https://code.activestate.com/recipes/578815-printing-list-of-odbc-data-sources-with-pyodbc-mod/
Head to Administrative Tools and the ODBC Data Sources. You should click on the DNS file. Most likely you'd see Microsoft Access and excel as the only data sources available, so you need to add your SQL Server. Mine was SQL Server 2008 R2, and so far, it has worked.
For the error mentioned
"pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')"
I installed the 'Microsoft Access Database Engine 2010 Redistributable 64-bit' as I have 64-bit system and then added the DSN in the directory of MS Access database and it's working now.
Here is the link of the video for how to create DSN and connect to python.
https://www.youtube.com/watch?v=zw9P2wSnoIo

Which connection string for MySql ODBC connector 5.2.6?

it seems i can't make work a connection to MySql using ODBC connector 5.2.6.
In a 64 bit environment, in a VBA excel application, i use this string, but it not work:
"Driver={MySQL ODBC 5.2
Driver}; Server=myserver;Database=mydb;User=readonly;Password=mypass;Option=3"
I have also used
Driver={MySQL ODBC 5.2w Driver}
and
Driver={MySQL ODBC 5.2a Driver}
But the error is: ODBC driver unknow.
Can someone help me ?
Ps: it works with a DSN setted, but i would like to use a connection string so i don't go to each user computer and set a DSN.
Thanks
Quick Answer
Make sure you have installed the correct ODBC version (64-bit or 32-bit), matching the software.
Try the following:
Replace Driver={MySQL ODBC 5.2w Driver} with Driver={MySQL ODBC 5.2 Unicode Driver}
Replace Driver={MySQL ODBC 5.2a Driver} with Driver={MySQL ODBC 5.2 ANSI Driver}
Long Answer
The Driver={driver name} part of an ODBC connection string is the driver name that is listed in the Data Sources (ODBC) dialog.
Because you are running in a 64-bit environment, what you do next depends on whether you are running Excel (or whatever the software, web app etc.) as 32-bit or 64-bit, and therefore make sure you've installed the appropriate MySQL ODBC driver version. This is probably the most common problem people run into with ODBC drivers on 64-bit systems.
For those running web servers and trying to get 32-bit ODBC drivers to work in their 32-bit web app, make sure you enable 32-bit applications on the application pool. Here is a forum post describing how to do this: http://forums.iis.net/post/2023543.aspx
64-bit
If the software is 64-bit then open the Run dialog box, and run %windir%\System32\odbcad32.exe.
Click the Drivers tab, and find the MySQL ODBC driver listed, remember the name in the Name column, and use that in the connection string.
For 5.2.6 this will most likely be: MySQL ODBC 5.2 Unicode Driver
Where the driver name you tried before was 5.2w use the Unicode driver, where it was 5.2a use the ANSI driver.
32-bit
If the software is 32-bit then in the Run dialog box run %windir%\SysWOW64\odbcad32.exe to open the 32-bit Data Sources dialog, and then do the same as above.
On 64-bit machines using the 32-bit driver, it is recommended to start the connection string with Provider=MSDASQL;
I had a similar problem with Access 2010/2013 and windows 7. I assumed that I needed the 64 bit driver for a 64 bit environment and could not make a connection whatever I did. I finally downloaded and installed the 32bit version and am now able to connect to MySQL database on a remote server. As Excel is an also Office product I expect the problem/solution is the same.

mySQL ODBC 5.1 issue: Data source name not found and no default driver specified

I have searched this for several days now (including trying the solution from one link from this site) and I still cannot get this to work...
Problem: I converted an old Visual Studio 2005 project to 2010 on a Windows 7, 64 bit box. Everything works fine, including my ODBC connection to an Oracle database...however, I cannot connect to a mySQL database like I could with VS 2005 on a WinXP 32 bit box.
What I've tried: Uninstalling the 64 bit ODBC driver for MySQL with a 32 bit driver. I added this to my System DSN and the test connection works fine (from odbcad32.exe). All other instances of this driver are removed from the User DSN from both odbcad32 and the 64 bit odbc client. I cannot continue my project without accessing this database. I have tried everything from every website thread, and I still cannot find a solution.
I get this error:
The thread '' (0x1648) has exited with code 0 (0x0).
A first chance exception of type 'System.Data.Odbc.OdbcException' occurred in System.Data.dll
An ODBC exception occurred: ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
A first chance exception of type 'System.NullReferenceException' occurred in App_Web_uoi23wal.dll
This is the connection string I am using:
mySqlConnectionString = "Driver={MySQL ODBC 5.1 Driver};Server=xx.xxx.xx.xx;Port=3306;Database=xxxx;User=xxxx;Password=xxxx;";
Can anyone please help me with this? I am at my wit's end! ;)
Thanks!
Couldn't find anyone else who has solved this, but I tried this and both worked for me. Original post is old but if anyone else reads this, possible solution for you.
"Driver={MySQL ODBC 5.2 ANSI Driver}; Server=localhost; Database=***; User=****; Password=****; Option=3;"
"Driver={MySQL ODBC 5.2 Unicode Driver}; Server=localhost; Database=***; User=****; Password=****; Option=3;"
Seems like you must actually specify the 'ANSI' or 'UNICODE' string instead of the 'w' or 'a' as has been suggested on other forums and threads. I presume its no coincidence that it is specified exactly like that in the ODBC Data Source Administrator menu (Control Panel -> System -> Administrative Tools -> Data Sources (ODBC) -> Drivers)
This worked for me on MySQL 5.1
Data Sources (ODBC):
- User DSN : delete the specified User DSN
- System DSN : create a new System DSN
Make sure you have only System DNS not both..

MySql ODBC Windows XP to Windows 7

I am trying to port a large application from Windows XP to Windows 7. This application MUST work on both platforms side by side as I have 22 client machines and they are all currently Windows XP but will one by one over time be converted to Windows 7.
I have a MySql database that works fine in XP and has been for a few years. On my first Windows 7 machine, it fails when I run the line of code to open a connection to the db:
MyOdbcConnection.Open()
The error is "ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified".
To try to fix it, I downloaded the latest ODBC 5.2 drivers from MySql. I downloaded BOTH the 32bit and 64bit ones. I went into the ODBC Data Source Administrator for BOTH the 32bit and 64bit and added my datasource successfully for this db for a User DSN, System DSN, and File DSN. I can also successfully connect to the db from the MySql workbench.
This is my connection string. It's the same as the other working machine except that one is using the 5.1 driver.
Dim MySqlConString As String = "DRIVER={MySQL ODBC 5.2 Driver};" & _ "SERVER=myserver;" & _ "DATABASE=mydb;" & _ "UID=root;" & _ "PASSWORD=mypw;" & _ "OPTION=3" – Jason Shoulders 3 hours ago
Despite being able to add the data source and connect to the db via workbench, I continue to get an error when I run my exe. Any suggestions?
Apparently I needed to have:
DRIVER={MySQL ODBC 5.2w Driver}
Seems lame. I'm not sure where the "w" came from.
There is little point in adding a user, system and file DSN as your code is not using any of them. You are using what is usually referred to as a "DSN-less" connection. If you were using any of your created DSNs your connection string would be "DSN=my_created_dsn" or FILEDSN=path_to_file. As you are using "DRIVER={xxx}" all you are doing is telling the ODBC driver manager which driver to load and the other attributes in the connection string tell the driver what mysql db to connect to. The name you use for xxx needs to be exactly the name of the driver as shown in the odbc drivers tab. If you are going to continue connecting like this you can delete all your DSNs.
Your 32bit program will not find a 64bit odbc driver. Try setting up the 32bit driver with the following in a command window
%WINDIR%\syswow64\odbcad32.exe
I'm using Visual Fox Pro 9.0 under Windows XP Pro SP3 with 32 bit
I had the same problem but id did NOT work with:
Driver={MySQL ODBC 5.2a Driver} or with Driver={MySQL ODBC 5.2w Driver}
IT WORKED!!! with:
Driver={MySQL ODBC 5.2 ANSI Driver} or with Driver={MySQL ODBC 5.2 UNICODE Driver}
Try it.