在ADOQuery中当前记录更改之前触发了哪个事件以及如何更改当前记录?

时间:2010-01-18 12:28:04

标签: delphi events event-handling delphi-2009 ado

在我的应用程序中,这些数据组件链接如下:

DBGrid > (DataSource > ADOQuery > ADOConnection)
DBNavigator > (DataSource > ADOQuery > ADOConnection)

每当用户从DBGrid中选择不同的行或使用DBNavigator时,ADOQuery的当前记录都会发生变化。很好,但是当用户对当前记录进行一些更改,然后离开它时,所做的更改就会丢失。

我想显示一个确认对话框,如果有任何更改,用户需要确认导航离开当前记录。并且,当用户点击“否”时,我希望应用程序不要更改当前记录。

我应该在哪里插入代码?在用户导航离开当前记录之前触发了哪个事件,如何阻止该操作继续?

if anythingChanged then
  if messageDlg(...)=mrNo then
    ADOQuery.dontChangeCurrentRecord;

2 个答案:

答案 0 :(得分:4)

在'BeforeScroll'上放置条件中止;

procedure TForm1.ADOQuery1BeforeScroll(DataSet: TDataSet);
begin
  if TAdoQuery(DataSet).Modified then  //if anythingChanged then
    Abort;
end;

答案 1 :(得分:1)

奇怪。在这种情况下,您使用哪种网格不会自动调用Post?

如果你想做这样的事情,可能是放置事件处理程序的最佳位置,如果网格没有为它提供方便的事件,则可能是数据集的BeforeScroll事件。要阻止更改的应用,您可以拨打Abort