RSS
热门关键字:  数据挖掘  人工智能  数据仓库  搜索引擎  数据挖掘导论

利用dbExpress创建Oracle数据库应用程序 .

来源: 作者: 时间:2007-06-18 点击:

一、概述

数据挖掘研究院

在本文中我将演示如何在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数据源以及开发数据库应用程序的结构图。 数据挖掘研究院

数据挖掘研究院

图1

图2

数据挖掘研究院

四、实现 数据挖掘研究院

(一)数据库连接

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

数据挖掘研究院

图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的默认数据源为例。 数据挖掘研究院

数据挖掘研究院

图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。

数据挖掘研究院

图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,太小或太大都不行,一样会影响效果。这里,由于我们用到的例程数据表比较小,所以我用默认值。

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
匿名?