Russian Qt Forum

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



Название: Driver sqlite [SOLVED]
Отправлено: nata267 от Январь 18, 2011, 14:47
Не подскажете как можно собрать драйвер sqlite на основе библиотеки sqlite3.dll??


Название: Re: Driver sqlite
Отправлено: Sahab от Январь 18, 2011, 15:13
раскрыть мысль более широко можно?


Название: Re: Driver sqlite
Отправлено: nata267 от Январь 18, 2011, 15:35
вот проект плагина драйвера, который есть в папке
QTDIR\src\plugins\sqldrivers\sqlite
Код:
TARGET	 = qsqlite

HEADERS = ../../../sql/drivers/sqlite/qsql_sqlite.h
SOURCES = smain.cpp \
  ../../../sql/drivers/sqlite/qsql_sqlite.cpp

!system-sqlite:!contains( LIBS, .*sqlite.* ) {
    CONFIG(release, debug|release):DEFINES *= NDEBUG
    DEFINES += SQLITE_OMIT_LOAD_EXTENSION SQLITE_OMIT_COMPLETE
    INCLUDEPATH += ../../../3rdparty/sqlite
    SOURCES += ../../../3rdparty/sqlite/sqlite3.c
} else {
    LIBS *= $$QT_LFLAGS_SQLITE
    QMAKE_CXXFLAGS *= $$QT_CFLAGS_SQLITE
}

include(../qsqldriverbase.pri)

т.е. он собирается из исходника sqlite3.c, а мне нужно на основе либы sqlite3.dll,
так вот я пробовала закоментить строчку SOURCES += ../../../3rdparty/sqlite/sqlite3.c
и скомпилировать так

cd %QTDIR%\src\plugins\sqldrivers\sqlite
qmake "INCLUDEPATH+=../../../3rdparty/sqlite" "LIBS+=-L../../../3rdparty/sqlite -lsqlite3"
mingw32-make

в папке ../../../3rdparty/sqlite у меня есть sqlite3.dll, libsqlite3.a и заголовочные файлы sqlite3.h...

получается скомпилировать qsqlited4.dll, libqsqlited4.a,  кладу их в папку sqldrivers относительно екзэшника приложения, но при запуске пишет driver not loaded

sqlite3.dll кладу рядом с экзешником


Название: Re: Driver sqlite
Отправлено: Paullo от Январь 18, 2011, 20:41
Вообще то SQlite разрабатывалась как встроеная база данных и рассчитана на то чтобы её всегда вкомпиливали внутрь приложения.
За счёт этого - производительность и экономия ресурсов. Это так, на всякий случай.


Название: Re: Driver sqlite
Отправлено: DmP от Январь 18, 2011, 22:50
вот проект плагина драйвера, который есть в папке
QTDIR\src\plugins\sqldrivers\sqlite
Код:
!system-sqlite:!contains( LIBS, .*sqlite.* ) {
...
т.е. он собирается из исходника sqlite3.c, а мне нужно на основе либы sqlite3.dll,
так вот я пробовала закоментить строчку SOURCES += ../../../3rdparty/sqlite/sqlite3.c
и скомпилировать так

cd %QTDIR%\src\plugins\sqldrivers\sqlite
qmake "INCLUDEPATH+=../../../3rdparty/sqlite" "LIBS+=-L../../../3rdparty/sqlite -lsqlite3"
mingw32-make

в папке ../../../3rdparty/sqlite у меня есть sqlite3.dll, libsqlite3.a и заголовочные файлы sqlite3.h...
Как и писал раннее, ни чего комментировать для сборки плагина не надо, достаточно указать опцию system-sqlite. Собственно, это и так видно в файле который приведен выше.

Цитировать
получается скомпилировать qsqlited4.dll, libqsqlited4.a,  кладу их в папку sqldrivers относительно екзэшника приложения, но при запуске пишет driver not loaded

sqlite3.dll кладу рядом с экзешником
Нужно проверить, собрана ли программа и плагин одним компилятором и с одинаковой целью (RELEASE/DEBUG). Если это не поможет, то с помощью Dependency Walker проверить зависимости библиотек sqlite и плагина.


Название: Re: Driver sqlite
Отправлено: nata267 от Январь 19, 2011, 09:23
Вообще то SQlite разрабатывалась как встроеная база данных и рассчитана на то чтобы её всегда вкомпиливали внутрь приложения.
За счёт этого - производительность и экономия ресурсов. Это так, на всякий случай.

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


Название: Re: Driver sqlite
Отправлено: nata267 от Январь 19, 2011, 12:19
нашла вот что по ссылке http://doc.trolltech.com/4.1/sql-driver.html#qsqlite-for-sqlite-version-3-and-above

Цитировать
How to Build the Plugin

SQLite version 3 is included as a third-party library within Qt. It can be built by passing the following parameters to the configure script: -plugin-sql-sqlite (build as a plugin) or -qt-sql-sqlite (linked directly into the Qt library).

If you don't want to use the SQLite library included with Qt, you can build it manually (replace $SQLITE by the directory where SQLite resides):

        cd $QTDIR/src/plugins/sqldrivers/sqlite
        qmake -o Makefile "INCLUDEPATH+=$SQLITE/include" "LIBS+=-L$SQLITE/lib -lsqlite"
        make

On Windows:

        cd %QTDIR%\src\plugins\sqldrivers\sqlite
        qmake -o Makefile "INCLUDEPATH+=C:\SQLITE\INCLUDE" "LIBS+=C:\SQLITE\LIB\SQLITE3.LIB" mysql.pro
        nmake

как сделать из dll lib??


Название: Re: Driver sqlite
Отправлено: DmP от Январь 19, 2011, 12:27
cd %QTDIR%\src\plugins\sqldrivers\sqlite
qmake "INCLUDEPATH+=../../../3rdparty/sqlite" "LIBS+=-L../../../3rdparty/sqlite -lsqlite3"
mingw32-make

в папке ../../../3rdparty/sqlite у меня есть sqlite3.dll, libsqlite3.a и заголовочные файлы sqlite3.h..
А так что уже не собирается?
Для мингвина должно быть *.a. Та инструкция для msvc.


Название: Re: Driver sqlite
Отправлено: DmP от Январь 19, 2011, 12:33
На сколько я понимаю, расширение icu можно собрать сразу вместе sqlite. Если при сборке указать -DSQLITE_ENABLE_ICU. Файл icu.c уже включен в исходники sqlite-amalgamation.


Название: Re: Driver sqlite
Отправлено: nata267 от Январь 20, 2011, 15:35
На сколько я понимаю, расширение icu можно собрать сразу вместе sqlite. Если при сборке указать -DSQLITE_ENABLE_ICU. Файл icu.c уже включен в исходники sqlite-amalgamation.

спасибо, но вопрос решен другим способом http://www.prog.org.ru/topic_16418_0.html