procedure TOrderForm.TBDetailNewRecord(DataSet: TDataSet); {當新增一個明細表記錄時所完成的動作。} begin TBDetail.FieldByName('OrderID').AsInteger:=TBOrder.FieldByName('OrderID').AsInteger; file://將主表的orderID字段賦給明細表的orderID字段,這個字段是兩個表的關聯字段
end;
procedure TOrderForm.TBDetailUpdateRecord(DataSet: TDataSet; UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction); {當實際更新數據庫表時,需要同時進行的操作在onUpdateRecord事件中定義, 在本例當中是進行明細表和庫存表的級聯更新操作。 注重:在本過程當中所進行的操作是在實際更新數據庫時所進行的動作, 而不是更新客戶端的緩存數據時所進行的動作} Var temp_query:TQuery; begin if UpdateKind=ukInsert then file://假如更新類型是插入一個新的記錄,那么更新相應的庫存量 with temp_query do begin close; SQL.clear; SQL.add('update storage set stocks=stocks-:amount'); SQL.add(' where commondityID=:commondityID'); paramByName('amount'):=TBOrder.FieldByName('amount').AsFloat; ParamByName('commondityID'):=TBDetai.FieldByName('commondityID').AsInteger; execSQL; file://執行更新庫存的sql語句,將相應的庫存量減去。
end;
end;
procedure TOrderForm.TBDetailAfterPost(DataSet: TDataSet); {當對明細表的記錄進行修改,并提交(post)之后,執行本過程中的語句。 注重:這種提交是針對客戶端數據的,并沒有真正反映到數據庫中去。 在本例當中,實現的功能是計算主表的總金額字段} begin TBOrder.FieldByName('money'):=0; with TBDetail do begin first; while not eof do begin TBOrder.FieldByName('money'):=TBOrder.FieldByName('money')+ FieldByName('price').AsFloat*FieldByName('amount'); file://將明細表的金額累加到主表的金額字段 next; end; end;