0

同じような経験をしたことがある人がいないか気になりました。問題の原因を突き止めようとしていますが、問題はありません。Report Builder レポートを含む Delphi 5 のプロジェクトがあります。reportbuilder のアップグレード バージョンが必要だったので、Delphi 7 でプロジェクトを実行してみました。プロジェクトを実行し、ボタンをクリックしてレポートを表示すると、正常に表示されます。ただし、paramstr を使用してレポートを実行し (showmainform を false に設定)、レポート プロシージャの実行を表示すると、スタック オーバーフロー エラーが発生します。

元のコードは次のとおりです。

 if lowercase(ParamStr(1)) = 'termsexceeded' then begin
    reportsdata.termsexceeded.close;
    reportsdata.termsexceeded.open;
    reports.ppTermsExceeded.print;
    reportsdata.termsexceeded.close;
    application.terminate;
  end; 

そして、.print関数でスタックオーバーフローエラーが発生しました。

Delphi 7 で動作するコードは次のとおりです。

 if lowercase(ParamStr(1)) = 'termsexceeded' then begin
    reportsdata.termsexceeded.close;
    reportsdata.termsexceeded.open;
    reports.left := -10000;
    reports.show;
    reports.ppTermsExceeded.print;
    reportsdata.termsexceeded.close;
    application.terminate;
  end; 

問題が Delphi 7 にあるのか Reportbuilder にあるのかを確認するためにこれをデバッグする方法について誰か提案がありますか?

レポート フォームの .show イベントにイベントはありません。

この問題を解決する方法についてのアドバイスをいただければ幸いです。

よろしく

4

1 に答える 1

8

スタック オーバーフローが発生した場合は、デバッガを使用します。OS が例外をスローすると、プログラムが中断されます。その時点で、デバッガーのコール スタックウィンドウを使用して、そこにつながる関数呼び出しのパスを確認できます。おそらく、特定の関数または一連の関数が何度も繰り返されていることがわかります。

繰り返しパターンを見つけたら、コードをチェックして、繰り返している理由を確認します。変更されたはずの状態が変更されていないことを確認します。

于 2012-10-29T13:15:51.350 に答える