Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
73 / 47 / 9
Регистрация: 24.03.2014
Сообщений: 470

Не могу проверить заполнение поля "Дата" в коде формы

21.05.2014, 13:30. Показов 3292. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Возникла проблема - на форме есть поле формата ДАТА, в зависимости от его значения хочу выполнять определенные действия.. Если ставить проверку на текущую дату, то все в порядке:
Visual Basic
1
If Me.ПолеДата = Date Then ...
но если я пытаюсь проверить поле на его заполненность, то нет никакой реакции.. такая строчка не помогает:
Visual Basic
1
If Me.ПолеДата = Null Then ...
нет никакой реакции...

Где ошибся, подскажите?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.05.2014, 13:30
Ответы с готовыми решениями:

Проверить поля формы на заполнение
<form action=""> <div class="row"><input type="text" name="i1" id="i1"/></div> <div class="row"><input type="text" name="i2"...

Заполнение поля типа Дата в Битрикс24 через скрипт php
Добрый день! Подскажите, пожалуйста, делаю связь формы на сайте с Битрикс24. При заполнении формы происходит создание лида в Битрикс24....

формат поля формы Дата (название месяца)
Доброе время суток! У меня вопрос касающийся формата даты. Есть Таблица1 с полем ДатаРождения. На основе Таблицы1 создана форма...

20
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
21.05.2014, 13:38
Нулл ничему не равен, даже самому себе :-)
Проверять на "пустоту" можно функцией IsNull. Или проверять количество символов в поле функцией Len
Visual Basic
1
2
3
If Isnull(Me.ПолеДата)l Then ..
'или
If Len(Me.ПолеДата & "")l Then ..
1
73 / 47 / 9
Регистрация: 24.03.2014
Сообщений: 470
21.05.2014, 13:47  [ТС]
mobile, а если нужно добавить через AND второе условие (проверка другого поля, но уже на заполненность), то как быть?
Можно ли написать так?:
Visual Basic
1
If  Isnull(Me.ПолеДата) AND  Notnull(Me.ПолеДата2) Then ..
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
21.05.2014, 13:54
Нет синтаксис обратного условия иной
Visual Basic
1
If  Isnull(Me.ПолеДата) AND  Not Isnull(Me.ПолеДата2) Then ..
2
73 / 47 / 9
Регистрация: 24.03.2014
Сообщений: 470
21.05.2014, 14:35  [ТС]
mobile, а на какое событие лучше повесить такую проверку - на таймер формы или можно как-то по-другому заставить акс мониторить изменение полей в ней?

Добавлено через 1 минуту
Просто таймер меня смущает тем, что использование таймера заставляет форму подрагивать (по крайней мере на моем компьютере), и сомневаюсь, что это хорошо сказывается на скорости работы БД..
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
21.05.2014, 14:39
Если интересует полностью готовая дата, а не в процессе заполнения, то подходит событие AfterUpdate (После обновления). Но есть такой нюанс: когда дату заполняют через календари, то AfterUpdate может не сработать и приходится проверять на событии Change (Изменение). Но Change реагирует на каждый введенный вручную символ и поэтому в Change приходится ставить проверку на валидность даты
Visual Basic
1
If Isdate(Me.ПолеДата.Text) Then
1
73 / 47 / 9
Регистрация: 24.03.2014
Сообщений: 470
21.05.2014, 15:01  [ТС]
Цитата Сообщение от mobile Посмотреть сообщение
Если интересует полностью готовая дата, а не в процессе заполнения, то подходит событие AfterUpdate (После обновления). Но есть такой нюанс: когда дату заполняют через календари, то AfterUpdate может не сработать и приходится проверять на событии Change (Изменение). Но Change реагирует на каждый введенный вручную символ и поэтому в Change приходится ставить проверку на валидность даты
У меня именно такая ситуация - дата заполняется через модуль календаря. Про Change... то есть сначала проверяем валидность даты, и только потом начинаем проверять собственно условия, описанные выше? Я просто пытаюсь синтаксис понять...
Visual Basic
1
If Isdate(Me.ПолеДата.Text) Then if...
так?
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
21.05.2014, 15:22
Цитата Сообщение от Eujine Посмотреть сообщение
У меня именно такая ситуация - дата заполняется через модуль календаря
Ну, если поле даты всегда заполняется календарем и недоступно для ручного ввода/модификации (например, Locked=True или Enable=False), то достаточно подавать сигнал или выполнять действия. Проверки на полноту заполнения даты не требуется.
Иная ситуация когда есть поле заполняется также и вручную. Дело в том, что как уже говорилось, событие Change реагирует на каждый введенный символ: написали цифру дня, чендж сработал и так далее. Приходится проверять готовая ли дата или в процессе.
Visual Basic
1
2
3
4
Dim d
d=Me.ПолеДата.Text 'Сввойство Text дает вводимое значение до сохранения в БД
If Isdate(d) Then '
  If Year(d)>=1900 Then 'Проверка на год
[
1
73 / 47 / 9
Регистрация: 24.03.2014
Сообщений: 470
21.05.2014, 15:46  [ТС]
Цитата Сообщение от mobile Посмотреть сообщение
Ну, если поле даты всегда заполняется календарем и недоступно для ручного ввода/модификации (например, Locked=True или Enable=False), то достаточно подавать сигнал или выполнять действия. Проверки на полноту заполнения даты не требуется.
Если вешаю условие на событие формы AfterUpdate, но ничего не происходит... (я так понимаю, для корректной работы нужно добавить кнопку обновления формы, или в каждом поле формы на событие "выход" вешать обновление формы?..) а если вешаю на таймер формы, то все работает, но считать ли такую реализацию нормальной?
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
21.05.2014, 16:02
На AfterUpdate проверять уже нужно не Text, а Value. Но Value умолчательное значение и его можно не писать
Visual Basic
1
If Isdate(Me.ПолеДата) Then
0
73 / 47 / 9
Регистрация: 24.03.2014
Сообщений: 470
21.05.2014, 16:18  [ТС]
mobile, нет, нет.. я имел ввиду это:
Цитата Сообщение от Eujine Посмотреть сообщение
mobile, а на какое событие лучше повесить такую проверку - на таймер формы или можно как-то по-другому заставить акс мониторить изменение полей в ней?
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
22.05.2014, 00:19
Eujine, Я бы безусловно сделал на Change. Зачем беспрестанно и без надобности к тому же, держать таймер взведенным? Change здесь как раз к месту
0
73 / 47 / 9
Регистрация: 24.03.2014
Сообщений: 470
22.05.2014, 01:32  [ТС]
mobile, а для формы разве есть событие Change? я ничего кроме Dirty не нашел, но на него нет реакции..

Добавлено через 58 минут
Цитата Сообщение от Eujine Посмотреть сообщение
я ничего кроме Dirty не нашел, но на него нет реакции..
точнее реакция есть, но только на первое изменение любого из полей.. последующие ни к чему не приводят, так как изменения касаются не новых записей, а все той же..
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
22.05.2014, 01:48
Уровень событий формы это события записи. А Вам, насколько я понял, нужны события изменяемых полей в одной записи. Вот для этих полей надо воспользоваться событием Change.
Сделайте универсальную функцию и запишите ее имя в коде для нужных полей. Если функцию сделать публичной или уровня формы, то можно вообще обойтись без кода, записав имя функции в свойстве события
Visual Basic
1
=MyFunction()
0
73 / 47 / 9
Регистрация: 24.03.2014
Сообщений: 470
22.05.2014, 11:19  [ТС]
Цитата Сообщение от mobile Посмотреть сообщение
Если функцию сделать публичной или уровня формы
В смысле обозначить ее как паблик и вынести в шапку формы?

Добавлено через 1 час 9 минут
Еще проблема:

На событие Change поляДата повесил условие:

Visual Basic
1
If Isdate(Me.ПолеДата.Text) Then ...
Если начинаю изменять поле вручную, все работает. Но если дата вводится из календаря, условие игнорируется ((
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
22.05.2014, 11:48
Цитата Сообщение от Eujine Посмотреть сообщение
Если начинаю изменять поле вручную, все работает. Но если дата вводится из календаря, условие игнорируется ((
Где-то Вы ошибаетесь. Хотя и знал наверняка, только что попробовал еще раз. Событие реагирует в штатном режиме.

Выложите БД на форум. Только самое необходимое. Сожмите, запакуйте в архив. И обязательно укажите какая форма, какое поле, где, что нажимать.

И еще - какая версия акса у Вас?
0
73 / 47 / 9
Регистрация: 24.03.2014
Сообщений: 470
22.05.2014, 12:13  [ТС]
mobile, вот все вырезал. В форме всего четыре поля, повесил скрипт на событие Change поля "ДатаКонецП" которое должно стирать данные из поля "ДатаКонецФ".. если вводить вручную - работает, если через календарь - не работает.

И буду очень признателен, если покажете на самом простом примере публичную функцию для отслеживания изменений набора данных...

У меня 2003 акс.
Вложения
Тип файла: rar Рецензенты.rar (424.2 Кб, 3 просмотров)
0
73 / 47 / 9
Регистрация: 24.03.2014
Сообщений: 470
22.05.2014, 12:34  [ТС]
mobile, может быть, проблема в календаре?
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
22.05.2014, 23:12
Да, наверное проблема в календаре. Разбираться не стал...

Модель отслеживания без Change такова:
1. в модуле формы введена переменная p уровня формы. При загрузке она получает значение False
2. на событии получения фокуса полем [ДатаКонецП] сделана процедура, проверяющая переменную p и если она True, то выполняются действия, указанные в процедуре события Change. А также сбрасывается переменная в False
3. на событии кнопки вызова календаря
- переменная устанавливается в False
- вызов формы календаря сделан диалоговым (acDialog) для перехвата кода календарем
- переменная устанавливается в True
- поле [ДатаКонецП] получает фокус и отрабатывают Ваши инструкции из события Change.

И еще. У Вас что-то было с файлом. Какие-то неясные симптомы нездоровья. На всякий случай импортировал все в новую чистую БД Рецензенты1
Вложения
Тип файла: rar Рецензенты1.rar (77.1 Кб, 11 просмотров)
1
73 / 47 / 9
Регистрация: 24.03.2014
Сообщений: 470
22.05.2014, 23:43  [ТС]
mobile, спасибо огромное!
Я правильно понимаю, что можно теперь написать публичную функцию, и на событии Change просто поставить ее вызов?
А какие симптомы, если не секрет? Просто это лишь маленькая часть БД, если такое действительно есть, то мне лучше всю БД перезалить в чистую.. Но не перенесу ли я тогда туда все ошибки...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.05.2014, 23:43
Помогаю со студенческими работами здесь

Вывод пустого поля формата Дата/время в запросе для формы
Добрый день! В форме есть поле с датой последнего занятия (поле из запроса на выборку последней даты). Если такого занятия вообще не было...

Автоматическое заполнение поля формы
Здравствуйте! У меня есть несколько таблиц в базе данных, например: class c_nar(models.Model): dnar =...

Автоматическое заполнение поля формы
Здравствуйте уважаемые форумчане. :help: Ищу наиболее оптимальное решение своего скромного задания. 1. Две таблицы...

Автоматическое заполнение в поля таблицы (формы)
Здравствуйте! Уже нет сил, ничего не получается, что описано в подобных темах на форуме (по видимому руки не из того места растут...) у...

Автоматическое заполнение поля формы из таблицы
Добрый день господа. Такая вот проблема,с которой бьюсь длительной время.На форуме вроде как есть подсказки по моей теме,но все равно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru