Russian Qt Forum
Май 05, 2024, 14:40 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2] 3 4   Вниз
  Печать  
Автор Тема: mysql driver not loaded  (Прочитано 57019 раз)
alex12
Гость
« Ответ #15 : Апрель 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.

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

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

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

Еще стоит посмотреть файл из Qt примеров, как они делают подключение к БД. Файл QTDIR/examples/sql/connection.h. Там написано так:
Код:
   ...
 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(":memory:");
    if (!db.open()) {
   ...
« Последнее редактирование: Апрель 07, 2009, 22:32 от alex12 » Записан
kobra
Гость
« Ответ #16 : Сентябрь 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] будет записана неверная информация.

Крутой Если произошла такая неприятность, чистим кэш плагинов - это можно сделать удалив из реестра ветку

  [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 ничего не прописалось и программа не работает(нету драйвера). Где может бить ошибка?
Записан
NicK
Гость
« Ответ #17 : Сентябрь 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

Все.
Записан
Lostinnet
Гость
« Ответ #18 : Сентябрь 30, 2010, 11:34 »

Прошу прощения, у меня проблемка немножко другая, но решил написать сюда.

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

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #19 : Сентябрь 30, 2010, 15:33 »

Lostinnet, иди в поиск по фразе driver not loaded. Данный вопрос поднимается по несколько раз в месяц.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Astrologer
Гость
« Ответ #20 : Сентябрь 30, 2010, 17:05 »

Alex12  - ссылка битая! Перезалейте пожалуйста.
Записан
kobra
Гость
« Ответ #21 : Октябрь 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 программа работает нормально(тойсть подключаеться к базе) правда только на моем компе.

Так вот что я не так сделал?
Записан
kobra
Гость
« Ответ #22 : Октябрь 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.
Записан
Ojigrande
Гость
« Ответ #23 : Февраль 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'
Записан
DenisKh001
Гость
« Ответ #24 : Февраль 18, 2011, 06:26 »

Эти два скриншота - две совершенно независимые проблемы.

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

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

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

Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #25 : Февраль 18, 2011, 08:27 »

Скачать.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
DenisKh001
Гость
« Ответ #26 : Февраль 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х, чего точно не стоило делать, а корректно удалить не получается.
Записан
Karl-Philipp
Гость
« Ответ #27 : Февраль 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.
Мне помогало, правда не уверен, что такое удаление корректно Улыбающийся
Записан
iks
Гость
« Ответ #28 : Май 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 вообще проблем ни каких не чувствовал  =)
« Последнее редактирование: Май 16, 2011, 20:45 от iks » Записан
iks
Гость
« Ответ #29 : Май 16, 2011, 22:40 »

Вот что значит просидеть на Linux более года, уже отвык что после каждого чиха систему надо перезагружать чтоб применить новые параметры =)))
Сейчас вроде идет сборка посмотрю как соберется. далее отпишусь.
Кстати вот статейка неплохая по этой теме
---------------------------------
Нет так-же ошибка похоже придется пересобрать сам Qt
« Последнее редактирование: Май 16, 2011, 22:49 от iks » Записан
Страниц: 1 [2] 3 4   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.376 секунд. Запросов: 22.