powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите разобраться с установкой курсора в поле. Access 2016
25 сообщений из 50, страница 1 из 2
Помогите разобраться с установкой курсора в поле. Access 2016
    #39415649
roman-j52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! Вопрос следующий:
Есть форма с полями Поле1, Поле2, Поле3.
Значение, вводимое в Поле2, согласно условию решаемой задачи должно быть строго больше значения в Поле1.
Хочу, в этой связи, написать процедуру обработки события, которая проверяла бы это условие и в случае его нарушения выводила бы сообщение об ошибке, очищала бы содержимое Поле2 и возвращала бы фокус в Поле2.

Примерно вот так:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Private Sub Поле2_AfterUpdate()
Dim Мsg1
Мsg1 = "Ошибка! Значение в Поле 2 должно быть больше значения в Поле 1."
If Поле2 < Поле1 Then
    MsgBox msg1
    Поле2 = Null
End If
    Поле2.SetFocus
End Sub



В итоге, окно с сообщением об ошибке появляется. После нажатия кнопки ОК Поле2 очищается (для повторного ввода корректного значения), но фокус перемещается в следующее поле - Поле3 . Строка Поле2.SetFocus не выполняется по какой-то причине, третий день не могу разобраться по какой. Прошу помощи...
ПРИМЕЧАНИЕ: В более ранней версии офиса (2003) данная процедура работала корректно.
...
Рейтинг: 0 / 0
Помогите разобраться с установкой курсора в поле. Access 2016
    #39415676
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roman-j52,
Проверять условия надо на Before а не AfterUpdate
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Private Sub поле2_BeforeUpdate(Cancel As Integer)
If Me.поле2 < Me.поле1 Then
MsgBox"bla-bla"
Me.Undo
Cancel = True
End If
End Sub
...
Рейтинг: 0 / 0
Помогите разобраться с установкой курсора в поле. Access 2016
    #39415677
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roman-j52...ПРИМЕЧАНИЕ: В более ранней версии офиса (2003) данная процедура работала корректно. Не верю!!!(Станиславский)
...
Рейтинг: 0 / 0
Помогите разобраться с установкой курсора в поле. Access 2016
    #39415697
Фотография Tarasios
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roman-j52,

по поводу фокусировки. Если не получается "поймать" фокус простецким обращением Поле2.SetFocus, сделайте это "с поклоном": сначала установите фокус на саму форму, содержащее поле. Затем, если надо - на подформу, затем - на само нужное вам поле.
Условно говоря:
Вариант 1:
Forms("Форма")("Подформа")![Поле].SetFocus

Вариант 2:
Forms("Форма").SetFocus
Forms("Форма")("Подформа").SetFocus
Forms("Форма")("Подформа")![Поле].SetFocus
...
Рейтинг: 0 / 0
Помогите разобраться с установкой курсора в поле. Access 2016
    #39415714
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roman-j52, строка выполняется - просто далее следующие события переносят курсор на Поле3. (Кстати в месаге эти "Поле1", "Поле2" - они так и на форме называются?)
поэтому всю обработку лучше сделать по получению фокуса Полем 3, если Поле2 меньше чем Поле1, то курсор возвращается в это Поле2.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Private Sub Поле3_GotFocus()
Dim Мsg1 as string, str(1) as string
str(0)="Поле1": str(1)="Поле2" ' здесь названия полей которые будут на форме
Мsg1 = "Ошибка! Значение в " & str(0) & " должно быть больше значения в " & str(1) & "."
If Me.Controls("Поле2") < Me.Controls("Поле1") Then
    MsgBox msg1,vbOk, "Проверка корректности ввода в " & str(1)
    Me.Controls("Поле2") = Null
    Me.Controls("Поле2").SetFocus
End If

End Sub
...
Рейтинг: 0 / 0
Помогите разобраться с установкой курсора в поле. Access 2016
    #39415720
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
повторяю для тех кто в танке:
Проверять валидность надо на событии "до обновления" и отменять его при не выполнении условия
Проверять "после обновления"(которое нельзя отменить)-задать значение полю,и тут же его удалять вершина рациональности
При отмене "до обновления" фокус станется на этом поле-из него нельзя будет выйти до внесения "правильного" значения
...
Рейтинг: 0 / 0
Помогите разобраться с установкой курсора в поле. Access 2016
    #39415743
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
извиняюсь:
me.undo исправить на me.поле2.undo
...
Рейтинг: 0 / 0
Помогите разобраться с установкой курсора в поле. Access 2016
    #39415868
roman-j52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdkuroman-j52,
Проверять условия надо на Before а не AfterUpdate
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Private Sub поле2_BeforeUpdate(Cancel As Integer)
If Me.поле2 < Me.поле1 Then
MsgBox"bla-bla"
Me.Undo
Cancel = True
End If
End Sub



Спасибо Вам большое за дельный совет! Заработало так, как мне надо! Эх, учить и учить мне азы! Другим коллегам, не равнодушным к моему безграмотному горю и откликнувшимся - тоже нижайший поклон и большое спасибо!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Помогите разобраться с установкой курсора в поле. Access 2016
    #39844622
Chara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdkuповторяю для тех кто в танке:
Проверять валидность надо на событии "до обновления" и отменять его при не выполнении условия
Проверять "после обновления"(которое нельзя отменить)-задать значение полю,и тут же его удалять вершина рациональности
При отмене "до обновления" фокус станется на этом поле-из него нельзя будет выйти до внесения "правильного" значения
Как говорила моя бабушка: "Дай Вам Бог здоровья"!
Мучилась целый день, не могла понять, почему перемещение фокуса не срабатывает
...
Рейтинг: 0 / 0
Помогите разобраться с установкой курсора в поле. Access 2016
    #39844757
Chara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Но вообще, как на этом VBA какие-то удобности добавлять в программу - это просто треш какой-то!
Добавила это событие - перестала целая цепочка других событий срабатывать(
...
Рейтинг: 0 / 0
Помогите разобраться с установкой курсора в поле. Access 2016
    #39844794
Chara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторPrivate Sub поле2_BeforeUpdate(Cancel As Integer)
If ISNULL(Me.поле2) Then
MsgBox"Необходимо заполнить это поле"
Me.поле2.Undo
Cancel = True
End If
End Sub

В общем, у меня это не совсем корректно работает.
Проблема в том, что на уровне таблицы я на данный момент не могу запретить иметь пустое поле, т.к. архивы переносимых баз за несколько лет нужно пересматривать специалистам вручную и заполнять пропуски.
Т.е. задача пройтись по записям и проверить ( не программно, а человеку, т.к. масса нестыковок).

Вот с чем столкнулась в такой конструкции - если в этом пустом поле просто нажать клавишу табуляции или щелкнуть в другое поле, то событие BeforeUpdate просто не происходит. И программа спокойно пропускает дальше, оставив его пустым.
Если редактирование начать, то да, сработает - но это бессмысленная ситуация, если уж редактировать начали, то какой-то символ поместили ( искусственно проверила выделив введенное и удалив).

Вот такая конструкция срабатывает один раз:
авторPrivate Sub Поле2_LostFocus()
If IsNull(Me.Поле2) Then
MsgBox "Обязательно нужно заполнить Поле2"
Forms!Form1![Поле2].SetFocus
End If
End Sub
Но если проигнорировать и щелкнуть на следующее поле, то спокойно его покидает.

Причем, если я ее добавляю, то первая вышеуказанная конструкция вообще перестает срабатывать.

Подскажите, пожалуйста, в чем дело?
Думала логика событий такая:
Объект получает фокус, происходят какие-то изменения, теряет фокус
В какое событие все-таки нужно поместить проверки?
...
Рейтинг: 0 / 0
Помогите разобраться с установкой курсора в поле. Access 2016
    #39844796
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chara,
обработка этого события верный,"проверенный веками" код,а вот "цепочка других событий" лично у меня вызывает сомнение:если есть желание выкладывайте свои наработки и поясните чего добиваетесь.
...
Рейтинг: 0 / 0
Помогите разобраться с установкой курсора в поле. Access 2016
    #39844801
Chara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdkuChara,
обработка этого события верный,"проверенный веками" код,а вот "цепочка других событий" лично у меня вызывает сомнение:если есть желание выкладывайте свои наработки и поясните чего добиваетесь.
Да если даже это первое событие единственно, то оно не срабатывает в вышеописанном случае, когда по полям быстренько проходят клавишей табуляции, например.

Ничего такого нет в коде эксклюзивного, от слова совсем ( никаких накруток программирования). Access правда впервые юзаю.
Мастером сделала разделенную форму на основе запроса.
В одной части формы индивидуальное обращение к записи последовательно по всем полям, в другой для наглядности таблица.
...
Рейтинг: 0 / 0
Помогите разобраться с установкой курсора в поле. Access 2016
    #39844803
Chara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То, что не срабатывает именно само событие я проверила, вставив в него вывод мессаджа без всяких условий
...
Рейтинг: 0 / 0
Помогите разобраться с установкой курсора в поле. Access 2016
    #39844805
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CharaДа если даже это первое событие единственно, то оно не срабатывает в вышеописанном случае, когда по полям быстренько проходят клавишей табуляции, например. Стесняюсь спросить:а при выходе из поля без изменения его значения произойдет событие "до обновления"-какой реакции Вы ожидаете(ЧТО должно произойти)???
(ничего и не происходит)
...
Рейтинг: 0 / 0
Помогите разобраться с установкой курсора в поле. Access 2016
    #39844806
Chara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdkuПроверять валидность надо на событии "до обновления" и отменять его при не выполнении условия
Проверять "после обновления"(которое нельзя отменить)-задать значение полю,и тут же его удалять вершина рациональности
При отмене "до обновления" фокус станется на этом поле- из него нельзя будет выйти до внесения "правильного" значения
Это ваша цитата?
...
Рейтинг: 0 / 0
Помогите разобраться с установкой курсора в поле. Access 2016
    #39844807
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chara....Ничего такого нет в коде эксклюзивного, от слова совсем ( никаких накруток программирования). Access правда впервые юзаю....
Весьма самоуверенно,насчет программного кода...
...
Рейтинг: 0 / 0
Помогите разобраться с установкой курсора в поле. Access 2016
    #39844808
Chara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Значит этот код не подходит для проверки пустое осталось это поле или нет, правильно понимаю?

А что тогда в Акссессе еще есть для такого решения?
...
Рейтинг: 0 / 0
Помогите разобраться с установкой курсора в поле. Access 2016
    #39844809
Chara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdkuChara....Ничего такого нет в коде эксклюзивного, от слова совсем ( никаких накруток программирования). Access правда впервые юзаю....
Весьма самоуверенно,насчет программного кода...
Я имела ввиду, что ничего, помимо автоматизированного создания связки запрос-форма не сделала в данном случае.
...
Рейтинг: 0 / 0
Помогите разобраться с установкой курсора в поле. Access 2016
    #39844810
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
коль Вы все проверяете вручную,то простым запросом на выборку выводите записи с пустыми значениями в полях(которые не должны быть пусты),заполняйте их и после заполнения установите,в таблице атрибут "обязательное поле"-фсе...
...
Рейтинг: 0 / 0
Помогите разобраться с установкой курсора в поле. Access 2016
    #39844813
Chara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdkuколь Вы все проверяете вручную,то простым запросом на выборку выводите записи с пустыми значениями в полях(которые не должны быть пусты),заполняйте их и после заполнения установите,в таблице атрибут "обязательное поле"-фсе...
Спасибо за вариант! Но так не получится, к сожалению) Это многоплановые данные, которые в таблицах комплексно надо смотреть, именно по сравнению с другими, заполненными. Но неважно.

Всё-таки, есть событие, которое однозначно может запретить покидать пустое поле?
...
Рейтинг: 0 / 0
Помогите разобраться с установкой курсора в поле. Access 2016
    #39844818
Chara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот в этой статье указано свойство "Правило проверки" для элемента формы. Я его не нашла(
...
Рейтинг: 0 / 0
Помогите разобраться с установкой курсора в поле. Access 2016
    #39844822
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chara...Всё-таки, есть событие, которое однозначно может запретить покидать пустое поле?LostFocus()
...
Рейтинг: 0 / 0
Помогите разобраться с установкой курсора в поле. Access 2016
    #39844823
Chara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Исправить пост тут не дают. Нашла, оно называется теперь "Условие на значение", как раз с удобным свойством Текста ошибки, одно только но - работает точно так же, игнорируя просто проход по полю, запросто оставляя его пустым, если это не добавление новой записи, а проход по старым полям.
...
Рейтинг: 0 / 0
Помогите разобраться с установкой курсора в поле. Access 2016
    #39844824
Chara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdkuChara...Всё-таки, есть событие, которое однозначно может запретить покидать пустое поле?LostFocus()

Ну я так и предполагала, тогда что не так, почему однажды вернув фокус, поле запросто можно покинуть?

авторPrivate Sub Поле2_LostFocus()
If IsNull(Me.Поле2) Then
MsgBox "Обязательно нужно заполнить Поле2"
Forms!Form1![Поле2].SetFocus
End If
End Sub

В LostFocus() нужно что-то другое написать?
...
Рейтинг: 0 / 0
25 сообщений из 50, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите разобраться с установкой курсора в поле. Access 2016
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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