Russian Qt Forum

Qt => Базы данных => Тема начата: echo от Апрель 25, 2008, 08:33



Название: Как скомпилировать драйвер Firebird&
Отправлено: echo от Апрель 25, 2008, 08:33
Имеется qt-win-opensource-src-4.2.3, MSVC2005, acs-4.2.3-patch1, qt-vsintegration-1.2.2.
Устанвливал qconfigure msvc2005 потом nmake.

Имеется текст программы которая работает с sqlite:

Код:
#include <QtSql>
static bool createConnection()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("addressbook");

    db.setUserName("elton");
    db.setHostName("epica");
    db.setPassword("password");
    if (!db.open()) {
        qDebug() << "Cannot open database:" << db.lastError();
        return false;
    }
    return true;
}

// ----------------------------------------------------------------------
int main(int argc, char** argv)
{
    QCoreApplication app(argc, argv);

    if (!createConnection()) {
        return -1;
    }
   
    //Creating of the data base
    QSqlQuery query;
    QString   str  = "CREATE TABLE addressbook ( "
                         "number INTEGER PRIMARY KEY NOT NULL, "
                         "name   VARCHAR(15), "
                         "phone  VARCHAR(12), "
                         "email  VARCHAR(15) "
                     ");";

    if (!query.exec(str)) {
        qDebug() << "Unable to create a table";
    }

    //Adding some information
    QString strF =
          "INSERT INTO  addressbook (number, name, phone, email) "
          "VALUES(%1, '%2', '%3', '%4');";

    str = strF.arg("1")
              .arg("Piggy")
              .arg("+49 631322187")
              .arg("piggy@mega.de");
    if (!query.exec(str)) {
        qDebug() << "Unable to do insert opeation";
    }

    str = strF.arg("2")
              .arg("Kermit")
              .arg("+49 631322181")
              .arg("kermit@mega.de");
    if (!query.exec(str)) {
        qDebug() << "Unable to do insert operation";
    }

    if (!query.exec("SELECT * FROM addressbook;")) {
        qDebug() << "Unable to execute query - exiting";
        return 1;
    }

    //Reading of the data
    QSqlRecord rec     = query.record();
    int        nNumber = 0;
    QString    strName;
    QString    strPhone;
    QString    strEmail;

    while (query.next()) {
        nNumber  = query.value(rec.indexOf("number")).toInt();
        strName  = query.value(rec.indexOf("name")).toString();
        strPhone = query.value(rec.indexOf("phone")).toString();
        strEmail = query.value(rec.indexOf("email")).toString();
   
        qDebug() << nNumber << " " << strName << ";\t"
                 << strPhone << ";\t" << strEmail;
    }

    return 0;
}

Как скомпилировать драйвер qibase (описать как можно подробней) и как подправит программу чтоб она работала с огнептицей???

Пользуемся тегами КОД!
 


Название: Re: Как скомпилировать драйвер Firebird&
Отправлено: BaltikS от Апрель 25, 2008, 12:29
Да скомпилировать просто, указываешь пути в переменных окружения include и lib на пути FireBird  и в путь...
У меня другой вопрос... Юзаю Файербёд 1 и 1.5 драйвер собрался и работает. Ну криво работает! Все надписи на русском, всё нормально. Но проблемма в следующем, что данные из таблиц выдаются не все, а из некоторых - вообще ничего не возвращается. Кто сталкивался с подобной проблеммой, подскажите...как быть?


Название: Re: Как скомпилировать драйвер Firebird&
Отправлено: crossly от Апрель 25, 2008, 17:42
Код:
qmake "INCLUDEPATH+=<путь к fb>\include" "LIBS+=-L<fb path>\lib\firebird_ms\lib" ibase.pro
nmake

по поводу второго вопроса ... проверь в какой кодировке хранятся данные в бд.. и какую использует qt...


Название: Re: Как скомпилировать драйвер Firebird&
Отправлено: ритт от Апрель 25, 2008, 18:24
я пользую огнептиц 2.0 и 2.1 - недовыбранных данных не наблюдал


Название: Re: Как скомпилировать драйвер Firebird&
Отправлено: Вячеслав от Апрель 25, 2008, 21:51
Таки тафай-те ка подробнее ;)
1) чего на базе кажет gstat ?
2) как цепляемся к базе ?
3) Индексы все живы ?
4) тот-же запрос через IBE например - что выдаст ?


Название: Re: Как скомпилировать драйвер Firebird&
Отправлено: Tonal от Апрель 28, 2008, 07:35
2 BaltikS Кстати да, проверь корректность базы.
Или ты с SQL-ем не дружишь, или база убитая. ;)


Название: Re: Как скомпилировать драйвер Firebird&
Отправлено: BaltikS от Апрель 28, 2008, 21:07
Расказываю...
Поставил Огнептиц 1.0, а затем 1.5. С ним же скомпилил дрова... Захожу в стандартный пример SqlBrowser, произвожу коннект. Смотрю таблицы. В таблице где порядка 20000 записей показывается только 3!!!!! Где порядка 300 - 8 записей, где около 30 - все показываются! При этом индексы все в норме. ИБ эксперт всё подгружает нормально, а тут такая засада? Что делать, кто подскажет???


Название: Re: Как скомпилировать драйвер Firebird&
Отправлено: Вячеслав от Апрель 28, 2008, 23:20
Эта .... однако чудес не бывает :(
Какой клиент юзает кутя и какой ibe ?
все-таки че gstat кажет ?


Название: Re: Как скомпилировать драйвер Firebird&
Отправлено: lit-uriy от Апрель 29, 2008, 06:03
записи, которые не показывает Qt'я содержат русский текст?
а записи, которые  показывает?


Название: Re: Как скомпилировать драйвер Firebird&
Отправлено: Tonal от Апрель 29, 2008, 07:02
А FB 1.x ты по каким соображениям используешь?
Вроде уже давно 2.0.х в релизах, а недавно 2.1 вышел.


Название: Re: Как скомпилировать драйвер Firebird&
Отправлено: crossly от Апрель 29, 2008, 21:06
ежели записи на русском языке советую все же поигратся с кодировкой....


Название: Re: Как скомпилировать драйвер Firebird&
Отправлено: BaltikS от Апрель 30, 2008, 07:36
- 1 FireBird использую потому что требование такое заказчика...
- Из за своей неопытности работы на нём я не знаю что такое gstat. Если можно просвятите...
- Кодировка в базе CP1251. И выбираются только русские записи. И среди выбранных тоже русские....
- Пробовал с ODBC- драйвером, вообще ничего не выбирается. Но если убрать кодировку WIN1251, то всё выбирается, но в какой то непонятной мне кодировке....
- с каким клиентом работает ИБЭксперт я не знаю... Со своим наверное видимо...
________________________________________________________________________
У меня вопрос, а если взять FB 2 и SDK и скомпилить драйвер к нему? И клиента его же. Будет ли он работать с FB 1? Я полагаю что должен, чем и займусь после праздников, экспериментами!!!


Название: Re: Как скомпилировать драйвер Firebird&
Отправлено: Alex03 от Апрель 30, 2008, 08:14
Может отсюда (http://www.ibase.ru/devinfo/ibrusfaq.htm) чего полезного вычитаете.
Помимо кодировки БД (всей и отдельных полей) ещё бывает кодировка клиента, т.е. клиент преобразовывает данные БД в указанную ему кодировку.
Когдато была у меня проблема... Не помню в какой комбинации, но в одном месте размер полей считался в символах, в другом в байтах, что для кодировки UTF-8 (UNICODE_FSS) не является правильным...

Если у Вас чёнить типа
Код:
select ID from table
выполняется нормально то дело в кодировках и т.д.


Название: Re: Как скомпилировать драйвер Firebird&
Отправлено: Tonal от Апрель 30, 2008, 09:31
Клиент от FB2 с 1-кой работать будет, причём даже несколько быстрее. :)
IBExpert писан на delphi и работает через Fib+.
У меня проблем с кодировками не было, хотя базы тоже в win1251 были.

Кстати, Qt 4.2.3 - это тоже требования заказчика?
Сейчас вышел редиз 4.4.0.
Предыдущий релиз 4.3.4
Начиная с 4.3.2 MSVC поддерживается в Open Source версии.
Если мне склероз не изменяет, как-то недавно троли правили свой драйвер Interbase/Firebird как раз относительно Firebird-а.
Так что есть резон обновить версию. :)


Название: Re: Как скомпилировать драйвер Firebird&
Отправлено: Вячеслав от Апрель 30, 2008, 15:48
- 1 FireBird использую потому что требование такое заказчика...
- Из за своей неопытности работы на нём я не знаю что такое gstat. Если можно просвятите...
- Кодировка в базе CP1251. И выбираются только русские записи. И среди выбранных тоже русские....
- Пробовал с ODBC- драйвером, вообще ничего не выбирается. Но если убрать кодировку WIN1251, то всё выбирается, но в какой то непонятной мне кодировке....
- с каким клиентом работает ИБЭксперт я не знаю... Со своим наверное видимо...
________________________________________________________________________
У меня вопрос, а если взять FB 2 и SDK и скомпилить драйвер к нему? И клиента его же. Будет ли он работать с FB 1? Я полагаю что должен, чем и займусь после праздников, экспериментами!!!
1) именно 1? а не 1.5x ??
2) утилитка идет вместе с птицем и показывает состояние базы
3) ODBC - нафиг лучше RTFM асистента
Цитировать
QIBASE Unicode Support and Text Encoding
By default the driver connects to the database using UNICODE_FSS. This can be overridden by setting the ISC_DPB_LC_CTYPE parameter with QSqlDatabase::setConnectOptions() before opening the connection.
    // connect to database using the Latin-1 character set
    db.setConnectOptions("ISC_DPB_LC_CTYPE=Latin1");
    db.open();
соответственно пихать то, в чем реально база ....
4) про клиента от 2 Tonal уже сказал


Название: Re: Как скомпилировать драйвер Firebird&
Отправлено: lit-uriy от Май 01, 2008, 09:19
- 1 FireBird использую потому что требование такое заказчика...
- Из за своей неопытности работы на нём я не знаю что такое gstat. Если можно просвятите...
- Кодировка в базе CP1251. И выбираются только русские записи. И среди выбранных тоже русские....
- Пробовал с ODBC- драйвером, вообще ничего не выбирается. Но если убрать кодировку WIN1251, то всё выбирается, но в какой то непонятной мне кодировке....
- с каким клиентом работает ИБЭксперт я не знаю... Со своим наверное видимо...
________________________________________________________________________
У меня вопрос, а если взять FB 2 и SDK и скомпилить драйвер к нему? И клиента его же. Будет ли он работать с FB 1? Я полагаю что должен, чем и займусь после праздников, экспериментами!!!
у меня была похожая проблема но я через ODBC работал и FB2 был, текст программы писал в UTF-8 и кодеки ставил все в  эту кодировку, а победил проблему так:
Код:
	QApplication app(argc, argv);
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));//
    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8")); // Для функций перевода tr()
т.е. текст программы по прежнему UTF-8, и соответственно все сообщения в tr() заключаю, а CString в локальной кодировке виндовоза. стало все путем.
хотя механизмов я еще не допонимаю.


Название: Re: Как скомпилировать драйвер Firebird&
Отправлено: crossly от Май 05, 2008, 20:54
механизм простой ... ели у тебя данные хранятся в ср1251 то отбражать их нужно в той же кодировке...  выше укзанны пример это то что тебе надо....


Название: Re: Как скомпилировать драйвер Firebird&
Отправлено: Вячеслав от Май 06, 2008, 09:24
механизм простой ... ели у тебя данные хранятся в ср1251 то отбражать их нужно в той же кодировке...  выше укзанны пример это то что тебе надо....
Как указано выще - делать можно опытным проктологам. Им привычно гланды через ж.... удалять ... Если есть _штатный_ механизм (для 4) нафига огород городить ?

Отображать надо в кодировке нужной пользователю . И нефиг смешивать хранение данных и их отображение - если на клиенте нет CP1251 - ну форточки не европейские /локаль криво стоит /etc - бум кроказябы рисовать ?


Название: Re: Как скомпилировать драйвер Firebird&
Отправлено: lit-uriy от Май 06, 2008, 17:03
Если есть _штатный_ механизм (для 4) нафига огород городить ?
Подскажи что за механизм. И как надо делать?


Название: Re: Как скомпилировать драйвер Firebird&
Отправлено: Вячеслав от Май 06, 2008, 18:24
Если есть _штатный_ механизм (для 4) нафига огород городить ?
Подскажи что за механизм. И как надо делать?
мдя ;)
http://prog.org.ru/forum/index.php/topic,7141.msg35342.html#msg35342 (http://prog.org.ru/forum/index.php/topic,7141.msg35342.html#msg35342)


Название: Re: Как скомпилировать драйвер Firebird&
Отправлено: lit-uriy от Май 07, 2008, 11:21
db.setConnectOptions("ISC_DPB_LC_CTYPE=Latin1");
я так понимаю это справедливо для драйвера QIBASE, а если я через ODBC?
(извиняюсь за торможение, но все же)


Название: Re: Как скомпилировать драйвер Firebird&
Отправлено: Вячеслав от Май 07, 2008, 20:29
вообще-то ,когда создаешь dsn спрашивают про кодировку ДазыБанных ;)


Название: Re: Как скомпилировать драйвер Firebird&
Отправлено: lit-uriy от Май 07, 2008, 21:00
да я в курсе, только я ее менял на виндовозную1251, а толку никакого, т.е. формат ереси меняется и только :(
(тогда у меня Qt4.3.2 стояла, сечас 4.3.4, но уже не пробывал эксперементировать)


Название: Re: Как скомпилировать драйвер Firebird&
Отправлено: BaltikS от Май 21, 2008, 12:08
Поставил 4.4.   Поставил Firebird 2.0 скомпилировал драйвер... Визуально убедился, что появился файл qsqlibase4.dll, но программа его не видит!!! Также убедился что gds32.dll лежит в system32.... Также пробовал fbclent.dll - эффект тот же...драйвер не виден. Компилил VC 2005 .. Что я сделал не так? :)


Название: Re: Как скомпилировать драйвер Firebird&
Отправлено: Tonal от Май 23, 2008, 07:24
Посмотри depend-ом что происходит при загрузке.
Смотреть нужно на стандартном демосе $(QTDIR)\demos\sqlbrowser.

P.S. Поиши по форуму - тема постоянно поднимается.
Да и в ассистенте всё очень подробно описано. :-)


Название: Re: Как скомпилировать драйвер Firebird&
Отправлено: Urvin от Июнь 12, 2008, 00:28
Друзья! помогите и мне!
Никак не могу создать плагин для соединения Firebird 2.1
Трабл в том, что импользую MinGW

Делал как указано в справке:
1. Добавил "C:\Program Files\Firebird\Firebird_2_1\bin" в переменную PATH
2. Перешел в папку "C:\Qt\4.4.0\src\plugins\sqldrivers\ibase"
3. Набрал в qtконсоли
qmake -o Makefile "INCLUDEPATH+=C:\Program Files\Firebird\Firebird_2_1\include" "LIBS+=-lfbclient" ibase.pro
4. Далее идет команда make. И вот что получаю:
Код:
C:\Qt\4.4.0\src\plugins\sqldrivers\ibase>make
mingw32-make -f Makefile.Release
mingw32-make[1]: Entering directory `C:/Qt/4.4.0/src/plugins/sqldrivers/ibase'
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-rel
oc -Wl,-s -mthreads -Wl -shared -Wl,--out-implib,c:\Qt\4.4.0\plugins\sqldrivers\
libqsqlibase4.a -o ..\..\..\..\plugins\sqldrivers\qsqlibase4.dll tmp/obj/release
_shared/main.o tmp/obj/release_shared/qsql_ibase.o tmp/obj/release_shared/moc_qs
ql_ibase.o  -L"c:\Qt\4.4.0\lib" -L"c:\Qt\4.4.0\lib" tmp\obj\release_shared\qsqli
base_resource_res.o -lfbclient -lQtSql4 -lQtCore4
C:\MinGW\bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\mingw32\bin\ld.exe: cannot fin
d -lfbclient
collect2: ld returned 1 exit status
mingw32-make[1]: *** [..\..\..\..\plugins\sqldrivers\qsqlibase4.dll] Error 1
mingw32-make[1]: Leaving directory `C:/Qt/4.4.0/src/plugins/sqldrivers/ibase'
mingw32-make: *** [release] Error 2

Как мне сделать все же нужный плагин?
Спасибо!


Windows XP
Firebird 2.1
Qt 4.4.0
MinGW 3.4.2


Название: Re: Как скомпилировать драйвер Firebird&
Отправлено: Пантер от Июнь 14, 2008, 13:54
В поиск!!! Вопрос неоднократно разжевывался.


Название: Re: Как скомпилировать драйвер Firebird&
Отправлено: crossly от Июнь 19, 2008, 10:50
qmake -o Makefile "INCLUDEPATH+=C:\Program Files\Firebird\Firebird_2_1\include" "LIBS+=-LC:\Program Files\Firebird\Firebird_2_1\lib -lfbclient" ibase.pro

ну и конечно удостоверся что libfbclient.a присутствует в выделеной директории....