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;