http://blog.csdn.net/waveyang/article/details/34146737

unit Unit3;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Grids, Vcl.DBGrids,
Data.DB, Datasnap.DBClient;

type
TForm3 = class(TForm)
Button1: TButton;
Button2: TButton;
DataSource1: TDataSource;
ClientDataSet1: TClientDataSet;
DBGrid1: TDBGrid;
ClientDataSet1id: TIntegerField;
ClientDataSet1qishu: TIntegerField;
ClientDataSet1kaijiang: TIntegerField;
ClientDataSet1shijian: TStringField;
ClientDataSet1beizhu: TStringField;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);
var
Path: string;
begin
Path := ExtractFilePath(Application.ExeName); //取得可执行文件路径
self.ClientDataSet1.FileName := Path + 'test.cds';
self.ClientDataSet1.LoadFromFile(Path + 'test.cds');
self.ClientDataSet1.Open;

end;

procedure TForm3.Button2Click(Sender: TObject);
begin
self.ClientDataSet1.InsertRecord([111,2,3,'aaaaa','cccc']);
end;

procedure TForm3.Button3Click(Sender: TObject);
var a,b,c:string; i,j,k:integer;
begin
self.ClientDataSet1.First;
i:=self.ClientDataSet1.FieldValues['id'] ;

showmessage(inttostr(i));
end;

end.

2014-06-24 20:48 2081人阅读 评论(0) 收藏 举报

TClientDataSet控件继承自TDataSet,其数据存储文件格式扩展名为 .cds,是基于文件型数据存储和操作的控件。该控件封装了对数据进行操作处理的接口和功能,而本身并不依赖上述几种数据库驱动程序,基本上能满足单机"瘦"数据库应用程序的需要。

一、TClientDataSet的基本属性和方法介绍

1、FieldDefs: 字段定义列表属性

开发者可通过单击属性编辑器中该属性编辑按钮,或在该控件上单击右键选择弹出菜单中的"Fields Editor"菜单进行字段编辑。设置完此属性后,实际上就相当于定义了表的结构;如果想装入已有的数据表的结构和数据,可通过单击右键选择弹出菜单中的"Assign Local Data"菜单,从弹出对话框中选取当前窗体中已与数据库连接好的数据集控件名称即可(当前窗体中必须已放置好要套用的数据集控件并打开激活)。

使用注意:

  对于自定义的字段名表,该属性编辑完后,该控件仍然无法打开。必须右键单击该控件,选择弹出菜单中的"Create DataSet"菜单,让该控件以上述编辑的字段列表为依据,创建数据集后,才能够被激活打开和使用。否则,会出现类似"ClientDataSet1: Missing data provider or data packet."的错误(包括在运行期,运行期可调用该控件的CreateDataSet方法,从而动态定义字段和表)。

2、FileName属性

说明:数据存储文件的名称。因该控件是基于文件型的数据操作控件,因此,必须指定所操作的数据文件名称(默认扩展名称.cds),从而打开和激活该控件,进而进行数据编辑。

例1:利用此属性打开指定的.cds文件

  1. var
  2. Path: string;
  3. begin
  4.  Path := ExtractFilePath(Application.ExeName); //取得可执行文件路径
  5.  CDataSet1.FileName := Path + 'test.cds';
  6.  CDataSet1.Open;
  7. end;

3、CreateDataSet方法

说明:该方法以FieldDefs中的字段名表为结构建立数据集,常用来进行动态定义表。

例2:动态创建一具有姓名和年龄两个字段的数据集。

  1. //创建字段名表
  2. CDataSet.FieldDefs.Clear;
  3. with CDataSet.FieldDefs.AddFieldDef do
  4. begin
  5.  Name := 'Name';
  6.  Size := 10;
  7.  DataType := ftString;
  8. end;
  9. with CDataSet.FieldDefs.AddFieldDef do
  10. begin
  11.  Name := 'Age';
  12.  DataType := ftInteger;
  13. end;
  14. //动态创建数据集
  15.  CDataSet.CreateDataSet;
  16. //激活和打开该数据集
  17.  CDataSet.Open;

4、Open方法

说明: 打开和激活数据集控件,从而进行数据编辑。a. 如果指定了FileName属性,则直接用Open方法即可打开和激活该控件,见例1。b. 如果未指定FileName属性,可使用例2方法动态创建和打开数据集,进而操作数据。

5、LoadFromFile和SaveToFile

说明:从文件中装入表结构和数据以及存储数据到文件。该方法类似于Word中的打开新文件和另存为的功能。

例3:将数据集的数据存储到指定文件中

  1. CDataSet.SaveToFile('C:\Windows\ZHU\Test.cds');

6、First(到首),Prior(向前),Next(向后),Last(到尾),Edit(编辑),CanCel(取消编辑),Post(保存),Insert(插入记录),Append(添加记录),Delete(删除),Refresh(数据刷新)等数据集常用方法。

说明:当指定了FileName属性时,其Post方法可将数据存入指定的文件中,类似其SaveToFile方法;如果未指定存储文件名,则Post方法只将数据存储在RAM中。其它方法,同一般数据集控件使用方法,略。

7、Filter, Filtered: 过滤筛选属性

说明:用于筛选指定条件的记录,用法同一般数据集控件,略。

例4:在已经激活打开的数据集中筛选性别为男性的记录

  1. CDataSet.Close;
  2. CDataSet.Filter := '性别=''' + '男' + '''';
  3. CDataSet.Filtered := True;
  4. CDataSet.Open;

二、使用TClientDataSet控件的应用程序发布的注意事项:

如前所述,使用TClientDataSet控件的程序发布时不需要任何数据库驱动程序,大大节省了安装文件的大小。但是,在发布程序时别忘了将Windows系统目录下midas.dll(257KB)与应用程序一起发布(运行必须),否则,程序仍然无法正常运行。

通过使用Delphi中TClientDataSet控件,既实现了应用程序可彻底脱离数据库驱动程序,也实现了常规数据集控件简单易用的特性,为编写"瘦"数据库应用程序提供了一种技术方法和手段。

三、TClientDataSet在三层结构中,TClientDataSet的地位是不可估量的,本文从以下几个方面阐述她的使用。

1、动态索引

  1. procedure TForm1.DBGrid1TitleClick(Column: TColumn);
  2. begin
  3. if (not column.Field is Tblobfield) then//Tblobfield不能索引,二进制
  4. ClientDataSet1.IndexFieldNames:=column.Field.FieldName;
  5. end;

2、多层结构中主从表的实现

设主表ClientDataSet1.packetrecord为-1,所有记录;

设从表ClientDataSet1.packetrecord为0,当前记录。

3、Taggregates使用

(1)在字段编辑中add new field类型为aggregates
     后设置expression(表达试)
     设置active:=true即可
     使用dbedit的field为前者即可
    (2)使用Aggergates属性add设计表达试
     调用

  1. ShowMessage(FloatTostr(ClientDataSet1.Aggregates.Count));
  2. ShowMessage(ClientDataSet1.Aggregates.Items[0].Value);

4、在单层数据库中不要BDE

使用ClientDataSet代替table,使用ClientDataSet的loadfilename装入cds代替table的tablename的db或者dbf

引用:
原来的程序改造方法: 
加一个ClientDataSet,使用右键assign locate data 
后savetofile,再loadfromfile,后删除table 
将原连table的datasource设为ClientDataSet 
唯一注意的是:要将midas.dll拷到system或者当前目录

5、三层结构的公文包的实现方法

同时设定:filename(*.cds)2.remote server

6、可以对data赋值(从另一个数据集取值)

  1. ClientDataSet2.Data:=ClientDataSet1.Data;
  2. ClientDataSet2.Open;

或者

  1. ClientDataSet2.CloneCursor(ClientDataSet1,true);
  2. ClientDataSet2.Open;

7、附加数据取得

客户程序向应用服务器请求数据。如果TClientDataSet 的FetchOnDemand 属性设为True,客户程序会根据需要自动检索附加的数据包如BLOB字段的值或嵌套表的内容。否则,客户程序需要显式地调用GetNextPacket 才能获得这些附加的数据包。ClientDataSet的packetrecords设置一次取得的记录个数。

8、ClientDataSet与服务器端query连接方法

(1)sql内容为空

  1. ClientDataSet1.Close;
  2. ClientDataSet1.CommandText:=edit1.Text;//即sql内容
  3. ClientDataSet1.Open;

对于没有应用服务器设置filter 如:country like 'A%',filtered=true可实现sql功能。

(2)有参数

如服务端query的sql为
select * from animals 
where name like :dd

则:客户端ClientDataSet

  1. var
  2. pm:Tparam;
  3. begin
  4. ClientDataSet1.Close;
  5. ClientDataSet1.ProviderName:='DataSetProvider1';
  6. pm:=Tparam.Create(nil);
  7. pm.Name:='dd';
  8. pm.DataType:=ftString;
  9. ClientDataSet1.Params.Clear;
  10. ClientDataSet1.Params.AddParam(pm);
  11. ClientDataSet1.Params.ParamByName('dd').AsString:=edit1.Text ;
  12. ClientDataSet1.Open;
  13. pm.Free;
  14. end;

9、数据的更新管理

(1)savepoint 保存目前为止数据状态,可以恢复到这个状态

  1. var
  2. pp:integer;
  3. begin
  4. pp:=ClientDataSet1.SavePoint;
  5. ClientDataSet1.Edit;
  6. ClientDataSet1.FieldByName('姓名').asstring:='古话';
  7. ClientDataSet1.Post;
  8. table1.Refresh;
  9. end;

恢复点 : ClientDataSet1.SavePoint:=pp;

(2)Cancel,RevertRecord

取消对当前记录的修改,只适合没有post的,如果post,调用 RevertRecord 。

(3)CancelUpdate

取消对数据库所有的修改

(4)UndoLastChange(boolean),changecount

取消上一次的修改,可以实现连续撤消。参数为true:光标到恢复处;false:光标在当前位置不动。changecount返回修改记录的次数,一个记录修改多次,返回只一次,但UndoLastChange只撤消一次。

10、可写的recno

对于Ttable和Tquery的recno是只读的,而TClientDataSet的recno可读可写ClientDataSet1.recno:=5;是设第五个记录为当前记录。

11、数据保存

对于table使用post可更新数据,而ClientDataSet1的post只更新内存数据,要更新服务器数据要使ApplyUpdates(MaxErrors: Integer),他有一个参数,是允许发出错误的次数,-1表示无数次,使用simpleobjectbroker时常设为0,实现自动容错和负载平衡。

 
 

clientdataset 做为 单机数据库的 使用 学习的更多相关文章

  1. Xamarin android使用Sqlite做本地存储数据库

    android使用Sqlite做本地存储非常常见(打个比方就像是浏览器要做本地存储使用LocalStorage,貌似不是很恰当,大概就是这个意思). SQLite 是一个软件库,实现了自给自足的.无服 ...

  2. CentOS 7.1静默安装11.2.0.3 64位单机数据库软件

    第1章 CentOS 7.1静默安装11.2.0.3 64位单机数据库软件 1.1  安装前的准备工作 1.1.1      软件准备 1.1.2      检查硬件 注意这里的内存应该满足要求,不然 ...

  3. Redis中单机数据库的实现

    1. 内存操作层 zmalloc 系接口 redis为了优化内存操作, 封装了一层内存操作接口. 默认情况下, 其底层实现就是最简朴的libc中的malloc系列接口. 如果有定制化需求, 可以通过配 ...

  4. 单机数据库优化的一些实践(mysql)

    数据库优化有很多可以讲,按照支撑的数据量来分可以分为两个阶段:单机数据库和分库分表,前者一般可以支撑500W或者10G以内的数据,超过这个值则需要考虑分库分表.另外,一般大企业面试往往会从单机数据库问 ...

  5. 数据库中间件MyCat学习总结(1)——MyCat入门简介

    为什么需要MyCat? 虽然云计算时代,传统数据库存在着先天性的弊端,但是NoSQL数据库又无法将其替代.如果传统数据易于扩展,可切分,就可以避免单机(单库)的性能缺陷. MyCat的目标就是:低成本 ...

  6. 数据库中间件DBLE学习(二) 学习配置schema.xml

    前言 一边有一个经常引诱我让我"娱乐至死"的视频,还有一个不停"鞭策"我让我快点学习的大BOSS.正是有这两种极端的爱才让我常常在自信中明白自己努力的方向.嗯, ...

  7. Redis(二):单机数据库的实现

    概要 本部分内容主要是研究单机数据库.分别介绍单机数据库的实现原理,数据库的持久化,Redis事件,服务器维护管理客户端以及单机服务器的运作机制. 数据库 数据库结构 Redis数据库由redis.h ...

  8. Flas-SQLAchemy数据库操作使用学习笔记

    Flas-SQLAchemy数据库操作使用学习笔记 Flask-SQLALchemy 是一个给你的应用添加 SQLALchemy 支持的 Flask 扩展.SQLALchemy 是Python语言的S ...

  9. 集群中节点(Node)与单机数据库的区别

    集群中节点(Node)与单机数据库的区别: 区别项 集群中节点(Node) 单机数据库 只能使用0号数据库 是 都可以使用

随机推荐

  1. 自己写的SqlHelper,提示在调用"Fill"前,SelectCommand 属性尚未初始化.错误

    namespace 操作数据{    class SqlHelper    {        public DataSet SqlTODs(string cmdstring)        {     ...

  2. Bootstrap前端框架快速入门专题

    1.Bootstrap简介 Bootstrap,出自自 Twitter,是目前最受欢迎的前端框架. Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的前端框架,它简洁灵活,使得 W ...

  3. vue图片不存在时加载默认图片

    在文件中的img那里添加:οnerrοr="errorImg01",然后设置errorImg01的路径如果直接写成 errorImg01: ('../../assets/image ...

  4. DRF框架 之基础配置

    Vue框架的总结 """ 1.vue如果控制html 在html中设置挂载点.导入vue.js环境.创建Vue对象与挂载点绑定 2.vue是渐进式js框架 3.vue指令 ...

  5. rest_framework框架的认证、权限

    REST_FRAMEWORK = { "DEFAULT_AUTHENTICATION_CLASSES": ["app01.utils.TokenAuth", ] ...

  6. GUI学习之三十一—QLabel学习总结

    前面所有的控件都是归于输入控件的,下面我们要总结下展示控件的用法.首先要将的就是最常用的QLabel. 一.描述  标签控件(QLabel)提供了文本或图像显示的功能,可以用来显示 普通文本 数字 富 ...

  7. mysql 5.0存储过程学习总结

    mysql存储过程的创建,删除,调用及其他常用命令 本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加). QQ群:   281442983 (点击链接加入群:http://jq.q ...

  8. vue-jwt 实战

    作用:把用户的信息储存到客户端 每次客户端带上token 校验是否登陆过 1.使用主要有两个api jwt.sign(payload, secretOrPrivateKey, [options, ca ...

  9. Django【第2篇】:Django之反向解析

    Django框架之第二篇 一.知识点回顾 1.MTV模型 model:模型,和数据库相关的 template:模板,存放html文件,模板语法(目的是将变量如何巧妙的嵌入到HTML页面中). view ...

  10. 整合spring cloud云架构 - 根据token获取用户信息

    根据用户token获取yoghurt信息的流程: /** * 根据token获取用户信息 * @param accessToken * @return * @throws Exception */ @ ...