Russian Qt Forum

Qt => Базы данных => Тема начата: Jkc от Октябрь 07, 2005, 17:37



Название: Доступ к базе Firebird без запущеного сервера.
Отправлено: Jkc от Октябрь 07, 2005, 17:37
Как можно осуществить доступ к базе данных Firebird без запущеного сервера? Я слышал что базу Firebird можно использовать напрямую без сервера, нужно только поместить fbembed.dll в папку пректа и можно работать с базой без сервера. Если кто знает подскажите.


Название: Доступ к базе Firebird без запущеного сервера.
Отправлено: Rainbow от Октябрь 07, 2005, 18:26
Это тоже что будешь писать свой сервер?


Название: Доступ к базе Firebird без запущеного сервера.
Отправлено: Jkc от Октябрь 10, 2005, 00:25
так как его написать?


Название: Доступ к базе Firebird без запущеного сервера.
Отправлено: Orlov_O от Октябрь 11, 2005, 13:04
юзаю скачанный года 2 назад fembedded.dll, переименнованнй в gds32.dll. В 5ом билдере эта дллка через delay load вшивается прямо в выходной .exe  . В 6м билдере такая фишка не прокатывает, но если положить длл рядом с exe всё работает так же. Дллина эта даёт возможность компонентам IBExpress работать в своё удовольствие без внешнего сервера. В этой dll реализован сам сервер  fb1.5 (она и весит 1.5 метра). Вроде как функции доступа к серверу заменены функциями самого сервера :-)
неудобства: работает мееедлеееннее внешнего сервера, и хз как юзерские аккаунты менять (хотя бы пароль sysdba). Всё остальное пофиг.

А вот как её юзать для qt или чего-нить ещё я хз. :-(
Сейчас как раз хочу одну штуковину пересаживать с vcl на qt а тут такой вот касяк :-(  Чувствую, придётся "интерфейс gds32.dll" ковырять :-(

хееелп ми


Название: Доступ к базе Firebird без запущеного сервера.
Отправлено: Jkc от Октябрь 12, 2005, 18:39
Не могли бы вы выслать мне этот фаил.
civ@ua.fm


Название: Доступ к базе Firebird без запущеного сервера.
Отправлено: Jkc от Октябрь 13, 2005, 02:07
Нашел фаил fbembed.dll переместил в папку пректа и  переименовал на gds32.dll но безуспешно.
что я не так делаю?
Код:

#define DRIVER       "QIBASE"  /* see the Qt SQL documentation for a list of available drivers */
#define DATABASE     "E:\\\\bases\\TEST.FDB" /* the name of your database */
#define USER         "SYSDBA"   /* user name with appropriate rights */
#define PASSWORD     "masterkey"   /* password for USER */
//#define HOST         "localhost" /* host on which the database is running */  //  host пробовал с хостом и без

...............................
...............................

 QSqlDatabase * db = QSqlDatabase::addDatabase( DRIVER );
    db->setDatabaseName( DATABASE );
    db->setUserName( USER );
    db->setPassword( PASSWORD );
 //  db->setHostName( HOST );


Название: Доступ к базе Firebird без запущеного сервера.
Отправлено: Racheengel от Октябрь 13, 2005, 09:39
А как ты драйвер базы данных подгружаешь? И какой?  :?:


Название: Доступ к базе Firebird без запущеного сервера.
Отправлено: Jkc от Октябрь 13, 2005, 23:10
В папке sqldrivers  сгенерировались следующие файлы
qsqlibase.dll
qsqlibase.exp
qsqlibase.lib
для генерации я использовал либы Firebird a.


Название: Re: Доступ к базе Firebird без запущеного сервера.
Отправлено: ya_aalex от Ноябрь 17, 2011, 10:09
Для работы с FireBird без запущенного сервера необходимо использовать Embedded версию программы, для для сборки плагина и его совмещения с Qt необходимо проделать следующее:

Сборка библиотеки в Qt 2010.05.
1) Скачаваем с официального сайта FireBird версии сервера Superclassic / Classic и Embedded (лучше в архивах, иначе придётся устанавливать).
2) Распаковываем архив сервер Classic в папку, например - "C:\FB".
3) Заходим в папку с исходниками через консоль cmd:
"cd C:\Qt\2010.05\qt\src\plugins\sqldrivers\ibase"
В QtSDK iBase находится в папке - "C:\QtSDK\QtSources\...".
4) Выполняем команду:
(лучше перед этим добавить в "Система"->"Дополнительные парметры системы"->""Переменные среды"->"Системные переменные"->"Path" строчку ";C:\Qt\2010.05\qt\bin;C:\Qt\2010.05\mingw\bin")
"qmake "INCLUDEPATH+=C:/FB/include" "LIBS+=C:/FB/lib/fbclient_ms.lib" ibase.pro"
5) Выполняем команду:
"mingw32-make.exe all"
 ("C:\Qt\2010.05\mingw\bin\mingw32-make.exe all")
6) После удачной сборки, библиотеки(qsqlibase4.dll, qsqlibased4.dll, libqsqlibase4.a,  libqsqlibased4.a) сами
перепишутся в папку "C:\Qt\2010.05\qt\plugins\sqldrivers". С их помощью можно работать при условии что есть FireBird Server(установлен на этой машине или на какой-то другой(по сети)).
В QtSDK библиотеки должны лежать в папке - "C:\QtSDK\Desktop\Qt\4.7.4\mingw\plugins\sqldrivers" для того чтобы сам Qt их мог найти.
Для работы самой программы нужна одна из библиотек, в зависимости от того debug или release - qsqlibased4.dll или qsqlibase4.dll.
Библиотека должна лежать в папке "sqldrivers" созданной рядом с exe. Например exe файл у нас лежит
в папке "C:\Qt\2010.05\Test" - тогда библиотека "qsqlibased4.dll" должна быть в "C:\Qt\2010.05\Test\sqldrivers".
Если мы хотим просто работать с сервером FireBird, то к exe файлу нужно положить библиотеку "fbclient.dll" из нашей папки "C:\FB".
7) Далее нам нужно сделать что бы мы могли работать без установленного FireBird Server-а. Распаковываем Embedded куда либо.
8 ) В распакованной папки Embedded переименовываем "fbembed.dll" в "fbclient.dll".
9) Переписываем наш переименованный файл "fbclient.dll" к exe файлу(заменяем если мы туда складывали обычный "fbclient.dll").
10) Туда же складываем из каталога Embedded файлы: firebird.msg, ib_util.dll, все файлы начинающиеся с icu*, каталог intl, каталог udf.
11) Как было написано в одной инструкции если планируете использовать псевдонимы для доступа к БД, то потребуется файл aliases.conf, а если вам потребуется указать специфичные настройки БД (например, местоположение БД), то не забудьте добавить и файл firebird.conf.
12) Как было написано в той же инструкции: в FireBird Embedded уровень доступа не проверяется, к БД может подключаться любой, кто имеет физический доступ к файлу БД. Доступ к БД осуществляется по локальному протоколу, т.е. вместо указания имени хоста (localhost etc.) необходимо указывать местоположение файла БД.
Подключенный клиент блокирует файл БД, т.е. одновременно с БД может работать только один пользователь (правда встраиваемые решения редко разрабатываются как многопользовательские).
13) Что бы не получить Сообщение с ошибкой "Unable to complete network request to host..." в исходном коде не нужно указывать HostName("setHostName").

Примерчик кода:   
    QSqlDatabase db = QSqlDatabase::addDatabase("QIBASE");
    ui->comboBox->addItems(db.drivers());
    db.setDatabaseName("STAND.FDB");
    db.setUserName("SYSDBA");
    db.setPassword("masterkey");
    if ( !db.open() ) {
            QSqlError er = db.lastError();
            QMessageBox::information(0, "Error", er.text());
    }

Ссылка на страницу с которой была взята некоторая информация: "http://codedchaos.blogspot.com/2011/07/qt-qibase-qt-firebird-embedded.html".

fbembed.dll включает в себя клиент и сервер Firebird Super Server.
firebird.msg файл содержит сообщения сервера (в основном об ошибках).
Каталог "intl" - файлы gdsintl.dll, fbintl.dll с альтернативными наборами кодировок.
Каталог "udf" (User Defined Functions) - используется для запросов или косвенно в триггерах и процедурах базы данных
ib_util.dll определяет какие библиотеки следует использовать для аллокации блоков памяти, набор полезных UDF.
icu* - что то для работы с многопоточностью


Название: Re: Доступ к базе Firebird без запущеного сервера.
Отправлено: panAlexey от Ноябрь 17, 2011, 11:06
Для работы с FireBird без запущенного сервера необходимо использовать Embedded версию программы, для для сборки плагина и его совмещения с Qt необходимо проделать следующее:
спасибо.


Название: Re: Доступ к базе Firebird без запущеного сервера.
Отправлено: ya_aalex от Март 29, 2012, 10:45
А под linux без запущенного сервера никто работать не пробовал?
С сервером вот так:
//Скачиваем и распаковываем server.
"/home/user/qtsdk-2010.05/qt/bin/qmake "INCLUDEPATH+=/home/user/Загрузки/FirebirdCS-2.5.1.26351-0.i686/buildroot/opt/firebird/include" "LIBS+=/home/user/Загрузки/FirebirdCS-2.5.1.26351-0.i686/buildroot/opt/firebird/lib/libfbclient.so" ibase.pro"
"make all"
"make install"
//устанавливаем сам сервер
"apt-get install firebird2.5-super" (sudo apt-g...)
//настраиваем сервер
"dpkg-reconfigure firebird2.5-super" (sudo dpkg-....)
там ввести: "masterkey"
//устанавливаем права на файл базы
"chmod 666 CRITIC.FDB" (sudo chmod ...)
//запускаем сервер, если не запущен
"/etc/init.d/firebird2.5-super start" (sudo /et...)