Delphi编程实例与技巧(第三部分·中).pdf
《Delphi编程实例与技巧(第三部分·中).pdf》由会员分享,可在线阅读,更多相关《Delphi编程实例与技巧(第三部分·中).pdf(81页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、下载第12章 InterBase服务器I n t e r B a s e是一个数据库管理系统(D B M S)。数据库管理系统的任务是接受请求,然后翻译成对操作系统的命令,例如读写磁盘上的数据。数据库管理系统还包括事务控制、备份、恢复等功能。InterBase Server Manager程序可以用来管理InterBase Server。12.1 客户/服务器的概念12.1.1 客户客户指那些访问I n t e r B a s e数据库的应用程序,客户程序可以使用P a s c a l、C+和J a v a等语言开发。更广泛地说,I n t e r B a s e客户指与InterBase S
2、erver建立通讯信道的进程。客户进程和InterBase Server可以位于同一台计算机上,也可以位于两台不同的计算机,它们通过网络连接,如图1 2-1所示。12.1.2 InterBase 客户例程库I n t e r B a s e客户例程库是一个函数库,客户程序使用它们与服务器建立连接和操作数据。例程库提供了一组高级A P I,客户程序,必须通过它们去访问 I n t e r B a s e服务器。图 1 2-2说明了例程库(G D S 3 2.D L L)在通讯中所处的位置。12.1.3 InterBase服务器I n t e r B a s e服务器进程在服务器上运行,侦听某个端
3、口,等待客户进程发出的请求,它可以对数据库文件进行直接的I/O操作。客户进程可以向服务器进程发送请求,例如:检索数据库。修改数据。插入数据。执行存储过程。创建数据库。根据I n t e r B a s e服务器进程创建的线程的数目,多个客户能同时连接到 I n t e r B a s e服务器,服务器将协调并发操作。12.1.4 Borland数据库引擎建立数据库后,就可以在应用程序中访问数据库的信息,通常使用B o r l a n d数据库引擎图12-1 客户应用程序和数据库管理系统可以位于不同的计算机系统中图12-2 例程库(GDS32.DLL)在通讯中所处的位置ibserverAppli
4、cationApplicationBDESQL LinksG D S 3 2.D L Libserver(B D E)与操作数据库。B D E是一组A P I,它们可以和数据库客户例程库交互,完成数据库的管理功能。B D E本身不具备数据库管理功能,而是使用称为SQL Links的驱动程序完成该操作。B o r l a n d为O R A C L E、MS SQL Server等主流数据库管理系统提供了B D E驱动程序。12.2 数据库的管理和维护12.2.1 创建数据库InterBase Server的数据库存放在一个独立的文件中,该文件包含了表、视图和存储过程等内容。因此,必须首先创建一
5、个数据库,然后在这个数据库中创建表。通过Wi n d o w s的“开始|程序(P)|InterBase Client 5.1|InterBase Server Manager”可以运行InterBase Server Manager,运行界面如图1 2-3所示。在InterBase Server Manager的主窗体中选择File|Server Login菜单命令,会出现一个图1 2-4所示的对话框。将其中的Location Info设置为Local Engine,在User Name中输入S Y S D B A,在P a s s w o r d中输入m a s t e r k e y,按
6、下O K按钮。系统预定义的用户名是S Y S D B A,口令是m a s t e r k e y,也可以对其进行修改。如果登录正常,将出现如图1 2-5所示的窗口。左边窗体中列出了InterBase Server,图1 2-5中只有一个,即Local Server。右边窗体中显示了InterBase Server的统计信息。选择Tasks|Interactive SQL菜单命令,运行InterBase Interactive SQL应用程序。这是一个相当有用的管理工具。选择File|Create Database菜单命令,将出现一个如图1 2-6所示的Create Database(创建数据
7、库)对话框。在创建数据库对话框中,可以在本地服务器或者远程服务器上创建并连接数据库。如果要创建本地数据库,选中Local Engine单选按钮并提供数据库名(包括路径)、用户名和口令。如果要在远程服务器上创建数据库,选择Remote Server单选按钮,然后从列表中选择网络通讯协议,如T C P/I P。此外,也必须提供数据库名、用户名和口令。在输入用户名和口令后,单击O K按钮,完成创建数据库的工作。如果想删除数据库,可以使用File|Drop Database菜单命令,它将删除当前连接的数据库的所有内容,包括数据和表的结构。系统会提示一个对话框确认是否删除,如果确认,所有的第12章章In
8、terBase服务器章名249下载图12-3 运行InterBase Server Manager时的主界面图12-4 登录数据库数据都将丢失。12.2.2 创建表在创建数据库后,可以向数据库中添加数据库表格。实用程序InterBase Interactive SQL能够运行S Q L命令,可以使用它来添加表格。运行该程序前,应该登录InterBase Server,并且连接到某个数据库。图1 2-7是运行InterBase Interactive SQL时的窗口。在S Q L窗口中输入 S Q L命令,选择 Query|E x e c u t e菜单命令。如果工作正常,输出窗口将显示该S Q
9、 L语句。执行一系列S Q L命令后,选择File|Commit菜单命令,将向数据库提交完成的工作。在create table命令中,需要提供列名和列的属性:not null 表示该列不能为空值,primary key 表示该列为主关键字。可以用drop table命令删除表。另外,alter table命令可以修改表格的定义。12.2.3 数据库安全1.用户每个数据库都有一个S Y S D B A用户,初始口令是m a s t e r k e y。S Y S D B A是一个很特殊的用户,它可以绕过通常的S Q L安全,完成一些特殊的数据库管理任务。创建数据库时,S Y S D B A是唯一
10、的用户,其他用户须由S Y S D B A授权。而且,只有S Y S D B A用户能修改数据库安全,并向它添加或删除其他用户。如果数据库安全非常重要的话,创建数据库后的第一件事情就是修改 S Y S D B A口令。为了修改这个口令,首先打开InterBase Server Manager,从Ta s k s菜单中选择User Security,选择用户S Y S D B A后,再选择Modify User按钮,输入新口令。下一步是添加用户,同样以S Y S D B A登录,通过Tasks|User Security菜单命令,选择A d dU s e r,输入用户名和口令。必须注意,只有S
11、Y S D B A才有权限添加或删除用户。这也是250基本第三部分Delphi 高级编程技术下载图12-7 运行InterBase Interactive SQL时的窗口图12-5 InterBsase Server Manager窗口图12-6 创建数据库S Y S D B A显得特别重要的缘故。2.授权新建的用户没有任何权限,甚至不能打开数据库的表。S Q L的 g r a n t命令可以对用户授权。g r a n t的语法如下:GRANT priviledge ON table_name TO user_list常用的权限有:all 可以选择、修改、删除、插入和执行。select 读取表
12、的数据。delete 删除表的数据。insert 插入数据。update 修改数据。execute 执行存储过程。下面是一些例子:grant select,update on job to To mgrant all on employee to jerry和g r a n t相对的是r e v o k e命令,它将取消用户的权限:revoke select on job from To m;12.2.4 备份与恢复1.备份数据库要备份数据库,选择Tasks|Backup菜单命令,将显示Database Backup对话框,如图1 2-8所示。在Database Path编辑框中输入待备份的数
13、据库名,在Backup File or Device编辑框中输入目标文件名。根据需要,选择 O p t i o n s下的选项。备份完成后,在指定位置可以看到目标文件,即d d.g b k。O p t i o n s中有两个重要选项:Transportable Format 在不同的平台之间(如Wi n d o w s和U N I X)备份。Backup Metadata Only 只备份数据字典。2.恢复选择Tasks|Restore菜单命令,出现D a t a b a s eR e s t o r e对话框,如图1 2-9所示。在Database Restore对话框中,可以在Backup
14、 File or Device编辑框中输入源文件名。在Primary Database File中输入待恢复的数据库名(包括完整的路径)。然后在O p t i o n s项中根据需要进行设置,最后按下O K按钮。第12章章InterBase服务器章名251下载图12-8 备份数据库时显示的Database Backup对话框图12-9 恢复数据库时显示的Database Restore对话框12.3 服务器端程序服务器端程序的优点有:优化数据库服务器对存储过程进行优化编译,提高了执行效率。降低网络流量数据在服务器上处理,限制了向客户传递不必要的数据。12.3.1 存储过程存储过程由客户直接调用
15、,类似一个 P a s c a l过程。它可以有输入参数和一个返回值。存储过程也可以返回一个数据集,用于s e l e c t语句中。下面是一个存储过程,返回J O B表格的最高薪水。create procedure max_sal returns(maxsal decimal(15.2)a sb e g i nselect max(max_salary)from jobinto:maxsal;e n d使用InterBase Interactive SQL程序建立存储过程,注意连接到本地 e m p l o y e e(一个本地InterBase Server)。建立存储过程后,用g r a
16、 n t命令授权用户。在D e l p h i中,使用T S t o r e d P r o c e d u r e调用存储过程,也可以使用 T Q u e r y类。对于上面的存储过程,可以使用下面的S Q L语句:select*from max_sal12.3.2 触发器触发器类似Wi n d o w s下的事件处理过程,当指定的事件发生时,数据库管理系统自动调用触发器。触发器检测的基本事件有i n s e r t、u p d a t e和delete。触发器可以在这些事件发生前或者发生后执行。很多表格用顺序号(I D)作为主关键字。如果在客户端生成 I D,显然比较麻烦。最好在S Q L
17、服务器上提供计数器,可以用于生成I D。在InterBase Server中创建计数器的语法是:create generator counter_name其中c o u n t e r _ n a m e是计数器名称,可以任意指定。I n t e r B a s e还提供了g e n _ i d函数获取计数器的值,它需要两个参数:计数器名称和步长。例如,向E M P L O Y E E表格添加一个触发器,当添加记录时自动填写E M P _ N O字段:create triger next_emp_no for EMPLOYEEbefore insert position 0 asb e g i
18、 nn e w.e m p _ n o=g e n _ i d(e m p _ n o,1);e n d;每当向E M P L O Y E E表格添加记录时都会调用n e x t _ e m p _ n o触发器。n e w表示新插入的记录,p o s i t i o n指定了与同一个表格有关的触发器的执行顺序,0的优先级最高。252基本第三部分Delphi 高级编程技术下载12.4 本地缓存当使用远程S Q L服务器时,应该尽量避免网络拥塞。本地缓存技术有助于降低网络流量。其基本思想是,对数据库的操作暂时保存在本地缓存中,一直到调用 A p p l y U p d a t e s方法才写回数
19、据库。通常情况下,T Q u e r y返回只读数据集,除非将 T Q u e r y的R e q u e s t L i v e设置成Tr u e。但是,即使R e q u e s t L i v e设置成Tr u e,也可能返回只读数据集(例如,对多个数据库表格进行查询)。在这种情况下,把U p d a t e O b j e c t设置成某个T U p d a t e S Q L对象,这时,当我们调用A p p l y U p d a t e s方法时,数据库服务器将执行T U p d a t e S Q L对象的u p d a t e、i n s e r t和delete SQL命令,
20、需要的数据放在本地缓存中。T U p d a t e S Q L组件简化了本地缓存的实现,它主要有 3个属性:D e l e t e S Q L、M o d i f y S Q L和I n s e r t S Q L。本地缓存保存了原有记录的信息,这些信息也是数据库服务器识别记录的方法。如果T Q u e r y生成的数据集包含了主关键字,也可以指定该关键字作为服务器识别记录的标志。例程S12_1 该例程解释了如何使用T U p d a t e S Q L更新只读的T Q u e r y(Q u e r y 1)的数据集。U p d a t e S Q L C a c h e(T U p d
21、a t e S Q L)对象在I n s e r t S Q L、D e l e t e S Q L和M o d i f y S Q L属性中包含了S Q L语句,当Q u e r y 1调用A p p l y U p d a t e s时,它们将执行。注意设置Q u e r y 1的C a c h e d U p d a t e s为Tr u e。例程S 1 2 _ 1中使用了I B L o c a l数据库下的P R O J E C T表格。具体实现过程如下:1)创建一个新的应用程序工程。2)参照图1 2-1 0定制主窗体。3)需要使用到的数据模块如图1 2-11所示。下面是数据模块中各组
22、件的文本描述:object DataModule1:TDataModule1object DataSource1:TDataSourceDataSet=Query1e n dobject Database1:TDatabaseAliasName=IBLOCALDatabaseName=IBLoginPrompt=FalseParams.Strings=(USER NAME=SYSDBA PA S S W O R D=m a s t e r k e y )e n dobject Query1:TQueryCachedUpdates=Tr u eOnCalcFields=Query1CalcFie
23、ldsDatabaseName=IBRequestLive=Tr u eSQL.Strings=(SELECT PROJECT.PROJ_ID,PROJECT.P R O J _ N A M E FROM PROJECT PROJECTORDER BY PROJECT.P R O J _ I D )object Query1PROJ_ID:TStringFieldFieldName=PROJ_ID第12章章InterBase服务器章名253下载图12-10 定制例程S12_1的主窗体图12-11 在例程S12_1中需要使用到的数据模块e n dobject Query1PROJ_NAME:TS
24、tringFieldFieldName=PROJ_NAMEe n dobject Query1UpdateStatus:TStringFieldFieldKind=fkCalculatedFieldName=UpdateStatusCalculated=Tr u ee n de n dobject UpdateSQL:TUpdateSQLModifySQL.Strings=(update PROJECT s e t PROJ_ID=:PROJ_ID,PROJ_NAME=:PROJ_NAME w h e r e PROJ_ID=:OLD_PROJ_ID andPROJ_NAME=:OLD_PRO
25、J_NAME)InsertSQL.Strings=(insert into PROJECT(PROJ_ID,PROJ_NAME)v a l u e s(:PROJ_ID,:PROJ_NAME)DeleteSQL.Strings=(delete from PROJECT w h e r e PROJ_ID=:OLD_PROJ_ID andPROJ_NAME=:OLD_PROJ_NAME)e n de n d在U p d a t e S Q L对象中定义了三个S Q L语句,分别用于把修改的记录、插入的记录或删除的记录写回数据库。用字段P R O J _ I D和P R O J _ N A M E
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Delphi 编程 实例 技巧 第三 部分
限制150内