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