以下のコードを参照してください。これは、ClientDataSetのAfterOpenイベントです。
2番目のステートメントがコンパイルされないのはなぜですか?
エラーメッセージは次のとおりです。宣言されていない識別子: 'LogChanges'
3番目のステートメントがコンパイルされます。
3番目のステートメントは正しいですか?最初のステートメントと同じですか?
'DataSet'を使用できない場合、なぜそれが渡されますか?最初のステートメントはなぜコンパイルされますが、2番目のステートメントはコンパイルされませんか?
procedure TCTL_Configurator_form.cdsZonesAfterOpen(DataSet: TDataSet);
begin
cdsZones.LogChanges := FALSE; // This line compiles
DataSet.LogChanges := FALSE; // This line does NOT compile
TClientDataSet(DataSet).LogChanges := FALSE; // This line compiles
end;
イベントが「TClientDataSet」またはその子孫でない 'DataSet'を渡された場合、3番目のオプションが実行時にアクセス違反で失敗する可能性があることに注意してください。 – afrazier
私は私の質問の3行目でコンプライアーエラーに言及します。 – AndersJ
afrazierでは、イベントは、元々ダブルクリックして作成したデータセットからのみ呼び出されます。同じイベントが他のデータセットからも呼び出された場合、アクセス違反が発生する可能性がありますか?もしそうなら、もっと良い方法がありますか? – AndersJ