一
概述
Delphi作为Windows下的一种快速开发工具不仅能开发一般的Windows应用程序而且还具有强大的数据库应用程序开发功能Delphi本身提供了对BDEODBCADO和InterBase几种数据库驱动的支持能够满足不同应用对数据库程序开发的需要
然而在发布用Delphi开发的数据库程序时除了要安装应用程序之外还需要同时发布数据库驱动程序这对于一些只涉及单个或多个简单表数据存储的单机应用程序来说就显得有点头重脚轻的感觉了况且有些应用程序本身需要存储大量数据但本身又要求结果短小精悍的话用Delphi常规开发数据库的方法就不能满足需要了
那么有没有办法解决上述矛盾开发出能脱离庞大的数据库驱动程序的瘦数据库单机应用程序呢?Delphi在Midas控件面板中提供了一个TClientDataSet控件可以很好地解决这个问题
二TClientDataSet使用要点
TClientDataSet控件继承自TDataSet其数据存储文件格式扩展名为cds是基于文件型数据存储和操作的控件该控件封装了对数据进行操作处理的接口和功能而本身并不依赖上述几种数据库驱动程序基本上能满足单机瘦数据库应用程序的需要
.TClientDataSet的基本属性和方法介绍
).FieldDefs: 字段定义列表属性
开发者可通过单击属性编辑器中该属性编辑按钮或在该控件上单击右键选择弹出菜单中的Fields Editor菜单进行字段编辑设置完此属性后实际上就相当于定义了表的结构如果想装入已有的数据表的结构和数据可通过单击右键选择弹出菜单中的Assign Local Data菜单从弹出对话框中选取当前窗体中已与数据库连接好的数据集控件名称即可(当前窗体中必须已放置好要套用的数据集控件并打开激活)
使用注意
对于自定义的字段名表该属性编辑完后该控件仍然无法打开必须右键单击该控件选择弹出菜单中的Create DataSet菜单让该控件以上述编辑的字段列表为依据创建数据集后才能够被激活打开和使用否则会出现类似ClientDataSet: Missing data provider or data packet的错误(包括在运行期运行期可调用该控件的CreateDataSet方法从而动态定义字段和表)
).FileName属性
说明数据存储文件的名称
因该控件是基于文件型的数据操作控件因此必须指定所操作的数据文件名称(默认扩展名称cds)从而打开和激活该控件进而进行数据编辑
例利用此属性打开指定的cds文件
var
Path: string;
begin
Path := ExtractFilePath(ApplicationExeName); //取得可执行文件路径
CDataSetFileName := Path + testcds;
CDataSetOpen;
end;
).CreateDataSet方法
说明该方法以FieldDefs中的字段名表为结构建立数据集常用来进行动态定义表
例动态创建一具有姓名和年龄两个字段的数据集
//创建字段名表
CDataSetFieldDefsClear;
with CDataSetFieldDefsAddFieldDef do
begin
Name := Name;
Size := ;
DataType := ftString;
end;
with CDataSetFieldDefsAddFieldDef do
begin
Name := Age;
DataType := ftInteger;
end;
//动态创建数据集
CDataSetCreateDataSet;
//激活和打开该数据集
CDataSetOpen;
).Open方法
说明 打开和激活数据集控件从而进行数据编辑
a 如果指定了FileName属性则直接用Open方法即可打开和激活该控件见例
b 如果未指定FileName属性可使用例方法动态创建和打开数据集进而操作数据
).LoadFromFile和SaveToFile
说明从文件中装入表结构和数据以及存储数据到文件该方法类似于Word中的打开新文件和另存为的功能
例:将数据集的数据存储到指定文件中
CDataSetSaveToFile(c:\windows\desktop\testcds);
)First(到首)Prior(向前)Next(向后)Last(到尾)Edit(编辑)CanCel(取消编辑)Post(保存)Insert(插入记录)Append(添加记录)Delete(删除)Refresh(数据刷新)等数据集常用方法
说明当指定了FileName属性时其Post方法可将数据存入指定的文件中类似其SaveToFile方法如果未指定存储文件名则Post方法只将数据存储在RAM中其它方法同一般数据集控件使用方法略
)Filter Filtered: 过滤筛选属性
说明:用于筛选指定条件的记录用法同一般数据集控件略
例在已经激活打开的数据集中筛选性别为男性的记录
CDataSetClose;
CDataSetFilter := 性别= + 男 + ;
CDataSetFiltered := True;
CDataSetOpen;
.使用TClientDataSet控件的应用程序发布的注意事项
如前所述使用TClientDataSet控件的程序发布时不需要任何数据库驱动程序大大节省了安装文件的大小但是在发布程序时别忘了将Windows系统目录下midasdll(KB)与应用程序一起发布(运行必须)否则程序仍然无法正常运行
三结束语
通过使用Delphi中TClientDataSet控件既实现了应用程序可彻底脱离数据库驱动程序也实现了常规数据集控件简单易用的特性为编写瘦数据库应用程序提供了一种技术方法和手段
上述程序在PwindowsDelphi下测试通过