【问题标题】:In Delphi get value from lookup field在 Delphi 中从查找字段中获取值
【发布时间】:2011-12-23 15:26:07
【问题描述】:

我有数据库 Paradox 7。 两张表:

Order
--------
OCode
ODate // Buy date
OCount // Product count
PPrice // Price of product in current moment
PCode // Product code
CCode //Client code


Product
---------
PCode
PName
PPrice 

在 OrderTable(TTable) 上,我添加了查找字段 Product(relation PCode(Order)<->PCode(Product)),它返回 PName。当我选择DBGrid 字段中的产品Order.PPrice 商店Product.PPrice 时,我需要

P.S>对不起,我的英语不好。

【问题讨论】:

    标签: delphi bde paradox


    【解决方案1】:

    在表单(或数据模块)中声明HandleProductSelection 方法:

    procedure HandleProductSelection(Sender: TField);
    

    AfterOpen 处理程序附加到 OrderTable。在该事件处理程序中,找到产品代码字段并将 HandleProductSelection 方法附加到该字段的 OnChange 事件。

    procedure TForm1.OrderTableAfterOpen(DataSet: TDataSet);
    var
      Field: TField;
    begin
      Field := OrderTable.FindField('PCode'); 
      Field.OnChange := HandleProductSelection;
    end;
    

    这可确保无论何时打开您的 OrderTable,事件处理程序都将附加到正确的字段,从而确保在产品代码字段的内容发生更改时调用 HandleProductSelection 方法。

    实现 HandleProductSelection 方法。如果您使用字段编辑器定义了产品代码的查找字段,您的表单(或数据模块)上有一个产品数据集。包含产品信息的数据集将根据您的 OrderTable 的当前记录中的 Product code 字段的值进行定位。

    您可以在 HandleProductSelection 方法中利用这一点,只需将信息从 Product 数据集传输到 OrderTable:

    procedure TForm1.HandleProductSelection(Sender: TField);
    begin
      OrderTable.FieldByName('PPrice').AsCurrency := 
        DataSetProduct.FieldByName('PPrice').AsCurrency;
    end;
    

    【讨论】:

    • 非常感谢您。我的灵魂更糟。当单元格被提升 colexit 时,我在 DBGrid 上收听并执行此操作(如果 .FieldName = 'Product')然后 DBGrid1.Fields[productIndex].value:= ...
    猜你喜欢
    • 1970-01-01
    • 2014-11-03
    • 2014-12-03
    • 2023-03-30
    • 1970-01-01
    • 2012-07-09
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多