各位高手,为什么我一按“隐患录入”按钮(即:新建数据表记录),就会出现“Stack overflow”的错误提示?    我想编一个“隐患录入、汇总”的小程序,以减轻工作压力。但本人属于Delphi没入门的货色,出了错,都不知道错在哪儿,请各位高手指教。详细介绍如下:程序中体现到实际工作的数据表共有以下12个字段:编号    检查日期   被检单位  责任人   检查人     隐患内容    整改措施  整改期限  检查单位意见  复查日期  复查人  复查情况    在我的实际工作中,分成两步。第一步,每天入井检查到隐患后,点击“隐患录入”按钮,录入新隐患,这一步操作在数据库表中,从编号字段开始,截止到检查单位意见字段结束。第二步,“整改期限”到后,再次入井进行复查(如6月1日检查并进行隐患录入后,若“整改期限”规定为2日,则在6月3日进行复查),这一步操作在数据表中,需要修改“复查日期、复查人、复查情况”三个字段,(第二步在程序中,我将其放在“隐患跟踪”按钮的OnClick事件中,当点击“隐患跟踪”按钮时,数据表成为“修改”状态,只修改这三个字段)。    同时,由于每日入井检查的隐患,每一个工作地点绝对不会只有一条隐患,并且只要有一条隐患,就绝对有一条整改措施。所以,我想在进行“隐患录入”操作时,数据表保存为:一个编号的记录中,隐患内容和整改措施字段中包含N条内容。其余字段无此种现象。为实现这一目的,我将数据表中的“隐患内容、整改措施”做为一个从表,其余字段做为一个主表来进行存取。主表字段:编号   检查日期   被检单位  责任人   检查人  整改期限  检查单位意见  复查日期  复查人  复查情况从表字段:父编号  编号  内容类型  文本内容。从表中“父编号”字段与主表中的“编号”字段进行关联。另外,由于是想将“隐患内容、整改措施”两个字段放在从表中,所以建立“内容类型”字段,其为“整数”类型,当其为1时,表示“文本内容”字段中存储的数据是“隐患内容”,当其为2时,表示“文本内容”字段中存储的数据是“整改措施”。然后,我在“隐患录入”按钮的OnClick事件中输入如下代码:procedure TfmHiddenRecord.fmHRBtnNew26Click(Sender: TObject);
Var
   HiddenLines, MeasureLines: Integer;
begin
 DMMain.dsHiddenMaster.DataSet.Append;
 fmHRedCode0.Text := IntToStr(DMMain.dsHiddenMaster.DataSet.RecordCount + 1);
 DMMain.dsHiddenMaster.DataSet.FieldByName('隐患编号').AsInteger := DMMain.dsHiddenMaster.DataSet.RecordCount + 1;
 DMMain.dsHiddenMaster.DataSet.FieldByName('检查日期').AsDateTime := fmHRdtExamine1.Date;
 DMMain.dsHiddenMaster.DataSet.FieldByName('被检单位').AsString := fmHRcboxUnit2.Text;
 DMMain.dsHiddenMaster.DataSet.FieldByName('负责人').AsString := fmHRcboxReceived3.Text;
 DMMain.dsHiddenMaster.DataSet.FieldByName('检查人').AsString := fmHRcboxRummager4.Text;
 DMMain.dsHiddenMaster.DataSet.FieldByName('整改期限').AsInteger := StrToInt(fmHRcboxDeadline5.Text);
 DMMain.dsHiddenMaster.DataSet.FieldByName('检查单位意见').AsString := fmHRedIdea6.Text;
 For HiddenLines := 0 To fmHRreDetails7.Lines.Count - 1 Do
  begin
   DMMain.dsHiddenDetails.DataSet.Append;
   DMMain.dsHiddenDetails.DataSet.FieldByName('父编号').AsInteger := DMMain.dsHiddenMaster.DataSet.FieldByName('隐患编号').AsInteger;
   DMMain.dsHiddenDetails.DataSet.FieldByName('编号').AsInteger := DMMain.dsHiddenMaster.DataSet.FieldByName('隐患编号').AsInteger + StrToInt('-1');
   DMMain.dsHiddenDetails.DataSet.FieldByName('内容类型').AsInteger := 1;
   DMMain.dsHiddenDetails.DataSet.FieldByName('文本内容').AsString := fmHRreDetails7.Lines.Strings[HiddenLines];
  end;
 For MeasureLines := 0 To fmHRreMeasure8.Lines.Count - 1 Do
  begin
   DMMain.dsHiddenDetails.DataSet.FieldByName('内容类型').AsInteger := 2;
   DMMain.dsHiddenDetails.DataSet.FieldByName('文本内容').AsString := fmHRreMeasure8.Lines.Strings[MeasureLines];
  end;
end;以上代码中,fmHiddenRecord是窗体名称。fmHRBtnNew26是“隐患录入”按钮名称。DMMain是TDataMoudal的名称。dsHiddenDetails是从表的TDataSource组件,dsHiddenMaster是主表的TDataSource组件。fmHRedCode0指的是主表中的编号,是TEdit组件。在每次新建记录时,将其自动+1,从而避免主表中的主键——“编号”字段重复。但是在运行时,却出现“Stack overflow”的错误提示。我不知道哪里出错了。请各位高手帮我看看,并多多指教。我的QQ:593601458   E-mail:[email protected]另外,本人欲拜一高手为师,若有愿意当我师傅的,请加我QQ。