Delphi手动创建数据集
習慣了.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;
轉載于:https://www.cnblogs.com/dashan9zj/archive/2009/02/09/1386970.html
總結
以上是生活随笔為你收集整理的Delphi手动创建数据集的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三种近距离通信技术(WIFI、蓝牙、NF
- 下一篇: std::multimap