delphi TClientDataSet的使用以及遇到的坑  
官方Delphi 学习QQ群: 682628230(三千人)
频道

delphi TClientDataSet的使用以及遇到的坑


TClientDataSet的使用以及遇到的坑


在Delphi未加入FireDAC之前,似乎是没有内存表控件的(也许有,可能我不知道吧),但是可以用TClientDataSet控件来做内存表使用,即使有了FireDAC可以使用TFDMemTable,我还是觉得TClientDataSet更好用一些。


做内存表使用

创建

  with ClientDataSet do

  begin

    Close;

    //定义字段

    with FieldDefs do

    begin

      Clear;

      Add('Field1', ftInteger, 0, False);

      Add('Field2', ftString, 0, False);

      ......

    end;

    //创建结构

    CreateDataSet;

    Open;

  end;

排序

在定义字段后,创建结构前,也可以指定排序字段。


IndexFieldNames := 'Field1';

做缓存使用

需要结合TDataSetProvider来使用。以下示例以使用ADO组件为例。


拉取数据

方法1

TDBGrid->TDataSource->TClientDataSet->TDataSetProvider->TADOQuery->TADOConnection


  ClientDataSet.ProviderName := DataSetProvider.Name; //设计器里设置过就不需要了

  with ClientDataSet do

  begin

    Close;

    CommandText:='select * from T_Table';

    Open;

  end;

方法2

TDBGrid->TDataSource


TClientDataSet->TDataSetProvider->TADOQuery->TADOConnection


  ClientDataSet.Data := DataSetProvider.Data;

提交数据

使用方法1时,可以直接使用下面的语句:


  ClientDataSet.ApplyUpdates(-1);

  //或

  DataSetProvider.ApplyUpdates(ClientDataSet.Date, -1, Count);

按理说这样就可以了,而且不需要写SQL语句,但事实是Insert一般没问题,Update就很容易出错,所以提交还是自己老老实实写SQL语句比较保险。


  with ClientDataSet do

  begin

    First;

    while not Eof do

    begin

      case UpdateStatus of

        usModified:

          begin

            //更新处理

          end;

        usInserted:

          begin

            //插入处理

          end;

        usDeleted:

          begin

            //删除处理

          end;

      end;

      Next;

    end;

  end;


来源:https://my.oschina.net/afrusrsc/blog/3000552


推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.11022615432739 seconds