Событие формы Current (Текущая запись).

Kvasnikov
Дата: 20.02.2008 19:21:22
Пытаюсь сделать так, что бы при смене записи в таблице VBA проверял были ли внесены изменения и если были, то что бы переспрашивал «А вы уверены?...»

Private Sub Form_Current()
If Me.Dirty = True Then …

Проблема в том, что сначала запись сохраняется, потом следует переход на новую запись и тогда и происходит событие Current, соответственно Dirty всегда = False.

Посоветуйте, плиз, как мне лучше поступить в этом случае?
proposed amendment
Дата: 20.02.2008 19:22:12
Kvasnikov
Пытаюсь сделать так, что бы при смене записи в таблице VBA проверял были ли внесены изменения и если были, то что бы переспрашивал «А вы уверены?...»

Private Sub Form_Current()
If Me.Dirty = True Then …

Проблема в том, что сначала запись сохраняется, потом следует переход на новую запись и тогда и происходит событие Current, соответственно Dirty всегда = False.

Посоветуйте, плиз, как мне лучше поступить в этом случае?


before update event
Kvasnikov
Дата: 20.02.2008 23:09:17
proposed amendment
before update event


Да, спасибо, это как раз то, что нужно.
Появилась другая проблема. У меня есть две кнопки – «Сохранить» и «Выход».
Обе сохраняют все изменения в форме, то есть тоже вызывают before update event, где, соответственно, пользователя повторно спрашивают хочет ли он сохранить изменения.
Как этого избежать?
proposed amendment
Дата: 20.02.2008 23:39:07
Kvasnikov
proposed amendment
before update event


Да, спасибо, это как раз то, что нужно.
Появилась другая проблема. У меня есть две кнопки – «Сохранить» и «Выход».
Обе сохраняют все изменения в форме, то есть тоже вызывают before update event, где, соответственно, пользователя повторно спрашивают хочет ли он сохранить изменения.
Как этого избежать?


кнопки сами по себе не вызывают событий - что за код на кнопках?

а вообще - слишком много вопросов пользователю задаете... если вы не собираетесь конкурировать с майкрософт - лучше поменяйте подходы к разработке интерфейсов
mds_world
Дата: 21.02.2008 00:12:32
Создать флаг - публичную переменную True/False. На BeforeUpdate взводить флаг, после любого подтверждения гасить флаг. На кнопках проверять флаг - если поднят, то спрашивать, если фэлс, то ничего не делать.

Несколько в иную сторону. Как вы думаете, долго пользователи будут терпеть, что на любую правку данных их заставляют отвлекаться на дополнительные навязчивые окна с требованиями подтвердить то, что они так долго вводили и проверяли? Думаю, что это им скоро надоест и вы отключите все подтверждения. В результате в БД будут попадать непроверенные данные, возникнут ошибки в которых, в том числе, обвинят и вас.
Если качество, валидность данных так важны, то надо делать иную систему, гораздо более сложную, учитывающую специфику данных. Вложить в систему учет времени набивки, ФИО оператора. Создать полноценный откат при фиксации ошибки, использовать механизм транзакций. И т.д. и т.п. И тогда, по крайней мере, всегда можно будет во-первых восстановить данные, а во-вторых, что для вас как программиста не менее важно, указать кто допустил ошибку, какой оператор, когда. И пусть с ним разбирается руководство.

Если же качество, полнота и целостность данных не столь важны, то система подтверждения вообще теряет всякий смысл. Достаточно будет задать осмысленные ограничения на диапазон данных там где это возможно и какую-нибудь простенькую систему проверки.

Во всяком случае мой опыт говорит, что такого рода подтверждения жизнеспособны только на критических участках, там где от вводимых данных зависит очень многое. Но слава богу, что такие ситуации встречаются не очень часто.
Kvasnikov
Дата: 21.02.2008 16:27:32
Mds_world, спасибо. Реализовал через внешнюю переменную.

Проверку на валидност я включил. Просто уже несколько раз столкнулись с тем, что человек случайно изменял данные – где ctrX нажал вместо ctrC, где в списке случайно поменял значение, вот и решили, что надо пользователю сообщать, что были в форме изменения и просить подтвердить их.