如何在运行时向clientdataset添加字段? [英] How can i add fields to a clientdataset at runtime?

查看:817
本文介绍了如何在运行时向clientdataset添加字段?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个TClientdataset,它由TTable的数据集提供。
数据集有两个字段:postalcode(string,5)和street(string,20)



在运行时我想显示第三个字段20)。该字段的例程获得邮政编码作为参数,并给出城市属于这个邮政编码。



问题仅在于将计算字段添加到已存在的字段。填充数据本身不是问题。



我试过:

  cds.SetProvider(Table1); 
cds.FieldDefs.Add('city',ftString,20);

cds.Open;

cds.Edit;
cds.FieldByName('city')。AsString:='Test'; // - > errormessage(字段未找到)
cds.Post;

cds是我的clientdataset,Table1是一个悖论表,但问题是与其他数据库相同。



提前感谢

解决方案

如果您要添加其他字段除了基础数据中存在的那些之外,还需要手动添加现有字段。当您添加字段时,数据集需要关闭,但如果您不想手动跟踪所有字段详细信息,则可以使用 FieldDefs.Update 创建必要的元数据。基本上是这样的:

  var 
i:Integer;
字段:TField;
begin
cds.SetProvider(Table1);

//添加现有字段
cds.FieldDefs.Update;
for i:= 0 to cds.FieldDefs.Count - 1 do
cds.FieldDefs [i] .CreateField(cds);

//添加计算字段
字段:= TStringField.Create(cds);
Field.FieldName:='city';
Field.Calculated:= True;
Field.DataSet:= cds;

cds.Open;
end;


另请参阅优秀文章 Cary Jensen


I have aTClientdataset, which is provided by a TTable’s dataset. The dataset has two fields: postalcode (string, 5) and street (string, 20)

At runtime I want to display a third field (string, 20). The routine of this field is getting the postalcode as a parameter and gives back the city belongs to this postalcode.

The problem is only about adding a calculated field to the already existing ones. Filling the data itself is not the problem.

I tried:

  cds.SetProvider(Table1);
  cds.FieldDefs.Add('city', ftString, 20);

  cds.Open;

  cds.Edit;
  cds.FieldByName('city').AsString := 'Test';  // --> errormessage (field not found)
  cds.Post;

cds is my clientdataset, Table1 is a paradox Table, but the problem is the same with other databases.

Thanks in advance

解决方案

If you want to add additional fields other than those exist in the underlying data, you need to also add the existing fields manually as well. The dataset needs to be closed when you're adding fields, but you can have the necessary metadata with FieldDefs.Update if you don't want to track all field details manually. Basically something like this:

var
  i: Integer;
  Field: TField;
begin    
  cds.SetProvider(Table1);

  // add existing fields
  cds.FieldDefs.Update;
  for i := 0 to cds.FieldDefs.Count - 1 do 
    cds.FieldDefs[i].CreateField(cds);

  // add calculated field
  Field := TStringField.Create(cds);
  Field.FieldName := 'city';
  Field.Calculated := True;
  Field.DataSet := cds;

  cds.Open;
end;


Also see this excellent article by Cary Jensen.

这篇关于如何在运行时向clientdataset添加字段?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆