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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Qt + fireBird  (Прочитано 19899 раз)
Astrologer
Гость
« : Сентябрь 30, 2010, 15:32 »

Работал на SQlite  и понял что она мне не подходит. Прочитал форум но некоторые вещи мне непонятны.
1) Хочу собрать FireBird так чтобы можно было просто скопировать необходимые файлы (в папку с exe)  и работать с ним (в случае переноса на другую машину). Это называется статическая линковка?

http://www.prog.org.ru/topic_1983_0.html

Что такой статически скомпонованный драйвер? Один файл, при закидывании которого все работает? Улыбающийся
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #1 : Сентябрь 30, 2010, 15:49 »

Это называется Embedded сервер - со стороны Qt тебе так и так просто надо собрать ibase драйвер. Ему все равно с полноценным или embedded сервером будешь работать.
Записан
Astrologer
Гость
« Ответ #2 : Сентябрь 30, 2010, 16:01 »

В той теме он говорит. Изменить файл pri.

А вот мой файл .pri содержит несколько строк.     
Код:
win32 {
        !win32-borland : LIBS *= gds32_ms.lib
        win32-borland  : LIBS += gds32_bor.lib

Мой файл pri.
Код:
contains(sql-drivers, all ) {
    sql-driver +=   psql mysql odbc oci tds db2 sqlite ibase
}

contains(sql-drivers, psql) {
    HEADERS +=      drivers/psql/qsql_psql.h
    SOURCES +=      drivers/psql/qsql_psql.cpp

    unix {
        !isEmpty(QT_LFLAGS_PSQL) {
            LIBS *= $$QT_LFLAGS_PSQL
            QMAKE_CXXFLAGS *= $$QT_CFLAGS_PSQL
        }
        !contains(LIBS, .*pq.*):LIBS *= -lpq
    }

    win32 {
!win32-g++:!contains( LIBS, .*pq.* ):LIBS *= -llibpq
     win32-g++:!contains( LIBS, .*pq.* ):LIBS *= -lpq
        LIBS *= -lws2_32 -ladvapi32
    }
}

contains(sql-drivers, mysql) {
    HEADERS +=      drivers/mysql/qsql_mysql.h
    SOURCES +=      drivers/mysql/qsql_mysql.cpp

    unix {
        isEmpty(QT_LFLAGS_MYSQL) {
            !contains(LIBS, .*mysqlclient.*):!contains(LIBS, .*mysqld.*) {
                use_libmysqlclient_r:LIBS *= -lmysqlclient_r
                else:LIBS *= -lmysqlclient
            }
        } else {
            LIBS *= $$QT_LFLAGS_MYSQL
            QMAKE_CXXFLAGS *= $$QT_CFLAGS_MYSQL
        }
    }

    win32:!contains(LIBS, .*mysql.*):!contains(LIBS, .*mysqld.*) {
        !win32-g++:LIBS     *= -llibmysql    
win32-g++:LIBS    *= -lmysql
    }    
}

contains(sql-drivers, odbc) {
     HEADERS += drivers/odbc/qsql_odbc.h
     SOURCES += drivers/odbc/qsql_odbc.cpp

     mac:!contains( LIBS, .*odbc.* ):LIBS        *= -liodbc
     unix:!contains( LIBS, .*odbc.* ):LIBS       *= -lodbc

     win32 {
         !win32-borland:LIBS     *= -lodbc32
         win32-borland:LIBS      *= $(BCB)/lib/PSDK/odbc32.lib
     }
}

contains(sql-drivers, oci) {
    HEADERS += drivers/oci/qsql_oci.h
    SOURCES += drivers/oci/qsql_oci.cpp

    unix:!contains( LIBS, .*clnts.* ):LIBS += -lclntsh

    win32:LIBS += -loci
}

contains(sql-drivers, tds) {
    HEADERS += drivers/tds/qsql_tds.h
    SOURCES += drivers/tds/qsql_tds.cpp

    unix:LIBS += -L$SYBASE/lib -lsybdb

    win32 {
        !win32-borland:LIBS += -lNTWDBLIB
        win32-borland:LIBS += $(BCB)/lib/PSDK/NTWDBLIB.LIB
    }
}

contains(sql-drivers, db2) {
    HEADERS += drivers/db2/qsql_db2.h
    SOURCES += drivers/db2/qsql_db2.cpp
    
    unix:LIBS += -ldb2
    
    win32 {
        !win32-borland:LIBS += -ldb2cli
#        win32-borland:LIBS  += $(BCB)/lib/PSDK/db2cli.lib
    }
}

contains(sql-drivers, ibase) {
    HEADERS += drivers/ibase/qsql_ibase.h
    SOURCES += drivers/ibase/qsql_ibase.cpp
    
    unix:LIBS *= -lgds  
    
    win32 {
        !win32-borland:LIBS *= -lgds32_ms
        win32-borland:LIBS  += gds32.lib
    }
}

contains(sql-drivers, sqlite2) {
    HEADERS += drivers/sqlite2/qsql_sqlite2.h
    SOURCES += drivers/sqlite2/qsql_sqlite2.cpp
    !contains(LIBS, .*sqlite.*):LIBS *= -lsqlite
}

contains(sql-drivers, sqlite) {
    !system-sqlite:!contains( LIBS, .*sqlite3.* ) {
        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
    }

    HEADERS +=      drivers/sqlite/qsql_sqlite.h
    SOURCES +=      drivers/sqlite/qsql_sqlite.cpp
}


Может проще собрать mySQL?
Записан
Astrologer
Гость
« Ответ #3 : Сентябрь 30, 2010, 16:18 »

Код:
 QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    if (!QFile::exists(dbFile)) return;
    db.setDatabaseName(dbFile);
        if (!db.open()) {
            QMessageBox::critical(0, qApp->tr("Cannot open database"),
                qApp->tr("Unable to establish a database connection.\n"
                         "This example needs SQLite support. Please read "
                         "the Qt SQL driver documentation for information how "
                         "to build it.\n\n"
                         "Click Cancel to exit."), QMessageBox::Cancel);
        }

        _base_is_open = true;

Нормально проходит. Ничего не делал, только скопировал в корень экзешника папку "sqldrivers" и туда закинул "libmysql.dll".  В списке драйверов(QSqlDatabase::drivers()) - нету QMYSQL. Что то по моему тут неправильно.
Записан
vipet
Бывалый
*****
Offline Offline

Сообщений: 452


Просмотр профиля
« Ответ #4 : Сентябрь 30, 2010, 16:28 »

Работал на SQlite  и понял что она мне не подходит. Прочитал форум но некоторые вещи мне непонятны.
1) Хочу собрать FireBird так чтобы можно было просто скопировать необходимые файлы (в папку с exe)  и работать с ним (в случае переноса на другую машину). Это называется статическая линковка?

http://www.prog.org.ru/topic_1983_0.html

Что такой статически скомпонованный драйвер? Один файл, при закидывании которого все работает? Улыбающийся

Для того, чтобы просто все скопировать в папку с .exe-шником твоей проги, не нужно собирать файрбёрд. Скачиваешь .zip c Firebird Embedded и раcпаковываешь архив в ту папку. Всё.

Статическая линковка - это если хочешь, чтобы кроме твоего exe-шника больше никаких dll-ек не нужно было. Но тогда и MS CRT надо статически линковать (есть статься на wiki про это).

Потом сам Firebird Embedded, если мне не изменяет память слинкован с MS CRT от 2005 студии, т.е. в этом случае его нужно видимо пересобрать.

Короче, если без гемора, то скопируй fbembed.dll и другие dll-ки и файлы из его архива в папку с .exe-шником и не парься.
Записан
Astrologer
Гость
« Ответ #5 : Сентябрь 30, 2010, 16:54 »

И как же указать QSqlDatabase что надо именно firebird загружать?
Записан
Jo
Гость
« Ответ #6 : Сентябрь 30, 2010, 17:10 »

1. Скопировать fbclient_ms.lib из D:\Firebird\Firebird_2_1\lib и переименовал в fbclient.lib в папку проекта D:\Qt\4.6.0\src\plugins\sqldrivers\ibase\

2. Затем открыть проект (я использовал QtCreator) D:\Qt\4.6.0\src\plugins\sqldrivers\ibase\ibase.pro

3. В конфигурации пректа в разделе этапы сборки в дополнительных параметрах указал такую строчку: -o Makefile INCLUDEPATH+=D:\Firebird\Firebird_2_1\include LIBS+=-lfbclient

4. Собрать в режиме дебаг и релиз

В результате вышеописанных действий в папке D:\Qt\4.6.0\plugins\sqldrivers появились нужные файлы qsqlibase4.* и qsqlibased4.*

собственно драйвер есть...

Дальше при использовании embedded  версии fb необходимо переименовать файл fbembed.dll в fbclient.dll и положить в папку с .exe файлом. (ну и в папку с проектом тоже можешь запулить)

QSqlDatabase db = QSqlDatabase::addDatabase("QIBASE");
и погнал.


P.S. Пути естественно исправь на свои. Должно получиться. Удачи!
Записан
Astrologer
Гость
« Ответ #7 : Сентябрь 30, 2010, 20:06 »

Спасибо тебе большое! Все очень подробно.
Дошел до открытия проекта.
Код:
C:/Qt/2010.02.1/qt/src/plugins/sqldrivers/ibase/../../../sql/drivers/ibase/qsql_ibase.h:48: error: ibase.h: No such file or directory

Ругается.

Код:
C:/Qt/2010.02.1/qt/src/sql/drivers/ibase/qsql_ibase.h:87: error: expected ')' before 'connection'

на строку в файле qsql_ibase.h
Код:
explicit QIBaseDriver(isc_db_handle connection, QObject *parent = 0);
« Последнее редактирование: Сентябрь 30, 2010, 20:19 от Astrologer » Записан
crossly
Гость
« Ответ #8 : Сентябрь 30, 2010, 20:50 »

не хватает заголовочных файлов firebird
Записан
Astrologer
Гость
« Ответ #9 : Сентябрь 30, 2010, 20:56 »

В Qt Creator вписал такую строчку (по кнопке "Подробнее" в строку "Параметры Make"):

-o Makefile INCLUDEPATH+=C:\Firebird\Firebird_2_1\include LIBS+=-lfbclient

Он не шерстит по директории include, там ведь и лежат хидеры?
Записан
crossly
Гость
« Ответ #10 : Сентябрь 30, 2010, 20:58 »

ну вам же должно быть виднее лежат они там или нет.... посмотрите...
Записан
Astrologer
Гость
« Ответ #11 : Сентябрь 30, 2010, 20:59 »

А вообще взял я из папки firebird все дллки из папки bin и кинул в корень exe  и в папку /sqldrivers.

Код:
 QSqlDatabase dbs = QSqlDatabase::addDatabase("QIBASE");
    dbs.setDatabaseName("myBase.db");
    bool _is_open = dbs.open();
    QStringList drList = dbs.drivers();

_is_open = false;
drList не содержит QIBASE.
Записан
crossly
Гость
« Ответ #12 : Сентябрь 30, 2010, 21:02 »

и на кой черт вы их туда кинули... ?? в папке sqldrivers есть sqlibase4.* и qsqlibased4.* ??
Записан
Astrologer
Гость
« Ответ #13 : Сентябрь 30, 2010, 21:04 »

Та папка лежит в корневой моего exe.
Записан
Astrologer
Гость
« Ответ #14 : Сентябрь 30, 2010, 21:07 »

ну вам же должно быть виднее лежат они там или нет.... посмотрите...

Лежат. Но ведь все равно ругается.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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