powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Можно ли остановить закрытие формы на событии BeforeUpdate?
25 сообщений из 25, страница 1 из 1
Можно ли остановить закрытие формы на событии BeforeUpdate?
    #32513541
AVKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Access 2000.
На событие BeforeUpdate повесил проверку заполнения нужных полей и еще кое-что. Если проверка не прошла, а пользователь пытается перейти к другой записи, то возникает соответствующее сообщение, фокус передается в нужное поле и Update отменяется (Cancel=True). Все нормально.
Безобразие начинается, если попробовать сразу закрыть форму крестиком. Тогда нужные сообщения возникают, но закрытие не прекращается, а появляется "штатное" сообщение "В данное время сохранение объекта невозможно..."
Не знаете как это дело миновать? Т.е. можно ли прекратить процесс закрытия формы на стадии BeforeUpdate?
...
Рейтинг: 0 / 0
Можно ли остановить закрытие формы на событии BeforeUpdate?
    #32513546
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
В событии Form_Unload тоже можно сделать Cancel=True. Это можно делать в зависимости от значения какой-нибудь переменной, которая будет получать значение в зависимости от исхода BeforeUpdate.
...
Рейтинг: 0 / 0
Можно ли остановить закрытие формы на событии BeforeUpdate?
    #32513565
AVKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это понятно. Но внутреннее сообщение "В данное время сохранение объекта невозможно..." возникает раньше события Form_Unload, и я никак не могу понять откуда оно берется. Значит Акцесс все-таки пытается сохранить новую запись? А кто его об этом просит? Ему же на этапе BeforeUpdate говорят, что не надо пока сохранять...
...
Рейтинг: 0 / 0
Можно ли остановить закрытие формы на событии BeforeUpdate?
    #32513567
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гонишь, Саныч
Если отменишь событие BeforeUpdate, то до Unload'а у тебя дело и не дойдет.
...
Рейтинг: 0 / 0
Можно ли остановить закрытие формы на событии BeforeUpdate?
    #32513573
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Может, надо воспользоваться Form_Error...
...
Рейтинг: 0 / 0
Можно ли остановить закрытие формы на событии BeforeUpdate?
    #32513581
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По всей видимости именно им и придется воспользоваться
...
Рейтинг: 0 / 0
Можно ли остановить закрытие формы на событии BeforeUpdate?
    #32513586
AVKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Там, как раз, сейчас и ковыряюсь. Но как всегда начинает казаться, что чешу левое ухо правой пяткой, а решается все гораздо проще...

Кстати, еще один непонятный эффект. При установке Cancel=True в Form_Unload (по сигналу из Form_Error) почему-то очищается вся новая запись - вместо того, чтобы дать возможность дозаполнить необходимые поля.
...
Рейтинг: 0 / 0
Можно ли остановить закрытие формы на событии BeforeUpdate?
    #32513610
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему ж непонятный эффект?
Если бы ты Form_Error не трогал - оно бы у пользователя спросило "Закрывать форму (с потерей изменений) или погодить"
Так как ты делаешь Response = acDataErrContinue, то аксес и делает закрытие формы с потерей изменений . Ну а ты ему потом еще и закрыть форму не даешь.
Сам виноват - апдейт отменил, ошибку отменил, закрытие отменил, ничего взамен не дал :)
...
Рейтинг: 0 / 0
Можно ли остановить закрытие формы на событии BeforeUpdate?
    #32513619
AVKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
:))

Так что ж ему надо, ненасытному?
...
Рейтинг: 0 / 0
Можно ли остановить закрытие формы на событии BeforeUpdate?
    #32513624
AVKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вдогонку...
И можно ли отобрать акцессовский запрос на закрытие с сохранением/без сохранения, заменив его своим?
...
Рейтинг: 0 / 0
Можно ли остановить закрытие формы на событии BeforeUpdate?
    #32513633
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сожалению мне этот способ не известен
Ты или показываешь стандартное аксесовское сообщение (без возможности модификации), или не показываешь его (возможно вывести свое сообственное). Если стандартное аксесовское не показывается - ты попал (т.е. форма пошла дальше закрываться)

Имхо проще всего на BeforeUpdate'е вывести пользователю сообщение о неправильно заполненных полях, и потом оставить его наедине со стандартным аксесовским диалогом.
...
Рейтинг: 0 / 0
Можно ли остановить закрытие формы на событии BeforeUpdate?
    #32513643
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, а кто мешает проверку заполненности полей возложить на сам аксес?
Просто сделать поля в таблице обязательными - не катит?
...
Рейтинг: 0 / 0
Можно ли остановить закрытие формы на событии BeforeUpdate?
    #32513657
AVKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
БД на SQL-Servere живет. И обязательность на нем установлена. Хотелось придумать более или менее человеческий способ извещать пользователя о необходимости все нормально заполнить. А получается ерунда какая-то...
...
Рейтинг: 0 / 0
Можно ли остановить закрытие формы на событии BeforeUpdate?
    #32513680
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно у самого контрола выставить св-ва "условие на значение" и "сообщение об ошибке"
Можно на BeforeUpdate оптом проверять все поля и выводить сводную ругань
Так или иначе, от стандартного диалога о невозможности закрытия не уйдешь (или данные потеряешь)
...
Рейтинг: 0 / 0
Можно ли остановить закрытие формы на событии BeforeUpdate?
    #32513685
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А человеческую ругань из триггера выплюнуть - не выходит? Чтобы уж совсем BeforeUpdate не трогать?
...
Рейтинг: 0 / 0
Можно ли остановить закрытие формы на событии BeforeUpdate?
    #32513689
AVKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо! Понял, что придется смириться.
...
Рейтинг: 0 / 0
Можно ли остановить закрытие формы на событии BeforeUpdate?
    #32513696
AVKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так то ж mdb (это по поводу триггера)
...
Рейтинг: 0 / 0
Можно ли остановить закрытие формы на событии BeforeUpdate?
    #32513726
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 AVKr
Делаем отдельную процедуру со всеми проверками, 2 кнопки ОК и Отмена - вызываем её при закрытии формы и при нажатии на ОК. Отменяем переход по записям стандартный или делаем свои кнопки перехода (это касается не ленточных форм).
Или я проблему не понял?
...
Рейтинг: 0 / 0
Можно ли остановить закрытие формы на событии BeforeUpdate?
    #32513758
AVKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Hummer
Проблему ты, наверное, понял правильно. Вопрос, правильно ли я понял ответ:) Пытаюсь разобрать.

1. Отдельная процедура на проверку. Пока понятно (так оно и есть, кстати).
2. Кнопки ОК и Отмена. Это тоже есть.
3. А вот закрытие (штатное, я имею ввиду крестиком) ведет себя по описанной выше схеме: Form_Before_Update - Form_error (в случае отмены обновления) - и далее на выбор: либо отмена всего уже введенного, либо стандартное сообщение Акцесс. Свое закрытие мне делать не дают - крестик, говорят, хотим.
...
Рейтинг: 0 / 0
Можно ли остановить закрытие формы на событии BeforeUpdate?
    #32513764
Фотография kedzo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде у меня была похожая проблема:
Также вешал проверку на BeforeUpdate, и не выпускал пользователя из поля, пока он не вводил значение, удовлетворяющее условиям.

Типа того:

Private Sub Form_BeforeUpdate(Cancel As Integer)
On Error GoTo mistake
Dim i As Integer

Dim rst As Recordset
Set rst = CurrentDb.OpenRecordset("select * from Товары where Код=" & Me.КодТовара)
If rst!ТребоватьНомер = True And IsNull(Me.НомерТовара) Then
MsgBox "Не указан номер для товара!" & vbCrLf & "Для товара данной категории при списании необходимо указывать номер.", vbExclamation
Me.НомерТовара.SetFocus
rst.Close
Set rst = Nothing
End
End If

rst.Close
Set rst = Nothing

If IsNull(Me.НомерТовара) = False And Me.Количество <> 1 Then
MsgBox "Для товара этой категории количество должно быть равным 1" & vbCrLf & "Введите в поле Количество цифру 1", vbExclamation
Количество.SetFocus
End
End If

mistake_exit:
Exit Sub

mistake:
MsgBox Err.Description
Resume mistake_exit
End Sub
...
Рейтинг: 0 / 0
Можно ли остановить закрытие формы на событии BeforeUpdate?
    #32513771
Фотография kedzo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хм... если ввести неправильное значение и нажать крестик, то у меня тоже ругается маловразумительно.
...
Рейтинг: 0 / 0
Можно ли остановить закрытие формы на событии BeforeUpdate?
    #32513774
AVKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Kedzo
Так ведь после если крестик пресловутый нажать, а не просто новую запись попробовать завести, то все и пойдет по описанной выше дорожке с продуцированием ошибок и "стационарных" сообщений. Остановить-то закрытие мирным путем не получится. Или я что-то прозевал в коде?
...
Рейтинг: 0 / 0
Можно ли остановить закрытие формы на событии BeforeUpdate?
    #32513783
Фотография kedzo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет, ты прав.
...
Рейтинг: 0 / 0
Можно ли остановить закрытие формы на событии BeforeUpdate?
    #32513797
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
Private Sub Form_Unload(Cancel As Integer)
If test_controls = False Then Cancel = True
End Sub

Убираем кнопки перехода по записям и всё.
test_controls - функция, которая всё проверяет, выдаёт сообщения и ставит фокус на нужные контролы.
Но по CTRL-F4 закрыть всё равно можно:)
Можно даже скролинг у мыши отключить - для этого вызываем форму вот так:

Код: plaintext
1.
2.
3.
4.
5.
DoCmd.OpenForm "имя_формы", acNormal, , "фильтр", acFormEdit, acHidden
                 With Forms!["имя_формы"]
                    .AllowEdits = True
                    .AllowAdditions = False
                 End With
                 Forms!["имя_формы"].Visible = True

Фильтр для позиционирования на нужной записи в источнике.
...
Рейтинг: 0 / 0
Можно ли остановить закрытие формы на событии BeforeUpdate?
    #32513845
AVKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Hummer
На вид все просто, но надо осмыслить. Спасибо!
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Можно ли остановить закрытие формы на событии BeforeUpdate?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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