powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / заменить системное сообщение
28 сообщений из 28, показаны все 2 страниц
заменить системное сообщение
    #40093082
Beliar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую, коллеги! Подскажите, как заменить сообщение о том, что не заполнено обязательное поле, своим? Оно, зараза, появляется раньше события LostFocus текст-бокса. В других событиях типа Change, AfterUpdate и пр. проверка на Null сама по себе не уместна. А системное сообщение для пользователя непонятно...
...
Рейтинг: 0 / 0
заменить системное сообщение
    #40093125
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А имеется ввиду поле чего?? Поле формы или таблицы?
Сообщение-то от таблицы ИМХО идет при попытке добавления или обновления записи.
что за форма? Обычная, ленточная, табличная ??
...
Рейтинг: 0 / 0
заменить системное сообщение
    #40093147
Прогер_самоучка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Beliar
Приветствую, коллеги! Подскажите, как заменить сообщение о том, что не заполнено обязательное поле, своим? Оно, зараза, появляется раньше события LostFocus текст-бокса. В других событиях типа Change, AfterUpdate и пр. проверка на Null сама по себе не уместна. А системное сообщение для пользователя непонятно...

Пробовали событие "до обновления" ?
...
Рейтинг: 0 / 0
заменить системное сообщение
    #40093152
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Beliar,

Form_Error + Response = acDataErrContinue
типа такого
...
Рейтинг: 0 / 0
заменить системное сообщение
    #40093154
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в свойствах поля таблицы-будет работать в форме:
если же хотите только в форме после потери фокуса полем используйте событие "до обновления" с его дальнейшей отменой
...
Рейтинг: 0 / 0
заменить системное сообщение
    #40093157
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПыСы:Если же хотите в форме-используйте событие "до обновления" поля с его дальнейшей отменой при этом фокус остается в поле до его(поля) заполнения(до заполнения "выйти" из поля не возможно)-при этом сообщение в свойствах таблицы следует оставить(на случай если юзер вообще не будет "заходить" в это поле до сохранения записи).
...
Рейтинг: 0 / 0
заменить системное сообщение
    #40093254
Beliar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообщем так: в событии "До обновления" системное сообщение остается, только теперь после моего. А для применения Response нужно знать код ошибки, в системном msg-боксе он не указан. А вот вариант с изменением свойств поля в таблице для данного случая весьма хорош. Только вот в окне сообщения наличествует кнопка "справка", ее бы или отключить или прописать как-то содержание справки. К тому же приходиться значение свойства "обязательное поле" менять на "нет". Если вместо этого изменить аналогичные свойства у контрола на форме, то сообщение выходит только с кнопкой "ОК". Только значок неправильный: типа vbInformation вместо vbExlamation. Желательно бы вариант на форме отработать. Ведь, в другой ситуации в таблице-источнике, возможно, менять ничего нельзя будет. Можно ли как-то задать свойства этих окошек?
...
Рейтинг: 0 / 0
заменить системное сообщение
    #40093273
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как то так и фсе....:
...
Рейтинг: 0 / 0
заменить системное сообщение
    #40093274
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПыСы:
что касается вида окна и кнопок на нем-см. аргументы ф-ции msgbox
...
Рейтинг: 0 / 0
заменить системное сообщение
    #40093285
Beliar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku
ПыСы:
что касается вида окна и кнопок на нем-см. аргументы ф-ции msgbox
ну, функцию-то я знаю. Только я ж ее не вызываю. Это тоже системный msgbox
...
Рейтинг: 0 / 0
заменить системное сообщение
    #40093327
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Beliar,
Селайте запись в форме, не заполняя обязательное поле, в том файле что приложен к моему сообщению, и ответьте на один простой вопрос:где Вы увидели системное сообщение?
И ЧТО это как не вызов функции MSGBOX при пустом поле2
Код: vbnet
1.
2.
3.
If IsNull(Me.Поле2) Then
MsgBox "поле2 обязательно к заполнению" 'пишите здесь что Вам угодно и при необходимости используйте другие аргументы, коль знаете функцию
Cancel = True
...
Рейтинг: 0 / 0
заменить системное сообщение
    #40093368
Beliar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku,
То, что Вы показали - и есть вызов функции msgbox, а системный msgbox - те, я показал на скриншотах, и их опционально не изменить. Ну или только я не знаю, как изменить. Опять всё перемешалось в обсуждении. Надо разделить на 3 ветви. Ситуация: пользователь пытается уйти из текст-бокса, оставив его пустым. Необходима соответствующая реакция интерфейса, пресекающая данное действие, и чтоб пользователю было понятно, что от него хотят.

Вариант1. В таблице-источнике свойство поля "обязательное поле" в значении "да". Реакция: выходит системное сообщение с непонятным для пользователя текстом. Мимо!

Вариант2. В таблице источнике значение в "Условие на значение" прописываем "Is Not Null" и текст сообщения об ошибке. "обязательное поле" приходится менять на "нет", иначе сначала срабатывает Вариант1. Реакция: выходит сообщение (системный msgbox) с нашим текстом и значком типа vbExclamation и кнопками "ОК" и "Справка". Не даёт уйти с поля. Все как надо, но кнопка "Справка" лишняя, либо нужно подсунуть справку.

Варинат3. В таблице-источнике ничего не меняем, а на форме в свойствах контролла указываем в "Условии на значение" - "Not Is Null" текст ошибки. Реакция: выходит сообщение (системный msgbox) с нашим текстом и одной кнопкой "ОК" и значком vbInformation, что не соответствует виду сообщения об ошибке. Так же не дает покинуть поле. Т.е. чуть лучше Варианта2.

Вариант4. Не трогаем ничьи свойства, обрабатываем событие BeforUpdate, проверяем функцией IsNull(), вызываем MsgBox с нужными опциями (кнопка "OK"+значок). Не важно куда прописываем, в обработку действий с msgbox или прямо в тело условного оператора if, проверяющего значение IsNull(), ни там и там не срабатывают ни метод undo, ни оператор exit sub, метод SetFocut вообще в этом событии нельзя применять. Реакция: сообщение-то выходит, но фокус все равно передается в другой контролл, поле остается пустым, прежнее значение не возвращается. Если свойство "обязательное поле" в источнике в значении "да", то вперед всего срабатывает Вариант1.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Private Sub cur_date_BeforeUpdate(Cancel As Integer)
    If IsNull(cur_date) Then
        Dim ok1
        ok1 = MsgBox("Поле [дата] является обязательным для заполнения", vbCritical + vbOKOnly, "Ошибка!")
        If ok1 = vbOK Then
            cur_date.Undo
            'cur_date.SetFocus этот метод тут неприменим, только если прописать сохранение
            Exit Sub
        End If
    End If
End Sub


или так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Private Sub cur_date_BeforeUpdate(Cancel As Integer)
    If IsNull(cur_date) Then
        MsgBox "Поле [дата] является обязательным для заполнения", vbCritical + vbOKOnly, "Ошибка!"
        cur_date.Undo
        'cur_date.SetFocus этот метод тут неприменим, только если прописать сохранение
        Exit Sub
    End If
End Sub


В других событиях, типа AfterUpdate или LostFocus все так же. Ну может, я что-то не так делаю... честно говоря, дымок из ушей пошел
...
Рейтинг: 0 / 0
заменить системное сообщение
    #40093399
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Beliar,

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Private Sub cur_date_BeforeUpdate(Cancel As Integer)
    If IsNull(cur_date) Then
        MsgBox "Поле [дата] является обязательным для заполнения", vbCritical + vbOKOnly, "Ошибка!"
       Cancel = True
       cur_date.Undo
       Me.Undo
    End If
End Sub
...
Рейтинг: 0 / 0
заменить системное сообщение
    #40093411
Beliar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
__Michelle
Beliar,

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Private Sub cur_date_BeforeUpdate(Cancel As Integer)
    If IsNull(cur_date) Then
        MsgBox "Поле [дата] является обязательным для заполнения", vbCritical + vbOKOnly, "Ошибка!"
       Cancel = True
       cur_date.Undo
       Me.Undo
    End If
End Sub


Вот Michelle всегда бьет в яблочко! Я про Cancel вообще напрочь забыл. Вариант с решением предпочтительнее, т.к. далеко не всегда можно баловаться со свойствами в таблице-источнике. Спасибо огромнейшее! Вопрос исчерпан!
...
Рейтинг: 0 / 0
заменить системное сообщение
    #40093423
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku
....
Код: vbnet
1.
2.
3.
If IsNull(Me.Поле2) Then
MsgBox "поле2 обязательно к заполнению" 'пишите здесь что Вам угодно и при необходимости используйте другие аргументы, коль знаете функцию+приложение к [msg=22364248]
Cancel = True

Beliar
__Michelle
Beliar,

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Private Sub cur_date_BeforeUpdate(Cancel As Integer)
    If IsNull(cur_date) Then
        MsgBox "Поле [дата] является обязательным для заполнения", vbCritical + vbOKOnly, "Ошибка!"
       Cancel = True
       cur_date.Undo
       Me.Undo
    End If
End Sub


Вот Michelle всегда бьет в яблочко! Я про Cancel вообще напрочь забыл. Вариант с решением предпочтительнее, т.к. далеко не всегда можно баловаться со свойствами в таблице-источнике. Спасибо огромнейшее! Вопрос исчерпан!
Просто интереснонтересно-а Вы читаете сообщения и просматриваете примеры,что предлагаются,или Вы все отметаете неглядя??
...
Рейтинг: 0 / 0
заменить системное сообщение
    #40093475
Beliar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku, бывает, что не замечу чего-нибудь. заспорили из-за msgbox, и всё... глаза затуманило))) прошу прощения. Спасибо всем вам.
...
Рейтинг: 0 / 0
заменить системное сообщение
    #40093499
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Beliar
sdku,...а системный msgbox - те, я показал на скриншотах, и их опционально не изменить.
Ну почему-же "не изменить" 22363975
значок не смените, только содержание
...
Рейтинг: 0 / 0
заменить системное сообщение
    #40093594
Beliar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, содержание-то понятно.
Beliar
Реакция: выходит сообщение (системный msgbox) с нашим текстом и значком типа vbExclamation и кнопками "ОК" и "Справка".

А вот значок, кнопки, справка... да и хр с ними. Есть более предпочтительное решение
...
Рейтинг: 0 / 0
заменить системное сообщение
    #40093616
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Beliar
Есть более предпочтительное решение
22363963
...
Рейтинг: 0 / 0
заменить системное сообщение
    #40093623
Beliar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург

Beliar
... А для применения Response нужно знать код ошибки, в системном msg-боксе он не указан...
...
Рейтинг: 0 / 0
заменить системное сообщение
    #40093630
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Beliar, а в чём проблема выяснить при возникновении события?
Код: vbnet
1.
2.
3.
Private Sub Form_Error(DataErr As Integer, Response As Integer)'выделенное кому?
...
End Sub
...
Рейтинг: 0 / 0
заменить системное сообщение
    #40093632
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Michelle
Код: vbnet
1.
cur_date.Undo

и такого я бы не стал делать, пусть пользователь решает - дописать или скинуть (Esc).

__Michelle
Код: vbnet
1.
BeforeUpdate(Cancel As Integer)

формы - пользователь свободно может передвигаться в пределах записи.
...
Рейтинг: 0 / 0
заменить системное сообщение
    #40093726
Beliar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург
__Michelle
Код: vbnet
1.
cur_date.Undo

и такого я бы не стал делать, пусть пользователь решает - дописать или скинуть (Esc).

__Michelle
Код: vbnet
1.
BeforeUpdate(Cancel As Integer)

формы - пользователь свободно может передвигаться в пределах записи.
...
Рейтинг: 0 / 0
заменить системное сообщение
    #40093728
Beliar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Beliar#22365242]
Панург
пропущено...
и такого я бы не стал делать, пусть пользователь решает - дописать или скинуть (Esc).

Верно говорите. Все undo я сразу убрал. Они фигурировали, пока мне не протёрли шары вот этим: Cancel = True

Панург
Beliar, а в чём проблема выяснить при возникновении события?
Код: vbnet
1.
2.
3.
Private Sub Form_Error(DataErr As Integer, Response As Integer)'выделенное кому?
...
End Sub


Ну, я выяснил код ошибки, прямо в этом событии. 3314. Теперь всё просто, казалось бы. Отменяю появление системного сообщения об ошибке (Response = acDataErrContinue), подкидываю свой msgbox (правда, содержание будет уже какое-то обобщенное, а не по данной ситуации). Дальше ошибка 2169, и, либо форма не закрывается, либо возвращается прежнее значение поля. Всё классно. НО! я тут же понял, что это, мягко говоря, не очень мудрое решение. Как системой "Град" по огородным вредителям. В моем примере-то ничего, а вот в общем... я, ведь, таким образом перехватываю появление системного сообщения во всех случаях возникновения ошибки с конкретным кодом во всех событиях на форме. А случаи бывают разные, и реакция может потребоваться разная.
Решение проблемы в событии BeforeUpdate самого контрола куда более точечное и деликатное.
...
Рейтинг: 0 / 0
заменить системное сообщение
    #40093733
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Beliar
вот в общем... я, ведь, таким образом перехватываю появление системного сообщения во всех случаях возникновения ошибки с конкретным кодом во всех событиях на форме.
обрабатывать по порядку в таком случае или группу если подразумевает похожие действия.

Beliar
Решение проблемы в событии BeforeUpdate самого контрола куда более точечное и деликатное.
не всегда. Пользователь будет "заперт" в этом контроле, что очень неудобно.
...
Рейтинг: 0 / 0
заменить системное сообщение
    #40093734
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Beliar
подкидываю свой msgbox (правда, содержание будет уже какое-то обобщенное , а не по данной ситуации)
ну это уж как ума хватит. Можно и вполне конкретное.
...
Рейтинг: 0 / 0
заменить системное сообщение
    #40093807
Beliar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург
...не всегда. Пользователь будет "заперт" в этом контроле, что очень неудобно.

Я проверял этот вариант. Всё "добро" из BeforUpdate контрола перетащил в BeforUpdate формы. Чертовщина твориться начинает.
1) Жмём оконную кнопку закрытия окна (крестик). Выдает мой msgbox, форму не закрывает, но реакция на нажатие "крестика" вообще исчезает по следующего возникновения события BeforUpdate.
2) Закрываем форму макрокомандой DoCmd.Close. При этом пытаюсь перехватить закрытие:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Private Sub Form_BeforeUpdate(Cancel As Integer)
    If IsNull(cur_date) = True Then
        MsgBox "Поле [дата] является обязательным для заполнения", vbCritical + vbOKOnly, "Ошибка!"
        flag1 = 1
    Else
        MsgBox "не пусто"
        flag1 = 0
    End If
End Sub

Private Sub Form_Unload(Cancel As Integer)
    If flag1 = 1 Then Cancel = True
End Sub


Выдает мой msgbox, после его закрытия закрывает (или скрывает) саму форму, выдает ошибку "'2501': прервано выполнение макрокоманды Close", причем не аксессовское, а вба-шное (с кнопками "end" и "debug"). За такое - только на эшафот!
Может, я как-то плоско мыслю... не исключено. Покопался в интернете, везде, включая наш форум, все попытки выяснить, как прервать закрытие формы в подобных случаях, закончились ничем. В одном месте даже сказано было, что, дескать согласно Help'у, допускается прерывание события Unload, а Close прервать не допускается.
...
Рейтинг: 0 / 0
заменить системное сообщение
    #40093899
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Beliar, руки у тебя золотые...
...
Рейтинг: 0 / 0
28 сообщений из 28, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / заменить системное сообщение
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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