在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;