QSqlDatabase: QMYSQL driver not loadedQSqlDatabase: available drivers: QIBASE QSQLITE QODBC3 QODBCCannot open database: QSqlError(-1, "Driver not loaded", "Driver not loaded")
This is a small HOWTO, explaining on how to convert the MySQL librariesto something which is usable with MinGW.1) Go to the MySQL lib directory: # cd <path_where_mysql_is_installed>\lib\opt2) Produce a DEF file: # pexports libmysql.dll | sed "s/^_//" > libmysql.def *NOTE: pexports and sed come with MinGW utilities and msys.3) Create the MinGW import library: # dlltool -U -d libmysql.def -l libmysql.lib.aAt this moment, a MinGW compatible library libmysql.lib.a is created.But, the headers are still written this way they are using the M$calling convention. We need to change this.4) Open the header <path_where_mysql_is_installed>\include\mysql.h and change the following around line 44: Change: #define STDCALL __stdcall into: #undef STDCALL #define STDCALL*NOTE: The following is more a hack instead of a solution. Maybe you can come up with a cleaner patch. Use some extra #ifdef's or something ...Now, we will build the Qt MySQL plugin using MinGW.5) Go to the Qt MySQL plugin source directory: # cd <path_where_qt_is_installed>\src\plugins\sqldrivers\mysql6) Launch qmake to generate the Makefile # qmake -o Makefile "INCLUDEPATH+=<path_where_mysql_is_installed>\include" "LIBS+=-L<path_where_mysql_is_installed>\lib\opt" mysql.pro7) Build the plugin # make
1) Переходим в каталог с библиотеками MySQL: # cd <путь_к_установленному_mysql>\lib\opt 2) Создадим файл DEF: # reimp -d libmysql.lib *Прим: reimp идет вместе с утилитами MinGW и msys. 3) Создаем библиотеку импорта MinGW: # dlltool -k --input-def libmysql.def --dllname libmysql.dll --output-lib libmysql.aВ этот момент создается MinGW-совместимая библиотека libmysql.a4) Переходим в каталог с исходными файлами плагина Qt MySQL: # cd <каталог_инсталляции_qt>\src\plugins\sqldrivers\mysql 5) Запускаем qmake для генерирования Makefile # qmake -o Makefile "INCLUDEPATH+=<каталог_инсталляции_mysql>\include" "LIBS+=-L<каталог_инсталляции_mysql>\lib\opt -lmysql" mysql.pro6) Собираем плагин # make 7) Убеждаемся, что libmysql.dll доступен через path. В случае отсутствия libmysql.dll приложение не сможет загрузить плагин и выдаст сообщение что нужного плагина нет. При этом в кэш плагинов - в моём случае - [HKEY_CURRENT_USER\Software\Trolltech\OrganizationDefaults\Qt Plugin Cache 4.2.false] будет записана неверная информация.8) Если произошла такая неприятность, чистим кэш плагинов - это можно сделать удалив из реестра ветку [HKEY_CURRENT_USER\Software\Trolltech\OrganizationDefaults]
mingw32-make -f Makefile.Debug allmingw32-make[1]: Entering directory `C:/Qt/4.3.0/src/plugins/sqldrivers/mysql'mingw32-make[1]: Nothing to be done for `all'.mingw32-make[1]: Leaving directory `C:/Qt/4.3.0/src/plugins/sqldrivers/mysql'mingw32-make -f Makefile.Release allmingw32-make[1]: Entering directory `C:/Qt/4.3.0/src/plugins/sqldrivers/mysql'mingw32-make[1]: Nothing to be done for `all'.mingw32-make[1]: Leaving directory `C:/Qt/4.3.0/src/plugins/sqldrivers/mysql'
QSqlError(0, "QMYSQL: Unable to open database 'diabetes'", "")
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");db.setDatabaseName("diabetes");db.setUserName("cooler"); db.setHostName("195.122.253.11");
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
m_DB.setDatabaseName( "D:\\Projects\\TravelBase\\TEST.FDB" );m_DB.setHostName("192.168.1.101");m_DB.setUserName("SYSDBA");m_DB.setPassword("masterkey");