如何向数据集添加查找字段?

时间:2009-08-19 00:07:48

标签: delphi dataset lookup

我有一个数据集,我需要一个查找字段。问题是,此数据集的结构由查询结果定义。在设置.Active = true;之前我无法将该字段添加为TFieldDef,因为它被覆盖了,并且在运行查询后我无法添加因为您无法更改结构开放数据集。

必须有一些方法可以做到这一点。有谁知道怎么做?

编辑:似乎对我正在寻找的东西感到困惑。我不是在查询时寻找查找。我正在寻找一个查找字段,一个TField对象,其中FieldKind = fkLookup,因此它可以与数据感知查找组合框一起使用,用于在查询返回结果后编辑数据。这与SQL无关,也与Delphi的数据集模型和数据感知控件无关。

4 个答案:

答案 0 :(得分:4)

最简单的方法是在设计时定义持久字段。

您还可以修改SQL语句以从服务器获取计算值。

答案 1 :(得分:3)

您需要在打开数据集之前自己创建字段。

首先从数据库中获取所有字段定义

  DataSet.FieldDefs.Update;

然后遍历每个fielddef并创建普通字段,并在适当的位置创建查找字段。像这样的简化版代码;

  for I := 0 to DataSet.FieldDefs.Count - 1 do
  begin
    // Allocate a normal field
    AField := DataSet.FieldDefs[I].CreateField(DataSet);

    // Add lookup field if we have another table to look it up from
    if (??? this is the key field of a lookup table) then
    begin
      AField := TStringField.Create(DataSet.Owner);
      AField.FieldName := ???;
      AField.DataSet := DataSet;
      AField.FieldKind := fkLookup;
      AField.KeyFields := ???;
      AField.LookupKeyFields := ???;
      AField.LookupDataSet := ???;
      AField.LookupResultField := ???;
    end;
  end;

然后您可以打开数据集。

答案 2 :(得分:0)

您的表单上有两个数据集(例如 tblOrder tblCustomer
订单中的一个字段是客户表 customerId 的外键 客户表的密钥字段为标识,名称= 名称

添加所有字段(右键单击数据集,字段编辑器,添加所有字段
然后右键单击订单表并选择字段编辑器,然后右键单击新字段

Name = myLookup,Type为string,Size为xx, FieldType = Lookup
Key field = customerid,dataset = tblCustomer,lookup Key = Id,Result field = Name

现在定义了查找字段 使其在编辑器中工作(例如在TDBLookupCombo中) 将数据源添加到表单 dsOrder
将它连接到tblOrder。

现在设置datasource = dsOrder,Field = myLookup
您不必设置查找源...

答案 3 :(得分:0)

让您拥有带有字段Orders(类型为CustomerId的表Integer和带有字段Customers(类型为CustomerId的表Integer CustomerName)和String(类型为table_main)。然后,在Delphi IDE中,放置表单数据集table_lookupOrders(分别用于表Customerstable_main)。打开CustomerId的字段编辑器,添加(除其他外)字段decimal value = Convert.ToDecimal(command.ExecuteScalar()); ,然后创建具有字段属性的新字段:

  

名称:客户名称(例如)

     

类型:整数

     

字段类型:查找

并具有查找属性:

  

数据集:table_lookup

     

关键字段:CustomerId

     

查阅关键字:CustomerId

     

结果字段:CustomerName

希望它现在仍然有意义。