database - 如何在运行时向客户端数据集添加字段?

标签 database delphi dataset tclientdataset

我有一个 TClientDataSet,它由 TTable 的数据集提供。 数据集有两个字段:邮政编码(字符串,5)和街道(字符串,20)

在运行时我想显示第三个字段(字符串,20)。该字段的例程是获取邮政编码作为参数,并返回属于该邮政编码的城市。

问题仅在于将计算字段添加到现有字段中。填充数据本身不是问题。

我试过:

  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是我的clientdataset,Table1是一个paradox Table,但是其他数据库也是一样的问题。

提前致谢

最佳答案

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

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;


另见 excellent article通过 Cary Jensen .

关于database - 如何在运行时向客户端数据集添加字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4934103/

相关文章:

sql - 如何获取整个数据库中的表名和特定列的序号位置

delphi - 在设计时,您可以防止组件在第一次选择单击时移动吗?

python - 你如何在 Pandas 中分离列名和它的值?

java - 如何将具有值的列添加到 Spark Java 中的新数据集?

sql - 如何使用滞后函数跳过一行? PostgreSQL 9.3

iPhone SQLite数据库读写

mysql - 使用一条命令同步删除多个表中的数据

注册时的 Delphi 包文件位置

c++ - 在Qt中构建DLL并在Visual Studio+Del​​phi中使用

python - 从 python 中的字典创建 postgres 表