• estackoverflow with message 'stack overflow'


    在操作数据库中使用 FClientDataSet 的 FieldsChange 来触发某件事代码如下:

    procedure FieldsChange(Sender: TField);
    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;
    先关掉,做某事,手工触发一下,再加上触发事件。OK
  • 相关阅读:
    ES6
    ES6
    ES6
    ES6
    ES6
    ES6
    ES6
    IOS 最新开发上架流程 以及发布打包注意事项
    JavaScript Arguments
    函数防抖和函数节流
  • 原文地址:https://www.cnblogs.com/yanyyx/p/1771079.html
Copyright © 2020-2023  润新知