Description:
It's difficult to use the Migration Tool to migrate from an Access database with a password. When I try, whether I leave the Username field blank, or enter "Admin" or anything else, I always get this error at the Reverse Engineering stage:
Initializing JDBC driver ...
Driver class MS Access
Opening connection ...
Connection jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=d:\doc\chris\Camfed\Trunk\CAMFED Data 3 Ghana 220208.mdb;DriverID=22;READONLY=true;UID=;PWD=MYPASSWORD}
The schema could not be reverse engineered (error: 0).
ReverseEngineeringAccess.reverseEngineer :[Microsoft][ODBC Microsoft Access Driver] Not a valid password.
Details:
sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(Unknown Source)
sun.jdbc.odbc.JdbcOdbcConnection.initialize(Unknown Source)
sun.jdbc.odbc.JdbcOdbcDriver.connect(Unknown Source)
java.sql.DriverManager.getConnection(Unknown Source)
java.sql.DriverManager.getConnection(Unknown Source)
com.mysql.grt.modules.ReverseEngineeringGeneric.establishConnection(ReverseEngineeringGeneric.java:141)
com.mysql.grt.modules.ReverseEngineeringAccess.reverseEngineer(ReverseEngineeringAccess.java:92)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
com.mysql.grt.Grt.callModuleFunction(Unknown Source)
A workaround is to enter a full JDBC URL with the password as the source, for example:
jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ=D://doc//chris//camfed//trunk//CAMFED Data 3 Ghana 220208.mdb;PWD=MYPASSWORD;
However it is inconvenient for users to write a JDBC URL by hand.
How to repeat:
Create an Access database with a password.
Try to migrate it to MySQL with the Migration Tool.
Suggested fix:
Fix the JDBC URL so that the UID parameter is left out for Access databases. Access only has passwords on databases, not user names.