1


0

ADOQueryで現在のレコードが変更される前に発生するイベントと、現在のレコードを変更しない方法

私のアプリケーションでは、次のようにリンクされたこれらのデータコンポーネントがあります。

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イベントです。 変更が適用されないようにするには、「中止」を呼び出します。