在操作数据库中使用 FClientDataSet 的 FieldsChange 来触发某件事代码如下:
procedure
FieldsChange(Sender: TField);
begin
TField(Sender).Value : = FClientDataSet.Fields.FieldByName( ' ID ' ).Value + TField(Sender).Value;
end ;
begin
TField(Sender).Value : = FClientDataSet.Fields.FieldByName( ' ID ' ).Value + TField(Sender).Value;
end ;
程序来执行的时候报
estackoverflow with message 'stack overflow'
错误,堆栈溢出。
是陷入重复循环。
修改代码如下
代码
procedure
TDBOperator.PW_FieldsChange(Sender: TField);
begin
TField(Sender).OnChange : = nil ;
with FClientDataSet do
begin
Edit;
TField(Sender).Value : = Fields.FieldByName( ' ID ' ).Value + TField(Sender).Value;
end ;
TField(Sender).OnChange : = PW_FieldsChange;
FieldChange(Sender);
end ;
begin
TField(Sender).OnChange : = nil ;
with FClientDataSet do
begin
Edit;
TField(Sender).Value : = Fields.FieldByName( ' ID ' ).Value + TField(Sender).Value;
end ;
TField(Sender).OnChange : = PW_FieldsChange;
FieldChange(Sender);
end ;
先关掉,做某事,手工触发一下,再加上触发事件。OK