DBGrid > (DataSource > ADOQuery > ADOConnection) DBNavigator > (DataSource > ADOQuery > ADOConnection)
1
0
私のアプリケーションでは、次のようにリンクされたこれらのデータコンポーネントがあります。
DBGrid > (DataSource > ADOQuery > ADOConnection) DBNavigator > (DataSource > ADOQuery > ADOConnection)
ユーザーがDBGridから別の行を選択するか、DBNavigatorを使用するたびに、ADOQueryの現在のレコードが変更されます。 しかし、ユーザーが現在のレコードにいくつかの変更を加え、そこから離れると、行った変更は失われます。
変更があった場合にユーザーが現在のレコードから移動することを確認する必要がある確認ダイアログを表示したいと思います。 そして、ユーザーが「いいえ」をクリックすると、アプリケーションが現在のレコードを変更しないようにします。
コードはどこに挿入すればよいですか? ユーザーが現在のレコードから移動する前に発生するのはどのイベントですか?アクションの継続を停止するにはどうすればよいですか?
if anythingChanged then if messageDlg(...)=mrNo then ADOQuery.dontChangeCurrentRecord;
2 Answer
4
「BeforeScroll」に条件付き中止を設定します。
procedure TForm1.ADOQuery1BeforeScroll(DataSet: TDataSet); begin if TAdoQuery(DataSet).Modified then //if anythingChanged then Abort; end;
1
おかしな。 この状況で自動的にPostを呼び出さないグリッドはどのようなものを使用していますか?
このようなことをしたい場合、グリッドが便利なイベントを提供しない場合、おそらくイベントハンドラーを配置するのに最適な場所は、データセットのBeforeScrollイベントです。 変更が適用されないようにするには、「中止」を呼び出します。