2.Delphi数据库应用程序构成2.1客户机-服务器体现结构

服务器-客户机,即Client-Server(C/S)结构。C/S结构通常采取两层结构。服务器负责数据的管理,客户机负责完成与用户的交互任务。

客户机通过局域网与服务器相连,接受用户的请求,并通过网络向服务器提出请求,对数据库进行操作。服务器接受客户机的请求,将数据提交给客户机,客户机将数据进行计算并将结果呈现给用户。服务器还要提供完善的安全保护及对数据完整性的处理等操作,并允许多个客户机同时访问服务器,这就对服务器的硬件处理数据能力提出了很高的要求。

在C/S结构中,应用程序分为两部分:服务器部分和客户机部分。

C/S结构在技术上已经很成熟,它的主要特点是交互性强、具有安全的存取模式、响应速度快、利于处理大量数据。但是C/S结构缺少通用性,系统维护、升级需要重新设计和开发,增加了维护和管理的难度,进一步的数据拓展困难较多,所以C/S结构只限于小型的局域网 。

delphi 创建公共数据模块(2.Delphi数据库应用程序构成)(1)

2.2Delphi数据库应用程序

在 Delphi 中,无论使用什么方式(BDE/ADO等)对数据库进行存取操作,实现起来都比较容易。Delphi 提供了大量的数据库组件,通过使用这些组件来开发数据库应用程序,可以极大地提高编程效率。

由于 BDE 在 Delphi XE8 中已经明确被弃用,本篇以 ADO 组件来说明 Delphi 数据库应用程序的构成。如下图所示:

delphi 创建公共数据模块(2.Delphi数据库应用程序构成)(2)

2.2.1连接组件

不同类型的数据集采用不同的机制与底层数据库通信,在 Delphi 中常用的有 BDE、ODBC 及 ADO 等方式。一般情况下,数据集组件本身也具有用于连接的属性,不通过专门的连接组件也可以访问数据库。

使用专门的数据库连接组件可以使连接管理更加方便和结构化,且可以实现事务处理。

不同的数据集组件使用不同的连接组件来连接数据库服务器,如下表:

数据管理机制

连接组件

BDE(Borland Database Engine)

TDatabase

ADO(ActiveX Data Objects)

TADOConnection

dbExpress

TSQLConnection

InterBase

TIBDatabase

2.2.2数据集组件

数据集组件是数据库应用程序的核心部分。数据集组件保存了底层数据库中的数据记录。这些记录的数据来自于数据表、数据表中的部分字段、多个数据表的部分字段等。本质上,数据集组件是应用程序提供的一个缓冲区,保存数据库中实际存在的数据表中的数据。数据集组件为不可见组件,在组件面板中,ADO数据集组件在dbGo页,dbExpress数据集组件在dbExpress页,如下图:

delphi 创建公共数据模块(2.Delphi数据库应用程序构成)(3)

ADO

delphi 创建公共数据模块(2.Delphi数据库应用程序构成)(4)

dbExpress

2.2.3数据源组件

数据源组件也称为数据访问组件,是数据可见组件与数据集组件之间的桥梁,数据集组件从数据库获取到数据后,将其发送到数据源,然后数据源将数据传送到界面上的数据可见组件上进行显示。在组件面板中,通过 Data Access 页中的组件进行设计。如下图:

delphi 创建公共数据模块(2.Delphi数据库应用程序构成)(5)

2.2.4数据模块

数据模块(Data Module)是 Delphi 中类似窗体的容器组件,用于放置数据库组件,如:TTable、TQuery、TDatabase 等,这些与数据库相关的组件都是不可见的组件。

通过数据模块来组织数据库组件的优点:

  1. 简化窗体设计,不可视组件不要直接放在窗体上;
  2. 可以对数据库组件统一进行管理、共享相同的内容;

数据模块体现了 Delphi 面向对象和组件重用的特性。要使用数据模块中的组件,只需要把数据模块所在单元(Util)加到某个窗体单元文件中即可,这样这个窗体就可以使用这个数据模块中的所有组件。

添加数据模块的方法:

选择 File -> New -> Other, 打开 New Items 对话框,如下图所示:

delphi 创建公共数据模块(2.Delphi数据库应用程序构成)(6)

选择左侧的 Delphi Files,在右侧选择 Data Module,单击 OK 按钮即可。

2.2.5数据控制组件

数据控制组件(Data Control Component)的主要功能是与数据源组件(数据访问组件)配合提供用户对数据的操作。由于数据控制组件是不可见的,所以,必须使用可见的数据控制组件提供数据的展现。

数据控制组件也称为数据感知组件或者数据浏览组件。在组件面板中的 Data Controls 页中。如下图:

delphi 创建公共数据模块(2.Delphi数据库应用程序构成)(7)

2.3数据库应用程序的体系结构

数据库应用程序的体系结构主要由两个方面决定:

单层数据库应用程序中,应用程序与数据库共享同一个文件系统,使用本地数据库或者文件来存储数据,也就是我们通常所说的单机版应用程序。

两层数据库应用程序中,客户端应用程序提供界面,远程数据库服务器存储数据。

多层数据库应用程序中,客户端应用程序、应用服务器和数据库服务器均分布在不同的机器上。客户端应用程序主要提供用户界面,向应用服务器请求数据,然后再由应用服务器向远程数据库服务器进行数据请求。

2.4数据库应用程序的建立

Delphi 创建数据库应用程序的方法:

数据准备:

create table d_students ( student_id varchar(64) primary key, name varchar(16), sex varchar(2), chinese decimal(9,1), math decimal(9,1), english decimal(9,1) ); INSERT INTO public.d_students (student_id, "name", sex, chinese, math, english) VALUES('x-20210001', '张三', '男', 92, 89, 98); INSERT INTO public.d_students (student_id, "name", sex, chinese, math, english) VALUES('x-20210002', '李四', '男', 88, 87, 96.5); INSERT INTO public.d_students (student_id, "name", sex, chinese, math, english) VALUES('x-20210003', '王五', '男', 83.5, 91.5, 94);

创建 ODBC 数据源,命名为 demodb。

示例一:直接在窗体上放置数据库组件,显示上面表中的数据。

1.File -> New -> VCL Forms Application-Delphi,创建一个应用程序。

2.从dbGo页拖动一个 TADOConnection 组件到窗体上,设置属性 ConnectionString,点击 ...,如下图:

delphi 创建公共数据模块(2.Delphi数据库应用程序构成)(8)

点击 Build 按钮,如下图:

delphi 创建公共数据模块(2.Delphi数据库应用程序构成)(9)

选择 OLE DB for ODBC,单击下一页,如下图:

delphi 创建公共数据模块(2.Delphi数据库应用程序构成)(10)

从数据源名称中选择刚才创建的 ODBC 数据源后,单击测试连接。如果连接成功,则点击 确定 按钮。

所生成的连接字符串:

Provider=MSDASQL.1;Persist Security Info=False;Data Source=demodb

将 ADOConnection1 组件的 Connected 属性设置为 True。

3.从 dbGo 页上拖动一个 TADOTable 组件到窗体上,设置 Connection 属性为 ADOConnection1,然后设置 TableName 属性为 d_students (也就是刚才创建的数据表),设置 Active 属性值为 True。

4.从 Data Access 页中拖动一个 TDataSource 组件到窗体上,设置 DataSet 属性值为 ADOTable。

5.从 Data Controls 页中拖动一个 TDBGrid 和一个 TDBNavigator 组件到窗体上,设置 DbGrid1 的 DataSource属性为 DataSource1,设置 DBNavigator1 的 DataSource属性为 DataSource1。

此时,设计界面如下图所示:

delphi 创建公共数据模块(2.Delphi数据库应用程序构成)(11)

运行程序,可以直接在表中增加、修改、删除数据。

示例二:使用数据模块,实现上面同样的功能。

1.创建一个应用程序。

2.选择 File -> New -> Other,在 New Items 中选择 Data Module,双击添加一个数据模块。

3.在数据模块上添加不可见组件:ADOConnection1、ADOTable1、DataSource1,并设置相应的属性,参照示例一进行设置。

4.在主界面上添加 DBGrid1 和 DBNavigator1 。

5.保存数据模块,并将单元文件命名为 Unit2。

6.单击主界面,选择 File -> Use Unit,选择数据模块对应的单元文件。

7.设置主界面上的数据库组件的属性 DataSource 属性值为:DataModule2.DataSource1。

运行程序,可以看到与示例一相同的功能。

,