如何用TClientDataSet实现不用BDE的单机廋客户程序?写详细一点(100分)

  • 主题发起人 主题发起人 godsun
  • 开始时间 开始时间
既然用TClienDataSet,怎么可能是单机?
 
用BDE也可以呀,BDE和ADO,ODBC,DAO一样都是数据引擎,你或许对三层结构还是
比较模糊.
Client用DcomConnection,clientDataSet,中间层什么都可以
MTS,RemoteDataModule都行,数据引擎用ADO,BED,ODBC都行,这就是DELPHI的
魅力.
 
可以用TCLIENTDATASET可以实现单机的,只要把TABLE控件换成TCLIENTDATASET控件就可以了。过两天我给你个例子。
 
我的编程实例如下:我试过没有问题的。


  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元件极其派生类差多少,基本上能满足单机数据库
应用的要求。

你试试看。
 
sunzx:
佩服
 
如果仅只是想跳过BDE,就用别的数据库控件吧。DBISAM 2.02就是个不错的选择。
 
sunzx说的对
 
接受答案了.
 
后退
顶部