
本站地址:http://www.bajiao123.com

用Delphi开发“瘦”单机数据库应用系统
大家知道,Delphi具有强大的数据库应用程序开发功能,其Client/Sever版本可以开发从一般的单机数据库应用系统到普通Client/Sever应用系统、瘦客户型Client/Sever应用系统直到基于Web的多层应用,这其中自然离不开Borland数据库引擎(BDE)的功劳。不过需要注意的是在分发应用程序的时候必须同时分发BDE文件,Borland(Inprise)建议用户使用Delphi附带的InstallShield制作安装程序,以免遗漏BDE文件或BDE文件配置不正确。所需BDE文件根据应用程序所操纵的数据库对象有所不同,最少也需要上兆的空间。这对于大型应用系统来说无足轻重,可是,对于只操纵有限几个数据表并且应用程序(.exe)本身只有几百KB的小型单机数据库应用系统来说似乎有头重脚轻之感。
那么,有没有办法解决上述矛盾,开发出“瘦”单机应用程序呢?Delphi
Client/Sever(3.0+)版本提供了一个TCientDataSet元件,可以解决这个问题。该元件本来是用来开发多层应用中的瘦客户端程序的,其实我们也可以用它来代替BDE及其它数据集元件(TBDEDataSet,TDBDataSet及其派生类)用于单机(单层)应用,只不过在设计期(编程时)操作稍微复杂一些。
●编程步骤示例如下:
1.启动Delphi,建立一个新应用,将Main Form 取名为Form1,从IDE
元件选项板上分别选取一个TClientDataSet元件(取名ClientSataSet1)、一个
TTable元件(取名Table1)、一 个TDataSource元件(取DataSource1)、一个TDBGrid元件(取名DBGrid1,根据具体情况也可以选取其它数据控制元件)放在Form1上
。
2.通过Object Inspector将Table1的数据库及数据表名属性设为所要操纵的数据库对象,假如没有现成的数据表可用,可以运用Delphi附带的数据库桌面工具(Database
Desktop)建立新的数据表。
3.在Form1上选定ClientDataSet1,点击鼠标右键弹出选单,从中选定Assign
local data命令打开ClientDataSet1 Data 对话框,可以发现Table1已在列表框中,选取并确定。这样一来,就将Table1中的数据表完全复制到ClientDataSet1中去了。重新选定ClientDataSet1,点击鼠标右键弹出选单,从中选定Save
to file 命令打开保存文件对话框,将ClientDataSet1中的数据保存到一个以cds为默认扩展名的文件中,这里我们取名为MyThin.cds。根据需要还可以从弹出选单中选定Fields
Editor命令对数据表字段进行编辑,然后再保存。
4.将Table1从Form1中删除(此时对于我们的单机应用而言它已完全没有用场了),通过Object
Inspector,将DataSource1的DataSet属性设为ClientDataSet1,将DBGrid1的DataSource属性设为DataSource1。假如已将ClientDataSet1的Active属性设为True的话,我们就可以看到数据表的数据已显示在DBGrid1的栅格中。
5.在Form1的OnCreat事件句柄中键入如下代码:
ClientDataSet1.LoadFromFile(′MyThin.cds′);
相应地,在Form1的OnDestroy事件句柄中键入如下代码:
ClientDataSet1.SaveToFile(′MyThin.cds′);
6.编译并运行。至此一个“瘦”单机数据库应用框架已经建立。不用附带BDE,可执行文件只有500KB左右(不包括数据.cds文件),一张软盘就能搞定。
TTable 元件的直接上级是TDBDateSet元件,TDBDataSet的直接上级是TBDEDataSet元件,在TBDEDataSet元件中封装了BDE的API,因此要在运行期操纵TTable元件就必须使用BDE。而TClientDataSet元件的直接上级是与TBDEDataSET的直接上级一样的TDataSet元件,无须使用BDE。我们在设计期将TTable等TDataSet元件中操控的数据复制到TClientDataSet元件中,并保存在数据文件(.cds)中,这样就跳过了BDE,应用程序直接对数据文件(.cds)进行读写。而TClienDataSet元件所封装的对数据进行操纵处理的功能(有很多是重载于TDataSet的虚拟抽象方法和属性)并不比TBDEDataSet元件极其派生类差多少,基本上能满足单机数据库应用的要求。
本站地址:http://www.bajiao123.com

