求救。如果动态增加计算字段。

ZXYSOSO 2006-07-11 05:35:11
ClientDataSet1的SQL是Select a,b,c From Test_M

现在想动态增加一个计算字段e,是integer类型
Test_M的字段b,c也是integer类型,

增加计算字段的目的是:e=b*c
在ClientDataSet1CalcFields事件得出e的值。


求助高手帮助。
...全文
189 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
liangyong007a 2006-07-14
  • 打赏
  • 举报
回复
procedure TForm1.FormCreate(Sender: TObject);
var
NewField:TField;
i:integer;
begin
//表中有两字段SName,Birth,现在我们动态生成一个计算字段Age,显示出年龄
NewField:=TStringField.Create(ADOTable);
//创建一个TStringField类型的字段
ADOTable.Close;
for i:=0 to ADOTable.Fields.Count-1 do
ADOTable.Fields[0].Free;//释放所有的静态字段
for i:=0 to ADOTable.FieldDefs.Count-1 do
ADOTable.FieldDefs.Items[i].CreateField(ADOTable);
//根据FieldDefs的字段信息动态的生成静态字段
NewField.Size:=5;
NewField.FieldName:='Age';
NewField.FieldKind:=fkCalculated;
//设置这个这字段为计算字段
NewField.DataSet:=ADOTable;
//把这个字段加到ADOTable上
ADOTable.Open;
end;

procedure TForm1.ADOTableCalcFields(DataSet: TDataSet);
var
YY1,YY2,MM,DD:Word;
TmpDate:TDate;
begin
DecodeDate(Date,YY1,MM,DD);
TmpDate:=DataSet.FieldByName('Birth').AsDateTime;
DecodeDate(TmpDate,YY2,MM,DD);
DataSet.FieldByName('Age').AsString:=IntToStr(YY1-YY2)+'岁';
//在OnCalField中显示出年龄
end;
superyys 2006-07-12
  • 打赏
  • 举报
回复
必需自己继承ClientDataSet控件才能实现,我以前做过的.
ZXYSOSO 2006-07-12
  • 打赏
  • 举报
回复
楼上,我要的是用代码动态增加计算字段的。
如果是按照你的做法,我就没有必要发贴子求助了。
liangyong007a 2006-07-11
  • 打赏
  • 举报
回复
这个直接双击ClientDataSet1,在参数中增加一个计算字段e,设为integer.
在ClientDataSet1CalcFields中直接计算就行了
ZXYSOSO 2006-07-11
  • 打赏
  • 举报
回复
注意,不能更改表的结构。

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧