Russian Qt Forum

Qt => Базы данных => Тема начата: Bag от Сентябрь 14, 2007, 23:43



Название: sqlite + qt
Отправлено: Bag от Сентябрь 14, 2007, 23:43
Подскажите пожалуйста как подключиться к базе sqlite в qt, а то че-то не могу разобраться.


Название: Re: sqlite + qt
Отправлено: Пантер от Сентябрь 15, 2007, 13:09
QSqlDatabase base = QSqlDatabase::addDatabase("QSQLITE");
base.setDatabaseName("....../base.db"); Полный путь к базе
    if (!base.open())
    {
        QMessageBox::critical(this, tr("Error open"),base.lastError().text());
    }


Название: Re: sqlite + qt
Отправлено: Bag от Сентябрь 15, 2007, 15:00
Правильно ли я понял, что драйвер sqlite не устанавливается по умолчанию и чтобы его установить нужно, пересобрать qt с пометкой -qt-sql-sqlite? Но qt так долго компилируется, нет ли другого решения этой проблемы?


Название: Re: sqlite + qt
Отправлено: Пантер от Сентябрь 15, 2007, 17:09
Нужно зайти в папку $QTDIR/src/plugins/sqldrivers/sqlite
qmake -o Makefile
make
Правда я так не собирал. Пройдись поиском по этому форуму и найдешь ответ - вопрос не раз поднимался.


Название: Re: sqlite + qt
Отправлено: Bag от Сентябрь 15, 2007, 19:06
Он выдает ошибку при компиляции. Пытался с самого начала компилировать qt c поддержкой sqlite, но снова возникает ошибка.

Код:
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp:32:22: sqlite.h: No such file or directory
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp: In constructor `QSQLiteDriverPrivate::QSQLiteDriverPrivate()':
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp:62: error: `sqlite_encoding' undeclared (first use this function)
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp:62: error: (Each undeclared identifier is reported only once for each function it appears in.)
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp: In member function `void QSQLiteResultPrivate::finalize()':
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp:118: error: `sqlite_finalize' undeclared (first use this function)
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp:121: error: `sqlite_freemem' undeclared (first use this function)
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp: In member function `bool QSQLiteResultPrivate::fetchNext(QValueVector<QVariant>*)':
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp:170: error: `sqlite_step' undeclared (first use this function)
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp:170: error: `SQLITE_BUSY' undeclared (first use this function)
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp:180: error: `SQLITE_ROW' undeclared (first use this function)
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp:192: error: `SQLITE_DONE' undeclared (first use this function)
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp:198: error: `SQLITE_ERROR' undeclared (first use this function)
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp:199: error: `SQLITE_MISUSE' undeclared (first use this function)
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp: In member function `virtual bool QSQLiteResult::reset(const QString&)':
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp:243: error: `sqlite_compile' undeclared (first use this function)
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp:244: error: `SQLITE_OK' undeclared (first use this function)
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp:246: error: `sqlite_freemem' undeclared (first use this function)
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp: In member function `virtual int QSQLiteResult::numRowsAffected()':
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp:275: error: `sqlite_changes' undeclared (first use this function)
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp: In member function `bool QSQLiteDriver::open(const QString&, const QString&, const QString&, const QString&, int, const QString&)':
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp:329: error: `sqlite_open' undeclared (first use this function)
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp:332: error: `sqlite_freemem' undeclared (first use this function)
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp: In member function `virtual void QSQLiteDriver::close()':
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp:348: error: `sqlite_close' undeclared (first use this function)
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp: In member function `virtual bool QSQLiteDriver::beginTransaction()':
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp:366: error: `sqlite_exec' undeclared (first use this function)
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp:368: error: `SQLITE_OK' undeclared (first use this function)
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp:372: error: `sqlite_freemem' undeclared (first use this function)
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp: In member function `virtual bool QSQLiteDriver::commitTransaction()':
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp:382: error: `sqlite_exec' undeclared (first use this function)
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp:384: error: `SQLITE_OK' undeclared (first use this function)
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp:388: error: `sqlite_freemem' undeclared (first use this function)
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp: In member function `virtual bool QSQLiteDriver::rollbackTransaction()':
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp:398: error: `sqlite_exec' undeclared (first use this function)
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp:400: error: `SQLITE_OK' undeclared (first use this function)
..\..\..\..\src\sql\drivers\sqlite\qsql_sqlite.cpp:404: error: `sqlite_freemem' undeclared (first use this function)
mingw32-make.exe[3]: Leaving directory `C:/QT/3.3.8/plugins/src/sqldrivers/sqlite'
mingw32-make.exe[2]: Leaving directory `C:/QT/3.3.8/plugins/src/sqldrivers'
mingw32-make.exe[1]: Leaving directory `C:/QT/3.3.8/plugins/src'
mingw32-make.exe[3]: *** [tmp\obj\release_mt_shared\qsql_sqlite.o] Error 1
mingw32-make.exe[2]: *** [sub-sqlite] Error 2
mingw32-make.exe[1]: *** [sub-sqldrivers] Error 2
mingw32-make.exe: *** [sub-plugins] Error 2


Название: Re: sqlite + qt
Отправлено: AlekSi от Сентябрь 15, 2007, 20:26
чтобы его установить нужно, пересобрать qt с пометкой -qt-sql-sqlite
Лучше -plugin-sql-sqlite


Название: Re: sqlite + qt
Отправлено: Bag от Сентябрь 15, 2007, 22:26
Это и есть с -plugin-sql-sqlite. С -qt-sql-sqlite я тоже пробовал собирать таже фигня.


Название: Re: sqlite + qt
Отправлено: Racheengel от Сентябрь 15, 2007, 23:18
Надо сам плугин пересобрать, а не Qt.
Заходим в src\plugins\sqldrivers\sqlite\
делаем qmake, затем make.
И должна сила пребыть с джедаем.


Название: Re: sqlite + qt
Отправлено: AlekSi от Сентябрь 15, 2007, 23:23
А что за версия Qt? Лично у меня файла sqlite.h нет, есть sqlite3.h.
И вообще, бери бинарники. (http://trolltech.com/developer/downloads/qt/windows) :)


Название: Re: sqlite + qt
Отправлено: Пантер от Сентябрь 16, 2007, 12:55
Нафиг бинарники? Кутя отлично собирается. Вот пример сбора под виндой:
1. Делаешь build.bat следующего содержания
Код:
configure -release -static -no-fast -no-exceptions -no-accessibility -no-stl -qt-sql-odbc -qt-sql-sqlite -no-qt3support -qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -no-dsp -no-vcproj -no-incredibuild-xge -no-rtti -no-mmx -no-3dnow -no-sse -no-sse2 -no-openssl -no-style-cleanlooks -no-style-motif -no-style-cde
2. В projects.pro коментишь строки с SUBDIRS += examples и SUBDIRS += demos (т.е. ставишь в начале строки знак #).
3. Запускаешь батник, говоришь Y.
4. Запускаешь make и ждешь 20-40 минут.
5. Работаешь.
Бинарники лучше не использовать потому, что проги большие по размеру получаются, т.к. включено очень многое.


Название: Re: sqlite + qt
Отправлено: AlekSi от Сентябрь 16, 2007, 23:23
panter_dsd, весьма жёсткую ты конфигурацию предлагаешь...

А бинарники (и пакеты в Линуксе) хороши в первую очередь тем, что с ними гораздо проще. При разработке размер особого значения не играет, зато можно быстру получить все рабочие компоненты, в том числе и поддержку SQLite. А ко времени релиза человек уже опытным будет, сам соберёт. :)


Название: Re: sqlite + qt
Отправлено: ритт от Сентябрь 17, 2007, 00:13
2. В projects.pro коментишь строки с SUBDIRS += examples и SUBDIRS += demos (т.е. ставишь в начале строки знак #).

чтобы не собирались экзамплы и демы, делай make sub-src


Название: Re: sqlite + qt
Отправлено: AlekSi от Сентябрь 18, 2007, 07:07
Код:
./configure <...> -nomake examples -nomake demos <...>
;)