3.Lazarus 和 FireBird
Firebird 是一款开源的免费数据库服务器,它是在 Borland 开源的 Interbase 6 数据库基础上开发的,已经使用和开发了几十年。它包括对SQL语句(例如 INSERT…RETURNING )、存储过程、触发器等的丰富支持。如果想扩展 Firebird 已经很广泛的函数列表,可以在 FreePascal 中为服务器编写已编译的UDF(用户定义函数)库。
Firebird 数据库一旦建立,只需要很少的DBA手工工作,非常适合小型企业使用或嵌入式使用。如果进行适当的调整,它可以扩展到TB级,虽然 PostgreSQL 可能是这种大型环境的更好选择。
Firebird 提供嵌入式(基于文件)和客户端服务器数据库,无需更改 FPC/Lazarus 中的一行代码即可使用。如果用作嵌入式数据库,它提供了比 SQLite 更丰富的 SQL 支持,以及到客户机服务器数据库的无缝迁移,尽管 SQLite 本身是一个非常强大的嵌入式数据库。
FPC 的 SQLDB 中对 Firebird 的支持相当好,与 PostgreSQL 的支持水平相当。
3.1Lazarus 连接 FireBird 数据库
在 Lazarus 中,连接 FireBird 数据库所用到的组件为 TIBConnection, 是 Interbase/Firebird 专用连接组件。
同时也会使用到 TSQLTransaction 和 TSQLQuery 组件,这两个组件是 SQLdb 连接所支持的所有数据库都会使用到的两个组件。
TIBConnection 组件的主要属性:
- HostName – FireBird 数据库服务器主机名或 IP 地址
- Port – 端口号
- DatabaseName – 数据库名,数据库服务器上数据库文件的路径
- UserName – 用户名
- Password – 密码
- Connected – 与数据库服务器建立连接
3.2 基本示例
示例:在窗体上展现一张数据表中的数据。数据如下:
create table d_students1 ( student_id varchar(64) primary key, name varchar(16), sex boolean, birthday date, department_id integer, total_score decimal(9,1));INSERT INTO d_students1(student_id, name, sex, birthday, department_id, total_score)VALUES(‘x-20210001’, ‘张三’, true, ‘2000-05-06’, 1, 520);INSERT INTO d_students1(student_id, name, sex, birthday, department_id, total_score)VALUES(‘x-20210002’, ‘李四’, true, ‘2000-03-09’, 1, 539);INSERT INTO d_students1(student_id, name, sex, birthday, department_id, total_score)VALUES(‘x-20210003’, ‘周五’, false, ‘2001-09-10’, 2, 528);INSERT INTO d_students1(student_id, name, sex, birthday, department_id, total_score)VALUES(‘x-20210004’, ‘赵六’, true, ‘2000-08-28’, 1, 517);INSERT INTO d_students1(student_id, name, sex, birthday, department_id, total_score)VALUES(‘x-20210005’, ‘姜七’, false, ‘2000-07-06’, 2, 547);INSERT INTO d_students1(student_id, name, sex, birthday, department_id, total_score)VALUES(‘x-20210006’, ‘贺八’, true, ‘2000-11-01’, 2, 533);
3.2.1 项目与所需组件
首先,创建一个新Lazarus项目。
在组件面板的SQLdb控件页拖拉一个TIBConnection, 一个 TSQLTransaction 和一个 TSQLQuery 组件到窗体。
TIBConnection: 是 Interbase/Firebird 专用连接组件。
TSQLTransaction 和 TSQLQuery: SQLdb 连接所支持的所有数据库都会利用到这两个组件。
显示数据: 利用 Data Controls 页的 TDBGrid 组件。先添加 Data Access 页内一个 TDatasource 控件后才能将 TDBGrid 连接到数据库。
界面设计如下图所示:
3.2.2组件连接关系
连接组件:如果使用对象检查器是非常简单的,也可以使用代码来实现。
1、设置 IBConnection1 的 Transaction 属性指向 SQLTransaction1,这会使得 SQLTransaction1 的 Database 属性自动变更为 IBConnection1;
2、设置 SQLQuery1 的 Database 属性指向 IBConnection1,Lazarus 会自动添加 Transaction 属性值;
3、设置 Datasource1 的 Dataset 属性指向 SQLQuery1;
4、设置 DBGrid1 的 Datasource属性指向 Datasource1。
组件及属性设置:
组件 | 属性 | 值 |
IBConnection1 | Transaction | SQLTransaction1 |
SQLTransaction1 | Database | IBConnection1 |
SQLQuery1 | Database | IBConnection1 |
Transaction | SQLTransaction1 | |
Datasource1 | Dataset | SQLQuery1 |
DBGrid1 | Datasource | Datasource1 |
3.2.3连接到数据库
设置 IBConnection1 的数据库连接属性,如下表:
组件 | 属性 | 值 |
IBConnection1 | HostName | 127.0.0.1 |
Port | 3050 | |
DatabaseName | E:workspace_of_lazarusDEMODB.FDB | |
UserName | SYSDBA | |
Password | *** | |
Connected | True | |
KeepConnection | True | |
SQLTransaction1 | Active | True |
SQLQuery1 | SQL | SELECT * FROM d_students1 |
Active | True | |
DBGrid1 | Align | alClient |
Options | dgRowSelect=True |
运行程序,如下图所示:
3.3 FireBird 嵌入数据库
- Win平台下的Firebird
只要将嵌入式 Firebird 的 fbembed.dll 改名为 C/S 结构 Firebird 所用的 fbclient.dll,Lazarus程序就可以连接 C/S 结构 Firebird(一般是安装在另一台机器上或者是你的开发机上)。
此外,您也可以复制数据库文件到你的应用程序目录,再运行应用程序,既不需安装数据库服务器,也不需要设置,就能使用嵌入式Firebird来直接连接到数据库文件。
这为一类用户带来了极大的方便:想给终端用户部署数据库应用程序,但又不想自找麻烦地去安装服务器,免除了烦琐的部署步骤:如检查是否已经安装了服务器,数据库版本是否是正确,防火墙是否开启等。
- Linux/OSX/Unix平台下的Firebird
Linux/OSX 平台下应该也能够找到方法来进行嵌入式部署。
具体的 FireBird 嵌入式数据库,我会专门安排一个章节来讲解。