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

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

Страниц: [1] 2 3 4   Вниз
  Печать  
Автор Тема: mysql driver not loaded  (Прочитано 56968 раз)
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
Записан
ритт
Гость
« Ответ #1 : Март 09, 2009, 23:52 »

пользуй поиск по форуму. название треда замечательно подойдёт в качестве ключевой фразы для запроса...
Записан
4ybaka
Гость
« Ответ #2 : Март 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] будет записана неверная информация.

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

  [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://www.qtforum.org/thread.php?postid=52360#post52360

Записан
spirit
Гость
« Ответ #3 : Март 25, 2009, 19:56 »

ссылка битая.
Записан
Magvaj
Гость
« Ответ #4 : Март 26, 2009, 12:57 »

без ссылки на форум- здесь указана информация по сборке довольно развёрнуто. По ней всё собрал без проблем.

Предлагаю облагородить описание и поместить в FAQ.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #5 : Март 26, 2009, 13:07 »

Есть вики, облагораживай, выкладывай. Если что - подправлю.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Magvaj
Гость
« Ответ #6 : Март 26, 2009, 14:38 »

Есть вики, облагораживай, выкладывай. Если что - подправлю.

хорошо... сдам проект займусь... заодно парочку своих наработок выложу ;-)
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #7 : Март 26, 2009, 15:05 »

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

отлично! Все будут признательны Улыбающийся
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
ONIKSfly
Гость
« Ответ #8 : Апрель 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

Не посоветуете новичку чего?
Записан
alex12
Гость
« Ответ #9 : Апрель 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

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

Работает железно. Никаких проблем с подключением к БД!
Записан
ONIKSfly
Гость
« Ответ #10 : Апрель 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

В чем я накосячил?
Записан
alex12
Гость
« Ответ #11 : Апрель 06, 2009, 19:22 »

может нету:
Код:
#include <QtSql>
Записан
ONIKSfly
Гость
« Ответ #12 : Апрель 06, 2009, 20:06 »

Все равно, ошибка остается. сами файлики положил в директорию проекта. Использую для компилирования Qt Creator V1.0.0 (NOKIA)
Записан
alex12
Гость
« Ответ #13 : Апрель 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();
}
Записан
ONIKSfly
Гость
« Ответ #14 : Апрель 07, 2009, 18:34 »

Там только наверно
Код
C++ (Qt)
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
Теперь вот как происходит.
Если выполнять вот такую программу (без указателя), то вылазит туча ошибок(171 и 82 предупреждения), как понимаю все это вызвано вот этим:
Код:
mysql_plugin.h:61: mysql.h: No such file or directory
А остальные ошибки скрином, а то правда очень много:

А если использовать указатель, т.е.:
Код
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();
}
Ошибок будет меньше:
« Последнее редактирование: Апрель 07, 2009, 18:36 от ONIKSfly » Записан
Страниц: [1] 2 3 4   Вверх
  Печать  
 
Перейти в:  


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