QT5.15.2版本编译Firebird数据库

文章介绍了如何在QT环境下编译Firebird嵌入式数据库驱动,包括从官网下载所需文件,修改QT项目的配置文件,如ibase.pro和qsqldriverbase.pri,然后进行编译生成dll文件。同时,文章提供了测试连接Firebird数据库的代码示例,以及针对不同操作系统编译QIBASE插件的方法。
摘要由CSDN通过智能技术生成

FireBird简介

Firebird是典型的嵌入式数据库。所谓嵌入式数据库,简单地说就是不需要单独数据库服务器安装配置,只需要在应用软件中加入客户端接口就可以直接把一个文件当做数据库存取。

编译方法1

1、从官网(https://firebirdsql.org/en/server-packages/)或(https://sourceforge.net/projects/firebird/files/)下载相同版本的普通版及embed版本的FireBird数据库压缩包。此处以Firebird-2.5.9.27139-0_x64_pdb&Firebird-2.5.9.27139-0_x64_embed_pdb为例。

2、在qt的安装目录找到ibase.pro文件,修改ibase.pro为下例所示:

TARGET = qsqlibase

HEADERS += D:/Qt/5.15.2/Src/qtbase/src/plugins/sqldrivers/ibase/qsql_ibase_p.h
SOURCES += D:/Qt/5.15.2/Src/qtbase/src/plugins/sqldrivers/ibase/qsql_ibase.cpp D:/Qt/5.15.2/Src/qtbase/src/plugins/sqldrivers/ibase/main.cpp

INCLUDEPATH += "D:/Firebird-2.5.9.27139-0_x64_pdb/include"
LIBS += "D:/Firebird-2.5.9.27139-0_x64_pdb/lib/fbclient_ms.lib"

# FIXME: ignores libfb (unix)/fbclient (win32) - but that's for the test anyway
#QMAKE_USE += ibase

OTHER_FILES += ibase.json

PLUGIN_CLASS_NAME = QIBaseDriverPlugin
include(../qsqldriverbase.pri)

3、修改qsqldriverbase.pri中的内容如下所示:

QT  = core core-private sql-private

# For QMAKE_USE in the parent projects.
include(./configure.pri)

PLUGIN_TYPE = sqldrivers
load(qt_plugin)

DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII

4、修改完使用qt-creator直接进行编译,则会在D:\plugins\sqldrivers中生成相关的数据库dll,拷贝qsqlibase.dll和qsqlibased.dll两个数据库至数据库安装目录D:\Qt\5.15.2\msvc2019_64\plugins\sqldrivers。

5、拷贝embed版中的fbembed.dll、icuin30.dll、icudt30.dll、icuuc30.dll至执行程序目录,并将fbembed.dll更名为fbclient.dll。

测试连接代码如下:

void Dialog::on_pushButton_clicked()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QIBASE");
        db.setUserName("SYSDBA");
        db.setPassword("masterkey");
        db.setDatabaseName("D:/prj.fdb");
        if (db.open())
        {
            QString strSql = QString("select user_name, user_pwd from project_users where level_num = 0;");
            QSqlQuery query;
            query.exec(strSql);
            while (query.next()) {
                QString name = query.value("user_name").toString().trimmed();
                QString pwd = query.value("user_pwd").toString().trimmed();
                qDebug() << name <<  pwd;
            }
            db.close();
        } else {
            qDebug() << "Failed to connect to Firebird database:" << db.lastError().text();
        }
}

编译方法2

1、查看QT帮助文档,可知道数据库驱动编译相关介绍

How to Build the QIBASE Plugin on Unix and macOS
The following assumes InterBase or Firebird is installed in /opt/interbase:

If you are using InterBase:
 cd $QTDIR/qtbase/src/plugins/sqldrivers
 qmake -- IBASE_PREFIX=/opt/interbase
 make sub-ibase
 
If you are using Firebird, the Firebird library has to be set explicitly:
 cd $QTDIR/qtbase/src/plugins/sqldrivers
 qmake -- IBASE_PREFIX=/opt/interbase IBASE_LIBS=-lfbclient
 make sub-ibase 
How to Build the QIBASE Plugin on Windows
The following assumes InterBase or Firebird is installed in C:\interbase:

If you are using InterBase:
 cd %QTDIR%\qtbase\src\plugins\sqldrivers
 qmake -- IBASE_INCDIR=C:/interbase/include
 nmake sub-ibase
 nmake install
 
If you are using Firebird, the Firebird library has to be set explicitly:
 cd %QTDIR%\qtbase\src\plugins\sqldrivers
 qmake -- IBASE_INCDIR=C:/interbase/include IBASE_LIBS=-lfbclient
 nmake sub-ibase
 nmake install
If you are not using a Microsoft compiler, replace nmake with mingw32-make in the line above.
Note that C:\interbase\bin must be in the PATH. 

2、根据最后一段描述,首先打开命令窗口

cd %QTDIR%\qtbase\src\plugins\sqldrivers
qmake INCLUDEPATH+="D:/Firebird-2.5.9.27139-0_x64_pdb/include" LIBS+="D:/DCS_contrib/Firebird-2.5.9.27139-0_x64_pdb/lib/fbclient_ms.lib" ibase.pro

即可在数据库驱动目录生成相应的ibase数据库驱动动态库。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在进行 Qt 5.15.2 的交叉编译时,你可以使用以下方法来裁剪: 1. 配置 Qt 编译选项: 在运行 `configure` 脚本时,可以使用一些选项来裁剪 Qt 的功能和模块。以下是一些常用的选项: - `-skip <module>`:跳过某个模块的编译,可以使用多个 `-skip` 选项来跳过多个模块。例如:`-skip qtscript -skip qtwebengine`。 - `-feature-<feature>`:禁用某个功能特性,可以使用多个 `-feature` 选项来禁用多个特性。例如:`-feature-<feature>`。 - `-no-<module>`:不编译某个模块,可以使用多个 `-no` 选项来禁用多个模块。例如:`-no-qtwebengine -no-qt3d`。 你可以根据你的需求使用这些选项来裁剪 Qt 编译。 2. 使用 Qt 模块分离工具: Qt 提供了一个名为 `qconfig` 的工具,用于分离 Qt 模块并将它们打包成单独的动态库文件。你可以使用这个工具来裁剪 Qt,并只包含你需要的模块。这样可以减小最终生成的可执行文件的大小。 你可以在交叉编译完成后,使用以下命令来分离 Qt 模块: ``` qconfig <path_to_qmake> -o <output_dir> -prefix <prefix_dir> ``` 其中,`<path_to_qmake>` 是交叉编译完成后的 Qt 安装目录中的 `qmake` 可执行文件路径,`<output_dir>` 是输出目录,用于存放分离后的模块文件,`<prefix_dir>` 是 Qt 安装目录,用于指定 Qt 的安装路径。 分离完成后,你可以将 `<output_dir>` 中的模块文件拷贝到目标设备上,并设置好相应的运行时环境变量,让程序能够正确加载这些模块。 这些方法可以帮助你在交叉编译 Qt 5.15.2 时进行裁剪。根据你的需求,选择适合的方式来裁剪你需要的功能和模块。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值