服务器-客户机,即Client-Server(C/S)结构。C/S结构通常采取两层结构。服务器负责数据的管理,客户机负责完成与用户的交互任务。
客户机通过局域网与服务器相连,接受用户的请求,并通过网络向服务器提出请求,对数据库进行操作。服务器接受客户机的请求,将数据提交给客户机,客户机将数据进行计算并将结果呈现给用户。服务器还要提供完善的安全保护及对数据完整性的处理等操作,并允许多个客户机同时访问服务器,这就对服务器的硬件处理数据能力提出了很高的要求。
在C/S结构中,应用程序分为两部分:服务器部分和客户机部分。
- 服务器部分是多个用户共享的信息与功能,执行后台服务,如控制共享数据库的操作等;
- 客户机部分为用户所专有,负责执行前台功能,在出错提示、在线帮助等方面都有强大的功能,并且可以在子程序间自由切换。
C/S结构在技术上已经很成熟,它的主要特点是交互性强、具有安全的存取模式、响应速度快、利于处理大量数据。但是C/S结构缺少通用性,系统维护、升级需要重新设计和开发,增加了维护和管理的难度,进一步的数据拓展困难较多,所以C/S结构只限于小型的局域网 。
2.2Delphi数据库应用程序
在 Delphi 中,无论使用什么方式(BDE/ADO等)对数据库进行存取操作,实现起来都比较容易。Delphi 提供了大量的数据库组件,通过使用这些组件来开发数据库应用程序,可以极大地提高编程效率。
由于 BDE 在 Delphi XE8 中已经明确被弃用,本篇以 ADO 组件来说明 Delphi 数据库应用程序的构成。如下图所示:
2.2.1连接组件
不同类型的数据集采用不同的机制与底层数据库通信,在 Delphi 中常用的有 BDE、ODBC 及 ADO 等方式。一般情况下,数据集组件本身也具有用于连接的属性,不通过专门的连接组件也可以访问数据库。
使用专门的数据库连接组件可以使连接管理更加方便和结构化,且可以实现事务处理。
不同的数据集组件使用不同的连接组件来连接数据库服务器,如下表:
数据管理机制 |
连接组件 |
BDE(Borland Database Engine) |
TDatabase |
ADO(ActiveX Data Objects) |
TADOConnection |
dbExpress |
TSQLConnection |
InterBase |
TIBDatabase |
数据集组件是数据库应用程序的核心部分。数据集组件保存了底层数据库中的数据记录。这些记录的数据来自于数据表、数据表中的部分字段、多个数据表的部分字段等。本质上,数据集组件是应用程序提供的一个缓冲区,保存数据库中实际存在的数据表中的数据。数据集组件为不可见组件,在组件面板中,ADO数据集组件在dbGo页,dbExpress数据集组件在dbExpress页,如下图:
ADO
dbExpress
2.2.3数据源组件数据源组件也称为数据访问组件,是数据可见组件与数据集组件之间的桥梁,数据集组件从数据库获取到数据后,将其发送到数据源,然后数据源将数据传送到界面上的数据可见组件上进行显示。在组件面板中,通过 Data Access 页中的组件进行设计。如下图:
2.2.4数据模块
数据模块(Data Module)是 Delphi 中类似窗体的容器组件,用于放置数据库组件,如:TTable、TQuery、TDatabase 等,这些与数据库相关的组件都是不可见的组件。
通过数据模块来组织数据库组件的优点:
- 简化窗体设计,不可视组件不要直接放在窗体上;
- 可以对数据库组件统一进行管理、共享相同的内容;
数据模块体现了 Delphi 面向对象和组件重用的特性。要使用数据模块中的组件,只需要把数据模块所在单元(Util)加到某个窗体单元文件中即可,这样这个窗体就可以使用这个数据模块中的所有组件。
添加数据模块的方法:
选择 File -> New -> Other, 打开 New Items 对话框,如下图所示:
选择左侧的 Delphi Files,在右侧选择 Data Module,单击 OK 按钮即可。
2.2.5数据控制组件数据控制组件(Data Control Component)的主要功能是与数据源组件(数据访问组件)配合提供用户对数据的操作。由于数据控制组件是不可见的,所以,必须使用可见的数据控制组件提供数据的展现。
数据控制组件也称为数据感知组件或者数据浏览组件。在组件面板中的 Data Controls 页中。如下图:
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,点击 ...,如下图:
点击 Build 按钮,如下图:
选择 OLE DB for ODBC,单击下一页,如下图:
从数据源名称中选择刚才创建的 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。
此时,设计界面如下图所示:
运行程序,可以直接在表中增加、修改、删除数据。
示例二:使用数据模块,实现上面同样的功能。
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。
运行程序,可以看到与示例一相同的功能。
,