|
|
|
Можно ли остановить закрытие формы на событии BeforeUpdate?
|
|||
|---|---|---|---|
|
#18+
Access 2000. На событие BeforeUpdate повесил проверку заполнения нужных полей и еще кое-что. Если проверка не прошла, а пользователь пытается перейти к другой записи, то возникает соответствующее сообщение, фокус передается в нужное поле и Update отменяется (Cancel=True). Все нормально. Безобразие начинается, если попробовать сразу закрыть форму крестиком. Тогда нужные сообщения возникают, но закрытие не прекращается, а появляется "штатное" сообщение "В данное время сохранение объекта невозможно..." Не знаете как это дело миновать? Т.е. можно ли прекратить процесс закрытия формы на стадии BeforeUpdate? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 17:04 |
|
||
|
Можно ли остановить закрытие формы на событии BeforeUpdate?
|
|||
|---|---|---|---|
|
#18+
В событии Form_Unload тоже можно сделать Cancel=True. Это можно делать в зависимости от значения какой-нибудь переменной, которая будет получать значение в зависимости от исхода BeforeUpdate. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 17:06 |
|
||
|
Можно ли остановить закрытие формы на событии BeforeUpdate?
|
|||
|---|---|---|---|
|
#18+
Это понятно. Но внутреннее сообщение "В данное время сохранение объекта невозможно..." возникает раньше события Form_Unload, и я никак не могу понять откуда оно берется. Значит Акцесс все-таки пытается сохранить новую запись? А кто его об этом просит? Ему же на этапе BeforeUpdate говорят, что не надо пока сохранять... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 17:13 |
|
||
|
Можно ли остановить закрытие формы на событии BeforeUpdate?
|
|||
|---|---|---|---|
|
#18+
Гонишь, Саныч Если отменишь событие BeforeUpdate, то до Unload'а у тебя дело и не дойдет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 17:14 |
|
||
|
Можно ли остановить закрытие формы на событии BeforeUpdate?
|
|||
|---|---|---|---|
|
#18+
Может, надо воспользоваться Form_Error... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 17:16 |
|
||
|
Можно ли остановить закрытие формы на событии BeforeUpdate?
|
|||
|---|---|---|---|
|
#18+
По всей видимости именно им и придется воспользоваться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 17:19 |
|
||
|
Можно ли остановить закрытие формы на событии BeforeUpdate?
|
|||
|---|---|---|---|
|
#18+
Там, как раз, сейчас и ковыряюсь. Но как всегда начинает казаться, что чешу левое ухо правой пяткой, а решается все гораздо проще... Кстати, еще один непонятный эффект. При установке Cancel=True в Form_Unload (по сигналу из Form_Error) почему-то очищается вся новая запись - вместо того, чтобы дать возможность дозаполнить необходимые поля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 17:21 |
|
||
|
Можно ли остановить закрытие формы на событии BeforeUpdate?
|
|||
|---|---|---|---|
|
#18+
Почему ж непонятный эффект? Если бы ты Form_Error не трогал - оно бы у пользователя спросило "Закрывать форму (с потерей изменений) или погодить" Так как ты делаешь Response = acDataErrContinue, то аксес и делает закрытие формы с потерей изменений . Ну а ты ему потом еще и закрыть форму не даешь. Сам виноват - апдейт отменил, ошибку отменил, закрытие отменил, ничего взамен не дал :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 17:29 |
|
||
|
Можно ли остановить закрытие формы на событии BeforeUpdate?
|
|||
|---|---|---|---|
|
#18+
:)) Так что ж ему надо, ненасытному? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 17:32 |
|
||
|
Можно ли остановить закрытие формы на событии BeforeUpdate?
|
|||
|---|---|---|---|
|
#18+
Вдогонку... И можно ли отобрать акцессовский запрос на закрытие с сохранением/без сохранения, заменив его своим? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 17:33 |
|
||
|
Можно ли остановить закрытие формы на событии BeforeUpdate?
|
|||
|---|---|---|---|
|
#18+
К сожалению мне этот способ не известен Ты или показываешь стандартное аксесовское сообщение (без возможности модификации), или не показываешь его (возможно вывести свое сообственное). Если стандартное аксесовское не показывается - ты попал (т.е. форма пошла дальше закрываться) Имхо проще всего на BeforeUpdate'е вывести пользователю сообщение о неправильно заполненных полях, и потом оставить его наедине со стандартным аксесовским диалогом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 17:37 |
|
||
|
Можно ли остановить закрытие формы на событии BeforeUpdate?
|
|||
|---|---|---|---|
|
#18+
Кстати, а кто мешает проверку заполненности полей возложить на сам аксес? Просто сделать поля в таблице обязательными - не катит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 17:41 |
|
||
|
Можно ли остановить закрытие формы на событии BeforeUpdate?
|
|||
|---|---|---|---|
|
#18+
БД на SQL-Servere живет. И обязательность на нем установлена. Хотелось придумать более или менее человеческий способ извещать пользователя о необходимости все нормально заполнить. А получается ерунда какая-то... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 17:46 |
|
||
|
Можно ли остановить закрытие формы на событии BeforeUpdate?
|
|||
|---|---|---|---|
|
#18+
Можно у самого контрола выставить св-ва "условие на значение" и "сообщение об ошибке" Можно на BeforeUpdate оптом проверять все поля и выводить сводную ругань Так или иначе, от стандартного диалога о невозможности закрытия не уйдешь (или данные потеряешь) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 17:54 |
|
||
|
Можно ли остановить закрытие формы на событии BeforeUpdate?
|
|||
|---|---|---|---|
|
#18+
А человеческую ругань из триггера выплюнуть - не выходит? Чтобы уж совсем BeforeUpdate не трогать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 17:55 |
|
||
|
Можно ли остановить закрытие формы на событии BeforeUpdate?
|
|||
|---|---|---|---|
|
#18+
Спасибо! Понял, что придется смириться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 17:56 |
|
||
|
Можно ли остановить закрытие формы на событии BeforeUpdate?
|
|||
|---|---|---|---|
|
#18+
Так то ж mdb (это по поводу триггера) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 17:57 |
|
||
|
Можно ли остановить закрытие формы на событии BeforeUpdate?
|
|||
|---|---|---|---|
|
#18+
2 AVKr Делаем отдельную процедуру со всеми проверками, 2 кнопки ОК и Отмена - вызываем её при закрытии формы и при нажатии на ОК. Отменяем переход по записям стандартный или делаем свои кнопки перехода (это касается не ленточных форм). Или я проблему не понял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 18:06 |
|
||
|
Можно ли остановить закрытие формы на событии BeforeUpdate?
|
|||
|---|---|---|---|
|
#18+
2 Hummer Проблему ты, наверное, понял правильно. Вопрос, правильно ли я понял ответ:) Пытаюсь разобрать. 1. Отдельная процедура на проверку. Пока понятно (так оно и есть, кстати). 2. Кнопки ОК и Отмена. Это тоже есть. 3. А вот закрытие (штатное, я имею ввиду крестиком) ведет себя по описанной выше схеме: Form_Before_Update - Form_error (в случае отмены обновления) - и далее на выбор: либо отмена всего уже введенного, либо стандартное сообщение Акцесс. Свое закрытие мне делать не дают - крестик, говорят, хотим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 18:16 |
|
||
|
Можно ли остановить закрытие формы на событии BeforeUpdate?
|
|||
|---|---|---|---|
|
#18+
Вроде у меня была похожая проблема: Также вешал проверку на 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 18:19 |
|
||
|
Можно ли остановить закрытие формы на событии BeforeUpdate?
|
|||
|---|---|---|---|
|
#18+
хм... если ввести неправильное значение и нажать крестик, то у меня тоже ругается маловразумительно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 18:22 |
|
||
|
Можно ли остановить закрытие формы на событии BeforeUpdate?
|
|||
|---|---|---|---|
|
#18+
2 Kedzo Так ведь после если крестик пресловутый нажать, а не просто новую запись попробовать завести, то все и пойдет по описанной выше дорожке с продуцированием ошибок и "стационарных" сообщений. Остановить-то закрытие мирным путем не получится. Или я что-то прозевал в коде? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 18:23 |
|
||
|
Можно ли остановить закрытие формы на событии BeforeUpdate?
|
|||
|---|---|---|---|
|
#18+
нет, ты прав. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 18:26 |
|
||
|
Можно ли остановить закрытие формы на событии BeforeUpdate?
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. Убираем кнопки перехода по записям и всё. test_controls - функция, которая всё проверяет, выдаёт сообщения и ставит фокус на нужные контролы. Но по CTRL-F4 закрыть всё равно можно:) Можно даже скролинг у мыши отключить - для этого вызываем форму вот так: Код: plaintext 1. 2. 3. 4. 5. Фильтр для позиционирования на нужной записи в источнике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2004, 18:31 |
|
||
|
|

start [/forum/topic.php?fid=45&fpage=1633&tid=1674720]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 355ms |

| 0 / 0 |
