2011-12-23 68 views
1

德爾福獲取值我有數據庫悖論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>對不起,我的英語不好。

回答

2

在您的形式(或數據模塊)聲明一個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當前記錄中產品代碼字段的值進行定位。

您可以通過簡單地從產品數據集傳送信息到OrderTable利用這在​​您的HandleProductSelection方法:

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

非常感謝你。我的靈魂更加糟糕。我在DBGrid上監聽單元格是否被加載並執行一些操作(如果.FieldName ='Product'),那麼DBGrid1.Fields [productIndex] .value:= ... – 2011-12-23 20:00:12