在操作数据库中使用 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