「11.Lazarus数据库编程」3.Lazarus和FireBird

「11.Lazarus数据库编程」3.Lazarus和FireBird

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 嵌入式数据库,我会专门安排一个章节来讲解。

郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
(0)
用户投稿
上一篇 2022年6月12日
下一篇 2022年6月12日

相关推荐

  • 智能门锁、充电器均有安全风险,联想GIC全球安全实验室如何解决?

    记者 | 崔鹏 编辑 | 2022年6月16日下午,联想GIC全球安全实验室正式对外露面,对外介绍联想在产品全生命周期安全保护、数据安全与隐私保护和产品安全防御体系等方面的部分进展…

    2022年6月20日
  • 变革中的政务云

    当前,政务云市场发展如火如荼。 2022年6月,赛迪顾问发布的《2021-2022年中国政务云市场研究年度报告》(以下简称《报告》)指出,得益于数字政府建设持续推进,以及疫情防控常…

    2022年6月24日
  • MySQL 事务的默认隔离级别是什么?可以解决幻读问题么?

    何谓事务? 我们设想一个场景,这个场景中我们需要插入多条相关联的数据到数据库,不幸的是,这个过程可能会遇到下面这些问题: 数据库中途突然因为某些原因挂掉了。 客户端突然因为网络原因…

    2022年6月15日
  • 100个练手的Python小项目,希望对各位小伙伴有帮助

    学习 Python 会有这么一个阶段,太简单的程序看不上眼,复杂的开源项目又有点力不从心,所以,这个时候需要接触点简单的 Python 小项目来提升 Python 技能,同时提升自…

    2022年7月5日
  • javabean封装的使用

    /** * 测试javabean 封装的使用 */ public class D1 { private int id; private String name; private b…

    2022年6月28日
  • 外媒关注:中国规范支付平台监管工作

    美国《华尔街日报》网站6月23日报道,中国领导层在最近的一次高级别会议上审议通过了一项旨在规范和健全支付与金融科技平台监管规则的工作方案(即《强化大型支付平台企业监管促进支付和金融…

    2022年6月26日
  • 同样是五冠超级巨星,科比和邓肯谁强?9项数据对比,差距太明显

    同样是五冠超级巨星,科比和邓肯谁强?9项数据对比,差距太明显 历史地位,科比和邓肯就不在一个层面上。毕竟历史地位大家都进入了一个误区,它不仅仅是简单的比数据,比荣誉。更要比他们对n…

    2022年7月24日
  • 暴雪询问守望先锋玩家是否愿意为皮肤支付 45 美元

    今年晚些时候《守望先锋 2 》的推出,那些包含随机物品的战利品箱可能会成为过去,但最近的一项调查表明,英雄射击游戏的氪金可能会突出在其他地方。 据悉,《守望先锋 2》的游戏内商店可…

    2022年8月13日
  • 工行融e借有额度秒拒什么原因 看看你中了几个

    融e借属于工行旗下的个人信用贷款产品,在市场受到了很多借贷人的追捧,但有的网友在使用过程总会遇到不同的问题,那么工行融e借有额度秒拒什么原因呢?下面来看分析。 1、个人征信不良 如…

    2022年9月7日
  • 频繁网贷被拒急需用钱怎么办 可以这样来筹集资金

    网贷被拒情况在现在不是什么新鲜事情了,因为贷款都要符合条件的,如果借款人负债过高,或者征信不良好等等都会导致的,那么频繁网贷被拒急需用钱怎么办?下面来看解决方法。 1、找民间借贷。…

    2022年9月5日

联系我们

联系邮箱:admin#wlmqw.com
工作时间:周一至周五,10:30-18:30,节假日休息