Russian Qt Forum

Qt => Базы данных => Тема начата: Ayanami_Rey от Январь 05, 2011, 22:18



Название: очередное Driver not loaded
Отправлено: Ayanami_Rey от Январь 05, 2011, 22:18
прочитал все что тут было по данной тематике но мою проблему не решило.
проект на Qt 4.7.0 + mingw под винХП

собираю mysql по такой технологии:
cd C:\MySQL\include
dlltool -d libmysql.def -D libmysql.dll -l libmysql.a -k
cd C:\Qt\qt\src\plugins\sqldrivers\mysql
qmake -o Makefile "INCLUDEPATH+=C:\MySQL\include" "LIBS+=C:\MySQL\lib\opt\libmysql.lib" mysql.pro
mingw32-make

добавляю в pro файл
QT += core gui sql
CONFIG += release

в main файле пишу

    QApplication a(argc, argv);
    a.setLibraryPaths(QStringList()<<QDir(a.applicationDirPath()+"//plugins//").absolutePath());
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    if (!db.open())
    {
     ...
    }

плагин к mysql лежит в <папка экзешника>/plugins/sqldrivers/qsqlmysql4.dll
libmysql лежит возле ехешника

ну и как понимаете появляется всеми любимая ошибка Driver not loaded
смотрел в реестре ветку HKEY_CURRENT_USER\Software\Trolltech. при нормальном соединении с плагинами должно появлятся 2 записи:
OrganizationDefaults\Qt Factory Cache 4.7 и
OrganizationDefaults\Qt Plugin Cache 4.7.false с путями к плагину, у меня же создается только Qt Plugin Cache 4.7.false.

причем если докинуть, например, одбц плагин, то одбц подключается отлично и в реестре все нормально пишется, хоть на моей машине, хоть на какой, а вот именно мускул работать не хочет :(

пробовал различные вариации на тем:
 a.setLibraryPaths(QString("./plugins/")) как с полными путями так и без...
результат такой же.
смотрел с помощью depends
никуда кроме указанных путей программа не лезет, во время выполнения пишет
Код:
Loaded "QSQLMYSQL4.DLL" at address 0x6C8C0000.  Successfully hooked module.
Loaded "LIBMYSQL.DLL" at address 0x10000000.  Successfully hooked module.
Loaded "WSOCK32.DLL" at address 0x71AB0000.  Successfully hooked module.
DllMain(0x71AB0000, DLL_PROCESS_ATTACH, 0x00000000) in "WSOCK32.DLL" called.
DllMain(0x71AB0000, DLL_PROCESS_ATTACH, 0x00000000) in "WSOCK32.DLL" returned 1 (0x1).
DllMain(0x10000000, DLL_PROCESS_ATTACH, 0x00000000) in "LIBMYSQL.DLL" called.
GetProcAddress(0x7C800000 [KERNEL32.DLL], "InitializeCriticalSectionAndSpinCount") called from "LIBMYSQL.DLL" at address 0x1006839F and returned 0x7C80B8B9.
GetProcAddress(0x7C800000 [KERNEL32.DLL], "FlsAlloc") called from "LIBMYSQL.DLL" at address 0x100660E5 and returned NULL. Error:     (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "FlsGetValue") called from "LIBMYSQL.DLL" at address 0x100660F2 and returned NULL. Error:     (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "FlsSetValue") called from "LIBMYSQL.DLL" at address 0x100660FF and returned NULL. Error:     (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "FlsFree") called from "LIBMYSQL.DLL" at address 0x1006610C and returned NULL. Error:     (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "IsProcessorFeaturePresent") called from "LIBMYSQL.DLL" at address 0x10067644 and returned 0x7C80AEBA.
DllMain(0x71AB0000, DLL_PROCESS_DETACH, 0x00000000) in "WSOCK32.DLL" called.
DllMain(0x71AB0000, DLL_PROCESS_DETACH, 0x00000000) in "WSOCK32.DLL" returned 1 (0x1).
Unloaded "QSQLMYSQL4.DLL" at address 0x6C8C0000.
Unloaded "LIBMYSQL.DLL" at address 0x10000000.
Unloaded "WSOCK32.DLL" at address 0x71AB0000.
LoadLibraryW("H:\qt\plugins\sqldrivers\qsqlmysql4.dll") returned NULL. Error:       (998).
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QODBC3 QODBC





Название: Re: очередное Driver not loaded
Отправлено: pastor от Январь 05, 2011, 23:08
Посмотри зависимости qsqlmysql4.dll


Название: Re: очередное Driver not loaded
Отправлено: CuteBunny от Январь 06, 2011, 09:09
Запускали тулзу со списком установленных драйверов?

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


Название: Re: очередное Driver not loaded
Отправлено: Ayanami_Rey от Январь 06, 2011, 09:56
qsqlmysql4.dll собирается без левых зависимостей. Проверял.


Название: Re: очередное Driver not loaded
Отправлено: fuCtor от Январь 06, 2011, 17:05
В поле видимости должен быть файл libmysql.dll (положите его сразу в %QTDIR%/bin)
Уже наступал ни раз на эти грабли


Название: Re: очередное Driver not loaded
Отправлено: Ayanami_Rey от Январь 06, 2011, 17:17
дык проблема то на чистой машине. нету там и в помине %QTDIR%/bin.
на моей машине все идет нормально.


Название: Re: очередное Driver not loaded
Отправлено: fuCtor от Январь 06, 2011, 19:34
значит рядом с exe файлом кинуть, главное чтоб по стандартным путям (переменная PATH + рабочая папка) этот файл можно было найти.


Название: Re: очередное Driver not loaded
Отправлено: Ayanami_Rey от Январь 06, 2011, 20:02
да лежит эта дллка возле ехешника. пробовал и в систем32 запихивать. толку 0


Название: Re: очередное Driver not loaded
Отправлено: fuCtor от Январь 06, 2011, 20:09
может какие-нибудь особенности вызванные линковкой с libmysql.lib при сборке плагина и mingw.

Тут уже даж и нет больше вариантов, т.к. собираю студией и проблем не было никаких.


Название: Re: очередное Driver not loaded
Отправлено: Ayanami_Rey от Январь 06, 2011, 20:35
на счет того что криво собирается мускул плагин я тоже думал, но ведь делаю как написано в мануале, а не просто так...
мб ключ сборки не соответствует ключу моего приложения?
тогда как это посмотреть?


Название: Re: очередное Driver not loaded
Отправлено: ASeN от Январь 08, 2011, 15:11
Попробуй так: <папка экзешника>/sqldrivers/qsqlmysql4.dll


Название: Re: очередное Driver not loaded
Отправлено: Ayanami_Rey от Январь 09, 2011, 20:23
пробовал. та-же херня.


Название: Re: очередное Driver not loaded
Отправлено: Ayanami_Rey от Январь 10, 2011, 11:20
Всем спасибо!
Проблема была в кривой библиотеке libmysql.dll


Название: Re: очередное Driver not loaded
Отправлено: vvvxmag от Февраль 04, 2011, 21:45
У меня также вопрос по поводу driver not loaded, но ситуация другая.

Есть база MS Access используется только на чтение (по крайней мере я обращаюсь только с SELECT)

Программа и база записаны на CD-R при запуске, выдается сообщение driver not loaded.
Если скопировать содержимое диска на винт и запустить, то все в порядке.

Ума не приложу почему возникает данная ошибка.


Название: Re: очередное Driver not loaded
Отправлено: vvvxmag от Февраль 05, 2011, 22:23
Нашел причину возникновения ошибки.

Она возникает из-за того, что при открытии базы создается файл *.ldb
А создать его на CD-R невозможно.

Как открыть базу MS Access таким образом, чтобы не создавался файл *.ldb ?


Название: Re: очередное Driver not loaded
Отправлено: vvvxmag от Февраль 07, 2011, 08:25
Нашел решение. Для того чтобы открыть БД MS Access без создания фалй ldb, необходимо открыть ее в режиме монопольного(exclusive) доступа.
Для этого необходимо в connection string прописать следующее
Для драйвера ODBC
Exclusive=1;
Для других драйверов можно посмотреть на www.connectionstrings.com (http://www.connectionstrings.com)


Название: Re: очередное Driver not loaded
Отправлено: vvvxmag от Февраль 07, 2011, 13:12
Проблемы продолжаются.

Раньше возникала ошибка Driver not Loaded
Теперь ругается Не удалось открыть файл базы данных - [Microsoft][Драйвер ODBC Microsoft Access] Невозможно найти устанавливаемый ISAM. QODBC3: unabled to connect

Эта ошибка возникает только если пытаться запустить с CD диска. Если скопировать на винт, то все работает.

На машине где программа собиралась работает и с диска тоже.