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

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

Form_Error + Response = acDataErrContinue
типа такого
...
Рейтинг: 0 / 0
25.08.2021, 16:52
    #40093154
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заменить системное сообщение
в свойствах поля таблицы-будет работать в форме:
если же хотите только в форме после потери фокуса полем используйте событие "до обновления" с его дальнейшей отменой
...
Рейтинг: 0 / 0
25.08.2021, 17:07
    #40093157
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заменить системное сообщение
ПыСы:Если же хотите в форме-используйте событие "до обновления" поля с его дальнейшей отменой при этом фокус остается в поле до его(поля) заполнения(до заполнения "выйти" из поля не возможно)-при этом сообщение в свойствах таблицы следует оставить(на случай если юзер вообще не будет "заходить" в это поле до сохранения записи).
...
Рейтинг: 0 / 0
26.08.2021, 12:04
    #40093254
Beliar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заменить системное сообщение
Вообщем так: в событии "До обновления" системное сообщение остается, только теперь после моего. А для применения Response нужно знать код ошибки, в системном msg-боксе он не указан. А вот вариант с изменением свойств поля в таблице для данного случая весьма хорош. Только вот в окне сообщения наличествует кнопка "справка", ее бы или отключить или прописать как-то содержание справки. К тому же приходиться значение свойства "обязательное поле" менять на "нет". Если вместо этого изменить аналогичные свойства у контрола на форме, то сообщение выходит только с кнопкой "ОК". Только значок неправильный: типа vbInformation вместо vbExlamation. Желательно бы вариант на форме отработать. Ведь, в другой ситуации в таблице-источнике, возможно, менять ничего нельзя будет. Можно ли как-то задать свойства этих окошек?
...
Рейтинг: 0 / 0
26.08.2021, 13:25
    #40093273
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заменить системное сообщение
как то так и фсе....:
...
Рейтинг: 0 / 0
26.08.2021, 13:32
    #40093274
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заменить системное сообщение
ПыСы:
что касается вида окна и кнопок на нем-см. аргументы ф-ции msgbox
...
Рейтинг: 0 / 0
26.08.2021, 13:59
    #40093285
Beliar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заменить системное сообщение
sdku
ПыСы:
что касается вида окна и кнопок на нем-см. аргументы ф-ции msgbox
ну, функцию-то я знаю. Только я ж ее не вызываю. Это тоже системный msgbox
...
Рейтинг: 0 / 0
26.08.2021, 17:47
    #40093327
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заменить системное сообщение
Beliar,
Селайте запись в форме, не заполняя обязательное поле, в том файле что приложен к моему сообщению, и ответьте на один простой вопрос:где Вы увидели системное сообщение?
И ЧТО это как не вызов функции MSGBOX при пустом поле2
Код: vbnet
1.
2.
3.
If IsNull(Me.Поле2) Then
MsgBox "поле2 обязательно к заполнению" 'пишите здесь что Вам угодно и при необходимости используйте другие аргументы, коль знаете функцию
Cancel = True
...
Рейтинг: 0 / 0
27.08.2021, 08:26
    #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
27.08.2021, 10:34
    #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
27.08.2021, 11:19
    #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
27.08.2021, 12:17
    #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
27.08.2021, 14:32
    #40093475
Beliar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заменить системное сообщение
sdku, бывает, что не замечу чего-нибудь. заспорили из-за msgbox, и всё... глаза затуманило))) прошу прощения. Спасибо всем вам.
...
Рейтинг: 0 / 0
27.08.2021, 15:57
    #40093499
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заменить системное сообщение
Beliar
sdku,...а системный msgbox - те, я показал на скриншотах, и их опционально не изменить.
Ну почему-же "не изменить" 22363975
значок не смените, только содержание
...
Рейтинг: 0 / 0
28.08.2021, 11:18
    #40093594
Beliar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заменить системное сообщение
Ну, содержание-то понятно.
Beliar
Реакция: выходит сообщение (системный msgbox) с нашим текстом и значком типа vbExclamation и кнопками "ОК" и "Справка".

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

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

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

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

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

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

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

формы - пользователь свободно может передвигаться в пределах записи.
...
Рейтинг: 0 / 0
30.08.2021, 08:49
    #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
30.08.2021, 09:13
    #40093733
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заменить системное сообщение
Beliar
вот в общем... я, ведь, таким образом перехватываю появление системного сообщения во всех случаях возникновения ошибки с конкретным кодом во всех событиях на форме.
обрабатывать по порядку в таком случае или группу если подразумевает похожие действия.

Beliar
Решение проблемы в событии BeforeUpdate самого контрола куда более точечное и деликатное.
не всегда. Пользователь будет "заперт" в этом контроле, что очень неудобно.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / заменить системное сообщение / 25 сообщений из 28, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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