在Delphi中从查找字段获取值

时间:2011-12-23 15:26:08

标签: delphi bde paradox

我有数据库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&gt;抱歉我的英语不好。

1 个答案:

答案 0 :(得分:2)

在表单(或datamodule)中声明HandleProductSelection方法:

procedure HandleProductSelection(Sender: TField);

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

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

这确保无论何时打开OrderTable,事件处理程序都将附加到正确的字段,这反过来将确保每当“产品代码”字段的内容发生更改时都会调用HandleProductSelection方法。

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

只需将Product数据集中的信息传输到OrderTable,即可在HandleProductSelection方法中利用此功能:

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