在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;
在定义字段后,建立结构前,也能够指定排序字段。ide
IndexFieldNames := 'Field1';
须要结合TDataSetProvider
来使用。如下示例以使用ADO组件
为例。设计
TDBGrid
->TDataSource
->TClientDataSet
->TDataSetProvider
->TADOQuery
->TADOConnection
code
ClientDataSet.ProviderName := DataSetProvider.Name; //设计器里设置过就不须要了 with ClientDataSet do begin Close; CommandText:='select * from T_Table'; Open; end;
TDBGrid
->TDataSource
排序
TClientDataSet
->TDataSetProvider
->TADOQuery
->TADOConnection
内存
ClientDataSet.Data := DataSetProvider.Data;
使用方法1
时,能够直接使用下面的语句:it
ClientDataSet.ApplyUpdates(-1); //或 DataSetProvider.ApplyUpdates(ClientDataSet.Date, -1, Count);
按理说这样就能够了,并且不须要写SQL语句,但事实是Insert
通常没问题,Update
就很容易出错,因此提交仍是本身老老实实写SQL语句比较保险。io
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;