自动计算字段引起死循环的问题
记录集有三个字段 price单价、amout数量、charge金额,记录集的locktype属性为ltBatchOptimistic
单价或数量改变时,自动计算金额 charge:=amount*price;
金额改变时,自动计算单价 price:=charge/amount;
问题:单价或数量改变时,计算出金额,给金额赋值,这时候,金额发生改变,触发金额自段的onchange事件,在onchange事件中开始计算单价,然后给单价赋值,又触发单价的onchange事件(虽然这时赋给单价的值跟上次输入的值一致,但确实引发了单价的onchange事件),这样就导致了死循环。
大家有什么好的解决方法呢?
procedure TForm1.qry1priceChange(Sender: TField);var price,amount,charger:Real;begin price:=Sender.DataSet.FieldByName('price').AsFloat; amount:=Sender.DataSet.FieldByName('amount').AsFloat; charge:=price*amount; if charge<>0 then Sender.DataSet.FieldByName('charge').AsFloat:=charge;end;procedure TForm1.qry1amountChange(Sender: TField);var price,amount,charger:Real;begin price:=Sender.DataSet.FieldByName('price').AsFloat; amount:=Sender.DataSet.FieldByName('amount').AsFloat; charge:=price*amount; if charge<>0 then Sender.DataSet.FieldByName('charge').AsFloat:=charge;end;procedure TForm1.qry1chargeChange(Sender: TField);var price,amount,charger:Real;begin amount:=Sender.DataSet.FieldByName('amount').AsFloat; charge:=Sender.DataSet.FieldByName('charge').AsFloat; if amount<>0 then price:=charge/amount else exit; Sender.DataSet.FieldByName('price').AsFloat:=price;end;