45fan.com - 路饭网

搜索: 您的位置主页 > 电脑频道 > 电脑教程 > 阅读资讯:如何利用dbExpress创建Oracle数据库应用程序?

如何利用dbExpress创建Oracle数据库应用程序?

2016-09-01 13:19:34 来源:www.45fan.com 【

如何利用dbExpress创建Oracle数据库应用程序?

一、概述

在本文中我将演示如何在Delphi6/7用 dbExpress组件连接到Oracle9.2.1.0后端数据源 ,一步一步地实现数据库应用程序的简单编程,希望能对初学者有所帮助,

也算是抛砖引玉吧。

二、dbExpress与DataSnap简介

Delphi6/7的重要功能之一便是推出了新一代跨平台的数据访问引擎dbExpress。它是一组新的组件、技术和驱动程序,可以用它连接到各种数据源,配合不同的数据库连接DLL文件,让程序员可以处理后端数据库中的数据。现在它已成为用于 Delphi、C++Builder 和 Kylix(既包括 Delphi 版本也包括 C++ 版本)的功能强大的跨平台数据访问层。同时DbExpress也能够与DataSnap技术(这是Delphi6/7的名称,旧版本的Delhpi称为MIDAS)结合以便让程序员能够同时开发单机、BC、主从结构和瘦客户类型的数据库应用程序,让程序员能够使用一组组件和技术同时开发数据类型的应用系统。

DbExpress中与访问数据有关的组件如TSQLDataSet、TSQLTable、TSQLQuery等是从TdataSet类继承下来的,且有和TdataSet一样的功能。但是与其他也从TdataSet继承下来的组件(如TBDEDataSet等组件)不同的是,通过这些DbExpress组件取得的结果数据集是只读的,是单向的,只能由前向后访问,而无法由后往前访问。解决的方法有两种:

1.使用组件面板中Data Access选项卡中的TdataSetProvider和TclientDataSet组件。

2.使用DbExpress组件面板中的TsimpleDataSet组件(只有Dephi7才提供)。

实际上它们使用的底层技术基本上是一样的,使用TsimpleDataSet 组件等同于使用TSQLDataSet组件加TdataSetProvider和TclientDataSet组件。

基本上,这两种方法都是使用TSQLDataSet组件从后端数据源中取得数据,再通过内部的缓存(cache)机制管理数据,通过内部缓冲(Buffering)机制允许任意移动目前记录位置,并且在需要将修改的数据写回数据源时,根据它内部维护的信息自动地产生修改数据的SQL语句,再通过TSQLDataSet 组件使用这些SQL语句把修改的数据更新回数据源。本文中使用的是第一种方法。

三、使用DbExpress连接Oracle数据源以及开发数据库应用程序的结构图。

 

如何利用dbExpress创建Oracle数据库应用程序?

 

图1

 

如何利用dbExpress创建Oracle数据库应用程序?

 

图2

四、实现

(一)数据库连接

开始前,请确保Oracle 服务器正在运行。如果在客户端编程,还要先配置好本地Net服务器名配置,连接Oracle。如下图3所示,然后跟着提示一步一步往下做就可以了。在这里我们新建了一个叫gz_zjc的连接串。

 

如何利用dbExpress创建Oracle数据库应用程序?

 

图3 Oracel Net Configuration Assistant连接起动界面

(二)用dbExpress连接数据源

打开Delphi,点击 File|New|Application 启动一个新的工程(当然大家也可以将它构建为 CLX 应用程序,这样就可以在 Linux下跨平台使用)。接下来,将主窗体保存为MainFrm.pas 中,而将工程保存在OraDbExpDemo.dpr 中。再点击File|New|Data Module,建立一个数据模块(如果上面选用CLX Application,那么这里就要用CLX Data Module),并保存为OraDemoDM.pas,同时将Name特性值也改为DemoDM,把数据规则定义在同一模块是一种好的编程习惯,不但方便使用和维护,而且对于以后程序的扩容也方便,很容易迁移到三层或多层。

在空白的数据模块中加入一个TSQLConnection组件(从dbExpress组件面板中选取),Name特性值设为ScnDemo。双击TSQLConnection 组件以激活他的组件编辑器(见图4),新建一个Connection Name为OraScott,DriveName选Oracle,并输入用户名(scott)和密码(temp),我们以Oracle中Scott的默认数据源为例。

 

如何利用dbExpress创建Oracle数据库应用程序?

 

图4 dbExpress Connection属性

一旦设置好了一切,就请关闭 Connections 属性对话框,然后将 TSQLConnection 组件的 Connected 属性设置为 True。出现标准的 Database Login 对话框。如果您不想看到这个对话框,那么请将 TSQLConnection 组件的 LoginPrompt 属性设置为 False。成功登录之后,应用程序就连到Oracle数据库了。

接着在数据模块中放入一个TSQLQuery组件,设置它的Name为SqryEmp,DBConnection为ScnDemo。再设置SqryEmp的Sql属性值为select * from emp,设置Active为True,从emp表中取得所有的数据。

前面已经提到过dbExpress 数据集是个只读、单向的数据集。因此为了让您的应用程序遍历emp这个数据集并对其做些修改,应用程序必须将内容放在本地高速缓存 — TClientDataSet 中。请从 Component Palette 的 Data Access 选项卡中选取 TClientDataSet 和TDataSetProvider 两个组件。见图5。

 

如何利用dbExpress创建Oracle数据库应用程序?

 

图5 TClientDataSet 和TDataSetProvider 两个组件

 

将 TDataSetProvider 的DataSet特性值设为 QryEmp,Name特性值设为EmpDSP, TClientDataSet的ProviderName 属性指向EmpDSP,Name特性值设为EmpCDS。TclientDataSet还有一个重要属性,那就是PacketRecords特性。为什么说它重要呢?这是因为就是由它控制了TTClientDataSet组件如何访问数据(TsimpleDataSet组件也有这个特性,用途一样)。基本上可以设置为下列三种数值:

-1,表示一次从后端数据源中取得所有数据

0 ,表示取得描述数据源的元数据信息

正数,表示一次只取得指定数量的记录

PacketRecords的默认值是-1 ,代表当TclientDataSet组件开启后它会一次把后端数据源中的所有数据读到客户端。对于数据量少的数据表来说并没有什么影响,但对于数据量大的数据表,这样做将会造成严重的网络堵塞,甚至会导致应用程序超时访问。而如果设为0,那么就代表要从后端数据源中取得描述数据源的所有元数据信息。一般来说,当TsimpleDataSet/TclientDataSet第一次开启都会先取得元数据,建立客户端结果数据源以便访问的。所以一般我们都把PacketRecords设为正数。一般我都设为100或200,太小或太大都不行,一样会影响效果。这里,由于我们用到的例程数据表比较小,所以我用默认值。

------------------------------下一页

 

现在,当应用程序打开 TClientDataSet 时,它将向 TDataSetProvider 发送一个数据请求。TDataSetProvider 组件接下来将打开 TSQLQuery 组件,然

后执行TSQLQuery 组件的SQL语句,从 Oracle数据库服务器端获得数据源输出给TClientDataSet。

好了,到目前为止,数据源就准备好了。那么怎样将这些数据显示在应用程序中呢?

首先,让我们回到刚开始创建的MainFrm.pas所对应窗口,也就是我们的主窗口。点击File|Use Unit…,将创建好的数据模块OraDemoDM添加到MainFrm.pas的implementation下。跟着您需要从数据感知组件添加以下几个组件。第一个组件是 TDataSource 组件(从 Data Access 选项卡中获得)。将 TDataSource 的 DataSet 属性指向数据模块中的EmpCDS。然后,在窗体中放入 TDBGrid 和 TDBNavigator 组件(这两个组件可从Data Control中获得),将其 DataSource 属性指向 TDataSource 组件。最后,当您将 TClientDataSet 的 Active 属性设置为 True 时,您将在设计时得到实时Oracle 数据。 如图6所示。

 

如何利用dbExpress创建Oracle数据库应用程序?

 

图6 设计时与Oracle连接时的效果

 

到现在为止,咱们就实现了客户端连接到远程(或本地)Oralce数据库的

简单编程。是不是觉得很简单。赶快看看我们的工作成果吧。这里还有一点要注意的是,编译运行之前,还要做一件事,就是点击Project|Option,在Forms页的Auto Create forms中将DemoDM移到form1的上方。即在运行界面之前先启动数据库连接。点击F9或下拉菜单(run|run)试试看。是不是很酷。

(三)操作数据源

实现了应用程序与数据源的连接才是数据库编程成功的第一步,接着您可能希望对数据源中的数据进行操作。请您试着新增、删除或更改记录并点击“√”把数据更新回去。这似乎是正确的。但是,当您结束该应用程序然后重新启动时,您会发现您刚才对数据源的修改都不见了。也就是说刚才的修改和删除并没有真正对后端数据发生作用。这是为什么呢?

请您回过头看看图2 dbExpress和DataSnap的工作原理图,在使用DataSnap的应用程序中,当修改数据并且调用TclientDataSet的Post方法或点击TDBNavigator的“√”按钮更新数据,事实上只是把数据更新到图2中的缓存内存中,并没有真正更新回后端数据源中。要真正地把修改的数据更新回数据源中,应用程序必须调用 TClientDataSet 的 ApplyUpdates 方法。你可以在应用程序中应用到数据源的窗体的 OnClose 事件处理程序中自动完成,避免用户重复按键也可以单独为它设置一个保存按钮。ApplyUpdates的函数声明原型如下:

function ApplyUpdates(MaxErrors:integer):Integer;virtual;

整型参数MaxErrors代表当TdataSetPriveder自动更新数据时,程序员所允许发生的错误次数。MaxErrors与上面提到的PacketRecords一样有3种取值,分别如下 :

-1:代表不管发生多少错误都没有关系,先把能够成功更新的数据更新回数据源中。

0:代表不允许发生任何更新错误。

正数:代表所允许发生的错误次数。如果发生了超过MaxError的错误次数,应用程序将回滚您所作的修改,反之,如果小于或等于您所设定的MaxError的错误次数,程序将成功更新数据。

下面让我们回到主窗口,在窗口中新增TbitBtn组件,Caption属性改为保存(&S),如图7。

 

如何利用dbExpress创建Oracle数据库应用程序?

 

图7 在应用程序主窗体中加入TbitBtn组件

 

接着在TbitBtn的OnClick事件处理函数中编写如下的程序代码:

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

if DemoDM.EmpCDS.ChangeCount >0 then

try

DemoDM.EmpCDS.ApplyUpdates(0);

else

raise exception.Create('写回数据库时出错。')

end;{try}

end;

注:ChangeCount 属性返回当前缓存数据所做修改的数目。

除 TSQLQuery外,您还可以使用TSQLTable、 TSQLStoredProc 或 TSQLDataSet组件。前一个组件用来直接访问表,后一个可以用来执行存储过程。而TSQLDataSet则涵盖了前三种组件的功能,通过设置其CommandType特性值可以设置为这三种中的任一种,并通过CommandText 属性设置其相应值,则可以分别访问表、存储过程以及SQL语句。

现在,一个简单的数据库应用程序已经基本完成。怎么样,是不是很简单,那还等什么,还不赶快试试。

 
 
 

本文地址:http://www.45fan.com/dnjc/70814.html
Tags: oracle 创建 dbExpress
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部