Какое событие вызывается до изменения текущей записи в ADOQuery и как НЕ изменять текущую запись? - PullRequest
1 голос
/ 18 января 2010

В моем приложении эти компоненты данных связаны следующим образом:

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

Когда пользователь выбирает другую строку из DBGrid или использует DBNavigator, текущая запись ADOQuery изменяется.Хорошо, но когда пользователь вносит некоторые изменения в текущую запись, а затем удаляется от нее, сделанные изменения теряются.

Я хотел бы отобразить диалоговое окно подтверждения, где пользователю потребуется подтвердить переход оттекущая запись в случае внесения каких-либо изменений.И когда пользователь нажимает «Нет», я бы хотел, чтобы приложение НЕ изменило текущую запись.

Куда мне вставить код?Какое событие вызывается до того, как пользователь уходит от текущей записи, и как мне остановить продолжение действия?

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

Ответы [ 2 ]

4 голосов
/ 18 января 2010

Поместить условный прерывание на 'BeforeScroll';

procedure TForm1.ADOQuery1BeforeScroll(DataSet: TDataSet);
begin
  if TAdoQuery(DataSet).Modified then  //if anythingChanged then
    Abort;
end;
1 голос
/ 18 января 2010

Странно.Какой тип сетки вы используете, чтобы в этой ситуации автоматически не вызывать Post?

Если вы хотите сделать что-то подобное, возможно, лучшее место для размещения обработчика событий, если сетка не обеспечиваетудобное для него событие - в событии BeforeScroll набора данных.Чтобы изменения не применялись, вы можете позвонить Abort.

...