Russian Qt Forum

Qt => Базы данных => Тема начата: Alexey1st от Март 09, 2009, 23:49



Название: mysql driver not loaded
Отправлено: Alexey1st от Март 09, 2009, 23:49
Только начал разбираться с QT. Почему-то в демке все работает. Указываю драйвер QMYSQL, хост, имя, пароль и т.д. Все запускается.

Когда же создаю свой пример:
Код
C++ (Qt)
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    db.setDatabaseName("test");
    db.setUserName("root");
    db.setPassword("12345");
    bool ok = db.open();
 

пишет "driver not loaded".

В списке драйверов только QSQLITE


Название: Re: mysql driver not loaded
Отправлено: ритт от Март 09, 2009, 23:52
пользуй поиск по форуму. название треда замечательно подойдёт в качестве ключевой фразы для запроса...


Название: Re: mysql driver not loaded
Отправлено: 4ybaka от Март 25, 2009, 19:44
ОТВЕТ::::::::::

Для работы с базами данных в QT используется одни и теже классы для всех баз данных.
Уловка в том, что для того чтобы QT узнала с какой же библиотекой она работает, необходимо загрузить так называемый "драйвер базы даных".
Для этих целей служит эта строка:
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
Где "QMYSQL" - это имя собственное драйвера базы данных "MySQL".
-----------------
Дело в том что данный драйвер не поставляется почти во всех версиях и сборках библиотеки QT.
Для того, чтобы все-таки использовать его в своих программах, необходимо его собрать самому используя при этом пару фалов заготовленных QT-шниками как раз для сборки этого драйвера.
-----------------
Для этого необходимо: [пример для WinXp. Для остального делается аналогично!]
1) Библиотека QT [со всеми потрохами, mingw например]
2) MinGW утилиты [их нет в стандартной поставке mingw входящего в  QT]
3) Терпение

Вот копия статьи из "ru.wikibooks.org" с поими комментариями:
======================
Последние версии MySQL официально не поддерживают сборку под MinGW и соответственно нужной вам библиотеки, в соответствующем формате в поставке нет. Придется сделать ее самому. Примерно так:

1) Переходим в каталог с библиотеками MySQL:

  # cd <путь_к_установленному_mysql>\lib\opt

2) Создадим файл DEF:

  # reimp -d libmysql.lib
  *Прим: reimp идет вместе с утилитами MinGW и msys.
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
4ybaka word::::::::
Я скачал утилиты с "opensource.org" и просто вытянул оттуда "reimp.exe"
и поместил его в папку с "mingw32-make.exe".
Также необходимо ЛИБО полностью прописывать адрес ехе-шника "reimp.exe"
при его запуске, если папка фала mingw32-make.exe (т.е. например "J:\Qt\2009.01\mingw\bin\")
(но при этом херово работат, если например запускается цепочка
файлов, которые запускают друг друга по имени, а не полному адресу,
так как думают, что адреса к ним прописаны в переменной среды. В таком случае
нифига не работает!], ЛИБО прописать папку ехе-шников mingw в переменную среды

]]]]]]]]]]]]]]]]]]]]]]]]]]]]

3) Создаем библиотеку импорта MinGW:

  # dlltool -k --input-def libmysql.def --dllname libmysql.dll --output-lib libmysql.a
В этот момент создается MinGW-совместимая библиотека libmysql.a


4) Переходим в каталог с исходными файлами плагина Qt MySQL:

  # cd <каталог_инсталляции_qt>\src\plugins\sqldrivers\mysql

5) Запускаем qmake для генерирования Makefile

  # qmake -o Makefile "INCLUDEPATH+=<каталог_инсталляции_mysql>\include" "LIBS+=-L<каталог_инсталляции_mysql>\lib\opt -lmysql" mysql.pro
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
4ybaka word::::::::
Я тут помоему писал точное название библиотеки, которую получил в 3)-м пункте, и без параметра "-L"
("C:\Mysql" -- Это каталог инсталяции Mysql. Я просто запихнул туда mysql установившийся в папку по умолчанию)
# qmake -o Makefile "INCLUDEPATH+=C:\Mysql\include" "LIBS+=C:\Mysql\lib\opt\libmysql.a" mysql.pro

]]]]]]]]]]]]]]]]]]]]]]]]]]]]
6) Собираем плагин

  # 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]
PS: Это было опробовано для MySQL 4.1 (4.1.12a) и OpenSource Win32 Qt4.
[[[[[[[[[[[[[[
4ybaka word:::::::::::
Скомпилинное приложение, использующее QMYSQL драйвер для работы с базой данных MySQL,
будет требовать для запуска библиотеку "libmysql.dll", которая устанавливается в папку "<каталог установки mysql>\lib\opt\",
при установке mysql (под винду).
Для того чтобы "дать" приложению эту библиотеку, необходимо чтоб адрес к ней был прописан в переменной среды ("path" для винды).
Также можно положить ее в папку с запускаемым файлом приложения.

]]]]]]]]]]]]]]

===================================
Ссылка на эту статью:
http://ru.wikibooks.org/wiki/Qt4_ЧАВО (http://ru.wikibooks.org/wiki/Qt4_ЧАВО)
А здесь оригинал на английском:
http://www.qtforum.org/thread.php?postid=52360#post52360 (http://www.qtforum.org/thread.php?postid=52360#post52360)



Название: Re: mysql driver not loaded
Отправлено: spirit от Март 25, 2009, 19:56
ссылка (http://www.qtforum.org/thread.php?postid=52360#post52360) битая.


Название: Re: mysql driver not loaded
Отправлено: Magvaj от Март 26, 2009, 12:57
без ссылки на форум- здесь указана информация по сборке довольно развёрнуто. По ней всё собрал без проблем.

Предлагаю облагородить описание и поместить в FAQ.


Название: Re: mysql driver not loaded
Отправлено: pastor от Март 26, 2009, 13:07
Есть вики, облагораживай, выкладывай. Если что - подправлю.


Название: Re: mysql driver not loaded
Отправлено: Magvaj от Март 26, 2009, 14:38
Есть вики, облагораживай, выкладывай. Если что - подправлю.

хорошо... сдам проект займусь... заодно парочку своих наработок выложу ;-)


Название: Re: mysql driver not loaded
Отправлено: pastor от Март 26, 2009, 15:05
хорошо... сдам проект займусь... заодно парочку своих наработок выложу ;-)

отлично! Все будут признательны :)


Название: Re: mysql driver not loaded
Отправлено: ONIKSfly от Апрель 06, 2009, 10:29
Цитировать
6) Собираем плагин

  # make

На этом шаге, если просто так выполнить мэйк, то строка вернет:
Код:
MAKE Version 5.2  Copyright (c) 1987, 2000 Borland
Fatal: 'FORCE' does not exist - don't know how to make it

Если выполнить команду, указав путь mingw32-make.exe, например:
Цитировать
# F:\mingw\bin\mingw32-make.exe

То возвращает такую штуку:
Код:
F:/mingw/bin/mingw32-make -f Makefile.Debug all
mingw32-make[1]: Entering directory `C:/Qt/2009.01/qt/src/plugins/sqldrivers/mys
ql'
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -
DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_DLL -DQT_PLUGIN -DQT_SQL_LIB -
DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"..\..\..\..\include\QtCore" -I"..\..\..\..\i
nclude\QtSql" -I"..\..\..\..\include" -I"f:\MySQL\include" -I"..\..\..\..\includ
e\ActiveQt" -I"tmp\moc\debug_shared" -I"." -I"..\..\..\..\mkspecs\win32-g++" -o
tmp\obj\debug_shared\main.o main.cpp
"g++" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
mingw32-make[1]: *** [tmp/obj/debug_shared/main.o] Error 1
mingw32-make[1]: Leaving directory `C:/Qt/2009.01/qt/src/plugins/sqldrivers/mysq
l'
mingw32-make: *** [debug-all] Error 2

Не посоветуете новичку чего?


Название: Re: mysql driver not loaded
Отправлено: alex12 от Апрель 06, 2009, 16:28
Я абсолютно замучился со сборкой плагинов под разные платформы с разными ОС. Поэтому сделал просто: поместил код плагина к себе в проект (проект под лицнзинй GPL) :)

В main.cpp
Код:
Q_IMPORT_PLUGIN( qsqlmysql )


В .pro
Код:
win32{
  LIBS += -lmysql
}
unix{
  INCLUDEPATH += /usr/include/mysql
  LIBS        += -lmysqlclient
}

HEADERS += mysql_plugin.h
SOURCES += mysql_plugin.cpp

В прикрепленном к посту файле - исходники адаптированного плагина.

Работает железно. Никаких проблем с подключением к БД!


Название: Re: mysql driver not loaded
Отправлено: ONIKSfly от Апрель 06, 2009, 18:48
В прикрепленном к посту файле - исходники адаптированного плагина.

Работает железно. Никаких проблем с подключением к БД!
А если несложно, можно новичку поподробнее?
Вот файл main.cpp:
Код:
#include <QtGui>
#include <qsqldatabase.h>
Q_IMPORT_PLUGIN(qsqlmysql);
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QSqlDatabase *db = new QSqlDatabase::addDatabase("QMQSQL");
    db->setHostName("localhost");
    db->setDatabaseName("minilib");
    db->setUserName("root");
    db->setPassword("");
    if(!db->open()) return false;
    return a.exec();
}

А вот файл проекта:
Код:
QT += sql
TARGET = minilib
TEMPLATE = app
SOURCES += main.cpp \
    dialog.cpp \
    function.cpp \
    mysql_plugin.cpp
HEADERS += dialog.h \
    mysql_plugin.h
FORMS += dialog.ui
LIBS += -lmysql

При попытки компиляции выдает ошибку
Цитировать
main.cpp:7: error: `class QSqlDatabase::addDatabase' is not a type

В чем я накосячил?


Название: Re: mysql driver not loaded
Отправлено: alex12 от Апрель 06, 2009, 19:22
может нету:
Код:
#include <QtSql>


Название: Re: mysql driver not loaded
Отправлено: ONIKSfly от Апрель 06, 2009, 20:06
Все равно, ошибка остается. сами файлики положил в директорию проекта. Использую для компилирования Qt Creator V1.0.0 (NOKIA)


Название: Re: mysql driver not loaded
Отправлено: alex12 от Апрель 06, 2009, 20:53
Попробуй так:

Код:
#include <QtGui>
#include <qsqldatabase.h>
Q_IMPORT_PLUGIN(qsqlmysql);
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QSqlDatabase db = QSqlDatabase::addDatabase("QMQSQL");
    db.setHostName("localhost");
    db.setDatabaseName("minilib");
    db.setUserName("root");
    db.setPassword("");
    if(!db.open()) return false;
    return a.exec();
}


Название: Re: mysql driver not loaded
Отправлено: ONIKSfly от Апрель 07, 2009, 18:34
Там только наверно
Код
C++ (Qt)
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
Теперь вот как происходит.
Если выполнять вот такую программу (без указателя), то вылазит туча ошибок(171 и 82 предупреждения), как понимаю все это вызвано вот этим:
Код:
mysql_plugin.h:61: mysql.h: No such file or directory
А остальные ошибки скрином, а то правда очень много:
(http://img2.pict.com/b6/d5/32/8e1f0190bdf1aa189b2b339926/WcASg/300/screen1.jpg) (http://img2.pict.com/b6/d5/32/8e1f0190bdf1aa189b2b339926/WcASg/screen1.jpg)
А если использовать указатель, т.е.:
Код
C++ (Qt)
#include <QtGui>
#include <qsqldatabase.h>
Q_IMPORT_PLUGIN(qsqlmysql);
int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
   QSqlDatabase *db = QSqlDatabase::addDatabase("QMYSQL");
   db.setHostName("localhost");
   db.setDatabaseName("minilib");
   db.setUserName("root");
   db.setPassword("");
   if(!db.open()) return false;
   return a.exec();
}
Ошибок будет меньше:
(http://img2.pict.com/dc/1b/1c/11a64b9fef3abf25ac3cf0cac6/O1L4Q/300/screen2.jpg) (http://img2.pict.com/dc/1b/1c/11a64b9fef3abf25ac3cf0cac6/O1L4Q/screen2.jpg)


Название: Re: mysql driver not loaded
Отправлено: alex12 от Апрель 07, 2009, 21:27
Эти два скриншота - две совершенно независимые проблемы.

Немного теории

Сборка любого проекта на языке C++ происходит в два этапа:
 - компиляция cpp файлов в объектные файлы (расширение .o)
 - сборка из объектных файлов исполняемого файла.

Первый пункт делается последовательно и независимо для каждого cpp файла. Количество ворнингов и ошибок зависит от конкретного файла, при компиляции которого они возникают.

QtCreator, судя по скриншотам, не показывает сам ход процесса сборки. Поэтому не видно, при компиляции какого cpp-файла возникли ошибки. Вот, как я вижу, что происходит на самом деле:

Последовательность сборки файлов: main.cpp, mysql_plugin.cpp

Верхний скриншот: main.cpp собрался без ошибок и система приступила к сборке mysql_plugin.cpp. При его компиляции не был найден заголовочный файл mysql.h. Это спровоцировало кучу ошибок.

Нижний скриншот: Уже на этапе компиляции main.cpp возникли ошибки. До mysql_plugin.cpp дело даже не дошло.

Вывод: Правильный верхний вариант. Нужно только починить отсутствие mysql.h

Как вылечить mysql.h

Я для себя решил это самым простым способом (использую компилятор MinGW). Я скопировал заголовочные файлы от MySQL в каталог include компилятора MinGW, а библиотеки в каталог lib компилятора MinGW. Архивчик с заголовочными файлами и библиотеками MySQL брать здесь: http://transmeta.inkommet.ru/pub/mysql.zip (http://transmeta.inkommet.ru/pub/mysql.zip).

Общие рекомендации

Имеет смысл смотреть только на первую ошибку. Остальные, обычно, следствие первой. Общее количество ворнингов и ошибок не информативно вообще.

Я очень рекомендую сначала попробовать разобраться с механикой сборки проекта. Работать не со студией, а из командной строки. Поставить FAR и попробовать руками собрать проект. Руками установить пути к компилятору и Qt.  Затем набрать сначала qmake, а потом make. Можно одновременно работать и со студией и FAR'ом.

Еще стоит посмотреть файл из Qt примеров, как они делают подключение к БД. Файл QTDIR/examples/sql/connection.h. Там написано так:
Код:
   ...
 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(":memory:");
    if (!db.open()) {
   ...


Название: Re: mysql driver not loaded
Отправлено: kobra от Сентябрь 28, 2010, 01:11
5) Запускаем qmake для генерирования Makefile

  # qmake -o Makefile "INCLUDEPATH+=<каталог_инсталляции_mysql>\include" "LIBS+=-L<каталог_инсталляции_mysql>\lib\opt -lmysql" mysql.pro
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
4ybaka word::::::::
Я тут помоему писал точное название библиотеки, которую получил в 3)-м пункте, и без параметра "-L"
("C:\Mysql" -- Это каталог инсталяции Mysql. Я просто запихнул туда mysql установившийся в папку по умолчанию)
# qmake -o Makefile "INCLUDEPATH+=C:\Mysql\include" "LIBS+=C:\Mysql\lib\opt\libmysql.a" mysql.pro

]]]]]]]]]]]]]]]]]]]]]]]]]]]]
6) Собираем плагин

  # 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]
PS: Это было опробовано для MySQL 4.1 (4.1.12a) и OpenSource Win32 Qt4.
[[[[[[[[[[[[[[
4ybaka word:::::::::::
Скомпилинное приложение, использующее QMYSQL драйвер для работы с базой данных MySQL,
будет требовать для запуска библиотеку "libmysql.dll", которая устанавливается в папку "<каталог установки mysql>\lib\opt\",
при установке mysql (под винду).
Для того чтобы "дать" приложению эту библиотеку, необходимо чтоб адрес к ней был прописан в переменной среды ("path" для винды).
Также можно положить ее в папку с запускаемым файлом приложения.

]]]]]]]]]]]]]]
Все сделал как написали но после 6 пункта возникает проблема. Нигде на компютере нет libmysql.dll. Есть qsqlmysql4.dll в папке qt/plugins/sqldrivers но больше ничего. В path ничего не прописалось и программа не работает(нету драйвера). Где может бить ошибка?


Название: Re: mysql driver not loaded
Отправлено: NicK от Сентябрь 28, 2010, 09:45
Для компиляции драйвера MySQL в Qt4 под Windows все, что нужно вам сделать, это:
скачав исходники mySQL, выполнить следующие команды:

Код
C++ (Qt)
cd C:\MySQL\include

Код
C++ (Qt)
dlltool –input-def libmysql.def –dllname libmysql.dll –output-lib libmysql.a -k

Код
C++ (Qt)
cd C:\Qt\2009.04\qt\src\plugins\sqldrivers\mysql

Код
C++ (Qt)
qmake -o Makefile «INCLUDEPATH+=C:\MySQL\include» «LIBS+=C:\MySQL\lib\opt\libmysql.lib» mysql.pro

Код
C++ (Qt)
mingw32-make

Все.


Название: Re: mysql driver not loaded
Отправлено: Lostinnet от Сентябрь 30, 2010, 11:34
Прошу прощения, у меня проблемка немножко другая, но решил написать сюда.

На компьютере где разрабатываю программу все замечательно работает и файл с драйвером qsqlite4.dll з амечательно находится и грузится.
При запуске на другой машине ничего не работает, драйвер не находится.
в программе добавлены пути к драйверу 
 QCoreApplication::addLibraryPath ( QCoreApplication::applicationDirPath() ); 
файл даже вроде находится, но не загружается...
В чем может быть проблема?


Название: Re: mysql driver not loaded
Отправлено: Пантер от Сентябрь 30, 2010, 15:33
Lostinnet, иди в поиск по фразе driver not loaded. Данный вопрос поднимается по несколько раз в месяц.


Название: Re: mysql driver not loaded
Отправлено: Astrologer от Сентябрь 30, 2010, 17:05
Alex12  - ссылка битая! Перезалейте пожалуйста.


Название: Re: mysql driver not loaded
Отправлено: kobra от Октябрь 07, 2010, 20:22
Для компиляции драйвера MySQL в Qt4 под Windows все, что нужно вам сделать, это:
скачав исходники mySQL, выполнить следующие команды:

Код
C++ (Qt)
cd C:\MySQL\include

Код
C++ (Qt)
dlltool –input-def libmysql.def –dllname libmysql.dll –output-lib libmysql.a -k

Код
C++ (Qt)
cd C:\Qt\2009.04\qt\src\plugins\sqldrivers\mysql

Код
C++ (Qt)
qmake -o Makefile «INCLUDEPATH+=C:\MySQL\include» «LIBS+=C:\MySQL\lib\opt\libmysql.lib» mysql.pro

Код
C++ (Qt)
mingw32-make

Все.

итак переустановил Qt, MinGW, MySQL. Прописал в Path пути C:\MinGW\bin;C:\Qt\2010.05\qt\bin;c:\MySQL\bin
Сделал все как написали(прикрепил файл из командной строки). Перезапустил комп на всякий случай. В папке c:\qt\2010.05\qt\plugins\sqldrivers появились:
qsqlmysql4.dll
qsqlmysqld4.dll
Запускаю Qt Creator проект где у меня используеться подключения к базе.
В итоге получаю очень странное сообщения:
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL3 QMYSQL QODBC3 QODBC

Кажеться 2 строчки несовместніе.

Но что странное exe программа работает нормально(тойсть подключаеться к базе) правда только на моем компе.

Так вот что я не так сделал?


Название: Re: mysql driver not loaded
Отправлено: kobra от Октябрь 08, 2010, 23:16
снова все переустановил но использовал уже тот MinGW что входит в Qt. Повторил все шаги, закинул libMySQL.dll в qt/bin и тогда в qt Creator все заработало.

Чтоб заставить приложения работать на других компах использовал пост: http://www.prog.org.ru/index.php?topic=11804.msg76357#msg76357
и закинул в корень с приложениям libMySQL.dll.


Название: Re: mysql driver not loaded
Отправлено: Ojigrande от Февраль 11, 2011, 12:35
У меня следующая проблема:
Когда вызываю mingw32-make он мне ругается следующим
../../../sql/drivers/mysql/qsql_mysql.cpp:596: error: 'class QString' has no member named 'toInt'
../../../sql/drivers/mysql/qsql_mysql.cpp:604: error: 'class QString' has no member named 'toInt'


Название: Re: mysql driver not loaded
Отправлено: DenisKh001 от Февраль 18, 2011, 06:26
Эти два скриншота - две совершенно независимые проблемы.

Немного теории

Сборка любого проекта на языке C++ происходит в два этапа:
 - компиляция cpp файлов в объектные файлы (расширение .o)
 - сборка из объектных файлов исполняемого файла...

Пробую пойти по этому пути, но жалуется на отсутствие mysql_version.h, mysql_com.h, mysql_time.h, my_list.h и кучи других файлов. Где их взять?



Название: Re: mysql driver not loaded
Отправлено: Пантер от Февраль 18, 2011, 08:27
Скачать.


Название: Re: mysql driver not loaded
Отправлено: DenisKh001 от Февраль 19, 2011, 19:46
Проблему решил только в winXP. Следуй вот этой инструкции http://www.pikopong.com/blog/2010/04/11/how-to-enable-mysql-support-in-qt-sdk-for-windows/. В win7 пока не получается, возможно проблема из-за того, что установил mySQL 64х, чего точно не стоило делать, а корректно удалить не получается.


Название: Re: mysql driver not loaded
Отправлено: Karl-Philipp от Февраль 19, 2011, 22:16
Проблему решил только в winXP. Следуй вот этой инструкции http://www.pikopong.com/blog/2010/04/11/how-to-enable-mysql-support-in-qt-sdk-for-windows/. В win7 пока не получается, возможно проблема из-за того, что установил mySQL 64х, чего точно не стоило делать, а корректно удалить не получается.
На счет удаления корректного:

После удаления MySQL из программ, нужно удалить его в реестре.
1. Убедись, что Mysql не запущен как сервис.
2. с помощью regedit заходи в LOCAL MACHINE -> SOFTWARE и гроохни там все, что касается MySQL + удали все ветки, где упоминается MySQL в CURRENT USER.
Мне помогало, правда не уверен, что такое удаление корректно :)


Название: Re: mysql driver not loaded
Отправлено: iks от Май 16, 2011, 20:39
Делал по выше описаному, но у меня выдает ошибку вот тут
Код:
C:\Qt\Desktop\Qt\4.7.3\mingw\plugins\sqldrivers\mysql>mingw32-make
mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory `C:/Qt/Desktop/Qt/4.7.3/mingw/plugins/sqldri
vers/mysql'
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-rel
oc -mthreads -Wl -Wl,-subsystem,windows -o debug\mysql.exe   -L"c:\Qt\Desktop\Qt
\4.7.3\mingw\lib" -lmingw32 -lqtmaind C:\MySQL\lib\opt\libmysql.lib -lQtGuid4 -l
QtCored4 -LC:\OpenSSL-Win32_full\lib
c:\Qt\Desktop\Qt\4.7.3\mingw\lib/libqtmaind.a(qtmain_win.o): In function `WinMai
n@16':
c:/ndk_buildrepos/qt-desktop/src/winmain/qtmain_win.cpp:131: undefined reference
 to `qMain(int, char**)'
collect2: ld returned 1 exit status
mingw32-make[1]: *** [debug\mysql.exe] Error 1
mingw32-make[1]: Leaving directory `C:/Qt/Desktop/Qt/4.7.3/mingw/plugins/sqldriv
ers/mysql'
mingw32-make: *** [debug] Error 2

C:\Qt\Desktop\Qt\4.7.3\mingw\plugins\sqldrivers\mysql>
Подскажите как решить
---------------------------
Просто решил собрать программу на Win до этого на Linux вообще проблем ни каких не чувствовал  =)


Название: Re: mysql driver not loaded
Отправлено: iks от Май 16, 2011, 22:40
Вот что значит просидеть на Linux более года, уже отвык что после каждого чиха систему надо перезагружать чтоб применить новые параметры =)))
Сейчас вроде идет сборка посмотрю как соберется. далее отпишусь.
Кстати вот (http://qt.shamangrad.net/doku.php?id=%D0%B4%D1%80%D0%B0%D0%B9%D0%B2%D0%B5%D1%80%D1%8B_%D0%B1%D0%B0%D0%B7_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_sql) статейка неплохая по этой теме
---------------------------------
Нет так-же ошибка похоже придется пересобрать сам Qt


Название: Re: mysql driver not loaded
Отправлено: aviabunin от Август 01, 2011, 11:02
Похожая ошибка - dump во вложении.
Может кто подскажет в чем дело?
Спасибо!


Название: Re: mysql driver not loaded
Отправлено: Пантер от Август 01, 2011, 11:06
Компилятор не находит.


Название: Re: mysql driver not loaded
Отправлено: LisandreL от Август 01, 2011, 11:22
1) Слэши в параметрах в другую сторону.
2) Запускайте не просто из командной строки, а из «Qt 4.7.3 for Desktop (MinGW)» (Пуск/Все программы/Qt SDK/Desktop/Qt 4.7.3 for Desktop (MinGW)) - там уже пути прописаны.


Название: Re: mysql driver not loaded
Отправлено: iks от Август 01, 2011, 11:37
Недавно переустановился на винде, так поступил проще, скачал Qt SDK (http://qt.nokia.com/downloads/), а так-же mysql....msi (http://www.mysql.ru/download/) нормально без танцев поставил их, подкинул драйвер C:\Qt\bin\sqldrivers\libmysql.dll и все нормально работаю.
Может поможет.


Название: Re: mysql driver not loaded
Отправлено: aviabunin от Август 02, 2011, 08:04
Пробовал вчера в Qt SDK  пересобрать пакет для драйвера, но так и не справился с ошибками - см во вложении. Главная проблема в пути к libmysql.lib не воспринимает пробелы - слэши менял, но не помогло ессно пока с пробелами не ясно


Название: Re: mysql driver not loaded
Отправлено: iks от Август 02, 2011, 08:56
Давно говорится что ставить желательно пути без пробелов, или попробуйте путь взять в "C:\Program Files\..." может помочь. Но помойму проще будет MySQL переставить C:\MySQL, или без этих бубнов скопируйте файл libmysql.dll в C:\QtSDK\...\bin\sqldrivers, ну и последний вариант который приходит в голову это добавит в реестр


Название: Re: mysql driver not loaded
Отправлено: aviabunin от Август 02, 2011, 10:30
По поводу просто прописать libmysql.lib  в соответствующий каталог - сомнительно, т.к. не известно где это вылезет и когда. Насчет обратных слэшей в параметрах - согласен. Одна проблема осталась - пробелы в Program Files и MySQL\MySQL server 5.5  - победить не удается - хоть из командной строки запускай, хоть из QtSDK\Desktop(MinGw). Пока вижу один выход - переставить MySQL в C:\mysql . И ждать пока кто-нибудь просветить насчет пробелов. Надо бы найти форум разработчиков Qt . Попробую на эту тему отдельные ветки  на сайтах запустить


Название: Re: mysql driver not loaded
Отправлено: iks от Август 02, 2011, 11:26
Выше я не просто написал путь а взял его в "", можно попробовать "LIB += \"ваш путь\"", по поводу того что где это вылезет и когда, так по любому если вы будете распространять свою софтину, то в папку с бинарником проще подкинуть sqldrivers\libmysql.dll


Название: Re: mysql driver not loaded
Отправлено: aviabunin от Август 02, 2011, 12:18
Все получилось после того как путь заключил в  одинарные кавычки ' ...  '   и поставил обратные слэши.
Т.е. просто открываем проект по сборке mysql (C:\QtSDK\QtSources\4.7.3\src\plugins\sqldrivers\mysq\mysql.prol)  и правим пути на вкладке параметров сборки, собираем. Затем 4 файла, указанные на 2 вложении (по 2 файла из debug и release) переписываем в тот же каталог , который указан во втором вложении.
Затем не забываем в файле проекта дописать QT += sql и можно пользоваться MySQL.
Всем спасибо!


Название: Re: mysql driver not loaded
Отправлено: aviabunin от Август 07, 2011, 21:45
Но вот запустить приложение и использованием не удается. Получаю сообщение в ходе отладки -

Цитировать
Запускается D:\QT\monitor-build-desktop\debug\monitor.exe...

("QSQLITE", "QMYSQL3", "QMYSQL")
Connected
"Driver not loaded Driver not loaded"
QSqlQuery::exec: database not open
0  
Вот текст программы main.cpp
Код:
#include <QtGui/QApplication>
#include "mainwindow.h"
#include <QtSql>
#include <qsqldatabase.h>
#include <QDebug>


int main(int argc, char *argv[])
{
    QSqlQuery query;

    QApplication a(argc, argv);


    MainWindow w;

    a.addLibraryPath( "./" );

    QSqlDatabase db  = QSqlDatabase::addDatabase("QMYSQL");
    qDebug() << QSqlDatabase::drivers();


     db.setHostName("localhost");
     db.setDatabaseName("db1");
     db.setUserName("root");
     db.setPassword("Djkjlz1");

     if (!db.open()) {

             qDebug() << "Error connecting";
             return 1;
             } else {
                qDebug() << "Connected";
             }

     if(!query.isActive())
          qDebug()<< query.lastError().text();

    query.exec("SELECT name FROM region");
...
и вот moninor.pro
Код:
QT       += core gui

TARGET = monitor
TEMPLATE = app

SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

QT += sql

FORMS    += mainwindow.ui
Драйвер вроде собрался нормально, о чем говорит первая запись в окне вывода -
("QSQLITE", "QMYSQL3", "QMYSQL")
Соnnected.

Чего не хватает ?





Название: Re: mysql driver not loaded
Отправлено: LisandreL от Август 08, 2011, 00:52
query.isActive до exec'а? :o

Попробуйте так:
Цитировать
#include <QtGui/QApplication>
#include "mainwindow.h"
#include <QtSql>
#include <qsqldatabase.h>
#include <QDebug>


int main(int argc, char *argv[])
{
    QSqlQuery query;

    QApplication a(argc, argv);


    MainWindow w;

    a.addLibraryPath( "./" );

    QSqlDatabase db  = QSqlDatabase::addDatabase("QMYSQL");
    qDebug() << QSqlDatabase::drivers();


     db.setHostName("localhost");
     db.setDatabaseName("db1");
     db.setUserName("root");
     db.setPassword("Djkjlz1");

     if (!db.open()) {
         qDebug() << "Error connecting";
         return 1;
     }
     else {
       qDebug() << "Connected";
    }

   if(!query.isActive())
          qDebug()<< query.lastError().text();


   QSqlQuery query( db );
    if ( !query.exec("SELECT name FROM region") ) {
        qDebug()<< query.lastError().text();
        return 1;
    }

    ...

P.S. Ну и порт лучше поставить, даже если он дефолтный.


Название: Re: mysql driver not loaded
Отправлено: aviabunin от Август 08, 2011, 07:30
Спасибо, огромное! Все заработало.
1. Кроме того, что в коде прописано ---
в monitor.pro:
Код:
QT += sql
в main.cpp:
Код:
#include <QtSql>
#include <qsqldatabase.h>
...
    QSqlDatabase db  = QSqlDatabase::addDatabase("QMYSQL");
Где нужно положить библиотеку libmysql.dll или каким образом прописать путь к ней.
А то я на всякий случай положил во многих местах.
2. Сгенерированные драйвера MySQL  я разместил в каталоге C:\QtSDK\Desktop\Qt\4.7.3\mingw\plugins\sqldrivers
А если приложение не desktop? а, например, приложение для Symbian - где должны быть драйвера libqsqlmysql4.a и
qsqlmysql4.dll ...?
Как разобраться со структурой каталогов в C:\QtSDK? Какое назначение каталогов -
C:\QtSDK\mingw
C:\QtSDK\Symbian?
3. Видел ссылку (к сожалению не действующую на программу, которая позволяет определить
где и что ищет компоновщик , что не может найти)
Цитировать
Открой для себя волшебную утилиту http://www.dependencywalker.com/
Она точно скажет какие dll нужны и где система их сейчас видит.
Но она не поможет на динамически загружаемых библиотеках (в смысле плагинах).
Это с адреса - http://www.sql.ru/forum/actualthread.aspx?tid=745985


Название: Re: mysql driver not loaded
Отправлено: blakvoron от Сентябрь 08, 2011, 19:34
Народ, я начинающий программист, так что сильно не пинайте.
я подключил библиотеки:
#include <QtSql/mysql.h>
#include <QtSql/qsqldatabase.h>
#include <qDebug>

Капнул из SQL mysql.h и ещё кучу файлов, что попросил вмести с ним
А дальше при каждой попытке вызова QSqlDatabase вываливается по 5 ошибок типа:

undefined reference to '_imp__ZN12QSqlDatabaseC1Ev'

может кто подскажет, с чем это может быть связано?


Название: Re: mysql driver not loaded
Отправлено: Даниил от Сентябрь 09, 2011, 08:42
В .pro файл допиши:
Код:
QT += sql
Возникновение таковой  конструкции, свидетельствует о том, что ты не подключил модуль в .pro файл.


Название: Re: mysql driver not loaded
Отправлено: blakvoron от Сентябрь 09, 2011, 20:15
Огромное спасибо...)))


Название: Re: mysql driver not loaded
Отправлено: PavelVX от Октябрь 05, 2011, 10:53
Собрал драйвер для QMySQL как тут написанно, все собралось. перекинул 2*2 файлика в C:\QtSDK\Desktop\Qt\4.7.4\mingw\plugins\sqldrivers.
но в пректе поддержка mySQL не появилась :(
    qDebug() << QSqlDatabase::drivers();
выдает:
QSqlDatabase: available drivers: QSQLITE QODBC3 QODBC
("QSQLITE", "QODBC3", "QODBC") .
Что я мог недоделать?
сам спросил, сам и отвечу, случайно нагуглил ответ: в папку с приложением нужно докинуть клиентскую dll: libmysql.dll
И тогда, вроде бы, начинает все работать :)


Название: Re: mysql driver not loaded
Отправлено: Lebets_VI от Октябрь 06, 2011, 11:32
Приветствую.
А вот у меня совсем другая проблема, при сборке лезут ошибки линковки "undefined reference " На все используемые ф-ции, например:
undefined reference to `mysql_stmt_error@4'

Неделю уже парюсь, что и как только не ствил. Собираю под MinGW

Может найдется добрый человек и выложит дебажную и релизную длл версии 4.7.4 ?



Название: Re: mysql driver not loaded
Отправлено: Lebets_VI от Октябрь 06, 2011, 12:08
Тупо переименовал libmysql.lib в libmysql.a и все собралось


Название: Re: mysql driver not loaded
Отправлено: Myllyenko от Март 28, 2012, 18:09
Сделал всё по инструкции с первой страницы, но библиотека всё равно не собирается (ошибки "undefined reference"). В чём может быть дело?


Название: Re: mysql driver not loaded
Отправлено: Даниил от Март 28, 2012, 19:07
В .pro файл допиши:
Код:
QT += sql
Возникновение таковой  конструкции, свидетельствует о том, что ты не подключил модуль в .pro файл.