改变自己
我可以改变世界 改变自己

习惯了.net的DataTable,便习惯性的认为Delphi中也有类似的东西,结果搞了好久才搞定,看来看去是拿着Delphi实现.net的思想,生搬硬套了,不过倒也解决了一些问题语言间的思想差别还是有的呃。

1数据集的创建CreatDataSet: TDataSet;

目标是创建一个类似于DataTable的对象,我们可以指定列的字段,也可以手动添加行。

在Delphi中是用DB.TDataSet来实现的(相当于DataTable,与.net的DataSet可是两个概念啊)。

在这里要用到DBClient.TClientDataSet,至于两者的关系,自己去查吧。

方法如下:

function TForm3.CreateDataSet: TDataSet;

var

dsTemp:TDataSet;

cdsTemp: TClientDataSet;

begin

//初始化

dsTemp := TDataSet.Create(Application);

try

    //字段名设置

    with dsTemp.FieldDefs do

    begin

      Add('code',ftString,8);

      Add('name',ftString,20);

      Add('Number',ftInteger);

    end;

    //创建DataSet

    cdsTemp := TClientDataSet.Create(Application);

    if dsTemp.FieldDefs <> nil then

    begin

      cdsTemp.FieldDefs.Assign(dsTemp.FieldDefs);

      cdsTemp.CreateDataSet;

      result := (cdsTemp as TDataSet);

    end;

finally

    //内存释放

    dsTemp.Free;

end;

end;

2 数据集数据的添加AddDataToSet;很简单的 打开数据集-添加行-赋值-提交

function TForm3.AddDataToSet(AdsData: TDataSet): TDataSet;

var

intLoop:Integer;

begin

//打开数据集

AdsData.Open;

with AdsData do

begin

    for intLoop := 0 to 10 do

    begin

      Append;//添加

      FieldByName('Code').AsString := 'Code' + intToStr(intLoop);

      FieldByName('Name').AsString := 'Name' + intToStr(intLoop);

      FieldByName('Code').AsInteger := intLoop;

      post;//提交

    end;

end;

end;

3 修改数据集中某个Field的值 ChangeDataSetValue。这个在.net中可以直接改,不过在这里还是有区别的。这里我们把刚才建的数据集中Name Field的值给改掉

示例代码如下:

   AdsData.Open;                                      //打开

   AdsData.First;                                    

   while Not AdsData.Eof do

   begin

     AdsData.FieldByName('Name').ReadOnly := false;     //只读属性修改

     AdsData.Edit;                                      //打开编辑

     AdsData.FieldByName('Name').AsString := 'NewName'; //修改

     AdsData.Post;                                      //提交

     AdsData.Next;

   end;

posted on 2009-02-09 17:42  dashan  阅读(6047)  评论(2编辑  收藏  举报