powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Передать cancel=true обратно в событие формы
12 сообщений из 12, страница 1 из 1
Передать cancel=true обратно в событие формы
    #39770012
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем добрый день. Решил на форму на before_update поставить обычное предупреждение для пользователя, о том нужно ли сохранять или нет данные если они изменились при переходе на другую запись

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Private Sub Form_BeforeUpdate(Cancel As Integer)
On Error GoTo Error_Handler 'обработчик ошибок
'====================================

If MsgBox("В форму внесены изменения, сохранить?", vbYesNo + vbExclamation + vbDefaultButton1, "Предупреждение") = vbNo Then
     Cancel = True
     Me.Undo
End If

'======================
Exit_Sub: 'обработчик ошибок
     On Error Resume Next
     Exit Sub
Error_Handler:
     If Err.Number = 0 Then
          Resume Next
     Else
          Call prcОбработкаОшибок(Err.Number, Err.Description, Err.Source, Erl)
     End If
     Resume Exit_Sub
     Resume
End Sub



Чтобы не "лепить" то же самое для каждой формы решил что надо вынести в публичную процедуру в модуль, а из события просто вызывать процедуру

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Public Sub prcКонтрольИзмененийФормы(frmName As String)
Dim frm As Form

Set frm = Forms(frmName)


If MsgBox("В форму внесеные измнения, сохранить?", vbYesNo + vbExclamation + vbDefaultButton1, "Предупреждение") = vbNo Then
   'Cancel = True КАК ВОТ ЭТУ СТРОКУ ПЕРЕДАТЬ ОБРАТНО В СОБЫТИЕ ФОРМЫ, чтобы отменить UPDATE
   frm.Undo
End If

End Sub



Не пойму как Cancel = True передать обратно в событие формы, чтобы отменить UPDATE. Заранее благодарю за подсказку
...
Рейтинг: 0 / 0
Передать cancel=true обратно в событие формы
    #39770022
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попутно еще один вопрос: есть ли в VBA штатная возможность узнать в какие конкретно контролы внесены изменения до UPDATE? или же нет такой функции (я, по крайней мере, не встречал нигде в книжках и справках)? теоретически чтобы сделать UNDO система "должна помнить", какие конкретно поля изменены, чтобы откатить их. зачем нужно, чтобы при возникновении события BeforeUpdate подсветить пользователю то, что было изменено, вроде как для наглядности :-)
...
Рейтинг: 0 / 0
Передать cancel=true обратно в событие формы
    #39770035
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ганов АлександрНе пойму как Cancel = True передать обратно в событие формы, чтобы отменить UPDATE
Переделай свою Sub на Function и возвращай что хочешь
Ганов Александресть ли в VBA штатная возможность узнать в какие конкретно контролы внесены изменения до UPDATE
У контролов есть свойство OldValue. Вот если оно не равно Value - то "внесены"
...
Рейтинг: 0 / 0
Передать cancel=true обратно в событие формы
    #39770057
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот спасибо!! переделал вот так - все работает

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Private Sub Form_BeforeUpdate(Cancel As Integer)
On Error GoTo Error_Handler 'обработчик ошибок
'====================================

Cancel = fncКонтрольИзмененийФормы(Me.Name)

'======================
Exit_Sub: 'обработчик ошибок
     On Error Resume Next
     Exit Sub
Error_Handler:
     If Err.Number = 0 Then
          Resume Next
     Else
          Call prcОбработкаОшибок(Err.Number, Err.Description, Err.Source, Erl)
     End If
     Resume Exit_Sub
     Resume
End Sub



и вместо SUB сделал Function

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Public Function fncКонтрольИзмененийФормы(frmName As String)
Dim frm As Form

Set frm = Forms(frmName)

If frm.Dirty = True Then
     If MsgBox("В форму внесеные измнения, сохранить", vbYesNo + vbExclamation + vbDefaultButton1, "Предупреждение") = vbNo Then
          frm.Undo
          fncКонтрольИзмененийФормы = True
     End If
End If

End Function
...
Рейтинг: 0 / 0
Передать cancel=true обратно в событие формы
    #39770063
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ганов Александр, либо prcКонтрольИзмененийФормы сделать функцией as boolean, либо в sub ввести переменную, состояние которой будете отслеживать в основной процедуре, - проще при изменениях менять .tag.
...
Рейтинг: 0 / 0
Передать cancel=true обратно в событие формы
    #39770066
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Function fncКонтрольИзмененийФормы(frmName As String) as boolean
...
Рейтинг: 0 / 0
Передать cancel=true обратно в событие формы
    #39770072
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alecko, все понял. с tag тоже отличная идея. замечание насчет bool принял. Благодарю
...
Рейтинг: 0 / 0
Передать cancel=true обратно в событие формы
    #39770080
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ганов Александр,

Можно и так
Код: vbnet
1.
Public Sub prcКонтрольИзмененийФормы(frmName As String, ByRef Cancel As Integer)
...
Рейтинг: 0 / 0
Передать cancel=true обратно в событие формы
    #39770149
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4d_monster, во как, спасибо, то есть передаем сразу по ссылке. не знал. благодарю за такой способ
...
Рейтинг: 0 / 0
Передать cancel=true обратно в событие формы
    #39770151
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
век живи - век учись :-)
...
Рейтинг: 0 / 0
Передать cancel=true обратно в событие формы
    #39772052
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ганов Александр...
Не пойму как Cancel = True передать обратно в событие формы, чтобы отменить UPDATE. Заранее благодарю за подсказку
Добавьте вот этот код и у Вас программа не позволит сохранить изменения (если они были внесены). Аналог кода Cancel = True .
Код: vbnet
1.
DoCmd.CancelEvent
...
Рейтинг: 0 / 0
Передать cancel=true обратно в событие формы
    #39772148
Фотография Ганов Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studieren, благодарю за подсказку. воспользуюсь советом
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Передать cancel=true обратно в событие формы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]