在继续执行this question时,使用FireDac并在调用BeforePost事件中调用一个调用Abort的函数时,会导致系统完全中止,从而中断了围绕该中止运行的循环。

while not fdOtherQuery.eof do begin
  fdQuery.insert;
  fdquery.fields[0].asstring := fdOtherQuery.fields[0].asstring;
  fdquery.post;
fdOtherQuery.next;
end;


发布前:

procedure TForm1.AzureDayarKriaAdditionsBeforePost(DataSet: TDataSet);
begin
  calculcation;
end;

procedure calculaction;
begin
  if fdQuery.fields[0].asstring = 0 then abort;
end;


如果调用了计算中止,则


而不是fdOtherQuery.eof开始


也停止了

最佳答案

Abort引发一个静默异常,可以使用try ...捕获该异常。

while not fdOtherQuery.eof do begin
  fdQuery.insert;
  fdquery.fields[0].asstring := fdOtherQuery.fields[0].asstring;
  try
    fdquery.post;
  except
    on E: EAbort do
    begin
      // log the error (when needed)
    end;
  end;
  fdOtherQuery.next;
end;

08-06 08:34