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