Russian Qt Forum

Qt => Базы данных => Тема начата: Xaero от Ноябрь 01, 2007, 15:51



Название: Driver not loaded (SQLite)
Отправлено: Xaero от Ноябрь 01, 2007, 15:51
Решил попробовать Qt. Наваял простенькую форму которая смотрит собердимое базы SQLite, а так же добавляет и удаляет записи в ней. Но как оказалось я не могу даже законектится к базе - прога пишет сабж  :-\. привожу код:

#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqError>

inline bool createConnection()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("../test/work.db");
    if (!db.open())
    {
        QMessageBox::warning(0, QObject::tr("Database Error"),db.lastError().text());
        return false;
    }
    return true;
}

я так понял мне возвращается db.lastError().text()) (DRIVER NOT LOADED).
компиляция Qt проходила умолчанию, в папке plugins sqlite.dll лежат.

подскажите пожалуста - каким образом надо подключать драйвер к программе?
заранее благодарен...


Название: Re: Driver not loaded (SQLite)
Отправлено: Mikhail от Ноябрь 01, 2007, 16:15
Решил попробовать Qt. Наваял простенькую форму которая смотрит собердимое базы SQLite, а так же добавляет и удаляет записи в ней. Но как оказалось я не могу даже законектится к базе - прога пишет сабж  :-\. привожу код:

#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqError>

inline bool createConnection()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("../test/work.db");
    if (!db.open())
    {
        QMessageBox::warning(0, QObject::tr("Database Error"),db.lastError().text());
        return false;
    }
    return true;
}

я так понял мне возвращается db.lastError().text()) (DRIVER NOT LOADED).
компиляция Qt проходила умолчанию, в папке plugins sqlite.dll лежат.

подскажите пожалуста - каким образом надо подключать драйвер к программе?
заранее благодарен...

Я бы посоветовал сначала посмотреть и запустить какойнибудь из примеров. Например, любой из каталога QTDIR/examples/sql. Там все примеры работающие.


Название: Re: Driver not loaded (SQLite)
Отправлено: Kainit от Ноябрь 01, 2007, 16:38
http://doc.trolltech.com/4.0/sql-driver.html (http://doc.trolltech.com/4.0/sql-driver.html)
Troubleshooting
Цитировать
You should always use client libraries that have been compiled with the same compiler as you are using for your project. If you cannot get a source distibution to compile the client libraries yourself, you must make sure that the pre-compiled library is compatible with your compiler, otherwise you will get a lot of "undefined symbols" errors. Some compilers have tools to convert libraries, e.g. Borland ships the tool COFF2OMF.EXE to convert libraries that have been generated with Microsoft Visual C++.

If the compilation of a plugin succeeds but it cannot be loaded, make sure that the following requirements are met:

    * Ensure that you are using a shared Qt library; you cannot use the plugins with a static build.
    * Ensure that the environment variable QTDIR points to the right directory. Go to the $QTDIR/plugins/sqldrivers directory and make sure that the plugin exists in that directory.
    * Ensure that the client libraries of the DBMS are available on the system. On Unix, run the command ldd and pass the name of the plugin as parameter, for example ldd libqsqlmysql.so. You will get a warning if any of the client libraries couldn't be found. On Windows, you can use Visual Studio's dependency walker.

If you are experiencing problems with loading plugins, and see output like this

    QSqlDatabase: QMYSQL driver not loaded
    QSqlDatabase: available drivers: QMYSQL

the problem is probably that the plugin had the wrong build key. For debugging purposes, remove the corresponding entry in the $HOME/.qt/qt_plugins_(qtversion).rc file.

The next time you try to load this plugin, it will give you a more detailed error message.

1. Собирали левым компилятором а использовать пытаетесь в VS
2. Не находит пути.
3. Не забывайте о сложностях использования плагинов в статической сборке

И вообще, раз выдаётся driver not loaded, убедитесь в его доступности. Получите список доступных драйверов и поглядите.


Название: Re: Driver not loaded (SQLite)
Отправлено: Racheengel от Ноябрь 06, 2007, 02:01
В папке с ехе-хой пробовали создавать подкаталог sqldrivers и туда пихать драйвер?


Название: Re: Driver not loaded (SQLite)
Отправлено: pastor от Ноябрь 06, 2007, 02:34
А вобще, поищи по форуму. Такая тема поднималась уже миллион раз...

ЗЫ: Ваще пора сделать по этой теме вики


Название: Re: Driver not loaded (SQLite)
Отправлено: mistake от Апрель 02, 2008, 00:06
...Получите список доступных драйверов и поглядите.
А меня вот как раз таки интересует - как получить список имеющихся в системе драйверов?


Название: Re: Driver not loaded (SQLite)
Отправлено: pastor от Апрель 02, 2008, 01:18
А меня вот как раз таки интересует - как получить список имеющихся в системе драйверов?

Цитировать
QStringList QSqlDatabase::drivers ()   [static]

Returns a list of all the available database drivers.


ЗЫ: Ассистант в помощь ;)


Название: Re: Driver not loaded (SQLite)
Отправлено: Mikhail от Апрель 02, 2008, 16:48
...Получите список доступных драйверов и поглядите.
А меня вот как раз таки интересует - как получить список имеющихся в системе драйверов?

Неужели тяжело посмотреть demos. Там есть прекрасный пример sqlbrowser.
И к базе подключится, если есть драйвер, да и покажет имеющиеся драйверы.

Читайте ассистент и просматривайте примеры и демки. Там ответы на все вопросы.


Название: Re: Driver not loaded (SQLite)
Отправлено: mistake от Апрель 04, 2008, 20:59
Ассистантом я пользуюсь, демки тоже смотрю. Кстати в Qt 4.3.2 не нашел демки SQLBrowser (в предыдущих версиях я ее видел); собственно из-за этого я и задал вопрос в надежде на быстрый ответ.
Тем не менее ответ я нашел сам. Извините за беспокойство.