Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка значения поля при заполнении формы 
:(
    Опции темы
AlPin
Дата 2.1.2007, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 2.1.2007

Репутация: нет
Всего: нет



Всем здраствуйте.
Я в БД, макросах и VBA новичок.
Проблема такая:
Дана таблица, а к ней форма с полями: Табельный номер, Фамилия, Дата принятия, Дата увольнения.
Как сделать так, чтобы Access проверял (когда заполняешь форму), что поле "Фамилия" не пустое и только потом позволял вводить в "Дата принятия"
PM MAIL   Вверх
Rodman
Дата 2.1.2007, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 1
Всего: 122



при помощи VBA проверяй

что то типа
Код

if(Edit.Text=' ')...

PM MAIL WWW Skype GTalk YIM MSN   Вверх
AlPin
Дата 2.1.2007, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 2.1.2007

Репутация: нет
Всего: нет



Форма ленточная.
Когда проверяю при получении фокуса на "Дата принятия":
Код

if Фамилия.Text="" then MsgBox("Введите фамилию"):Фамилия.SetFocus

постоянно выскакивает сообщение, даже если поле "Фамилия" не пустое.
Помогите скорее, пока праздники хочу доделать.

Это сообщение отредактировал(а) AlPin - 2.1.2007, 21:38
PM MAIL   Вверх
Юдифь
Дата 3.1.2007, 03:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 15.10.2006
Где: Монголия, Эрдэнэт

Репутация: нет
Всего: нет



Если поставить на свойство "выход" поля "фамилия" так?

Код

If IsNull(фамилия) Then MsgBox ("Введите фамилию")
DoCmd.CancelEvent


вторая строка - если не хочешь, чтобы выпустила из поля "фамилия", пока не введешь значение

А вообще, если в таблице на это поле поставить свойство "обязательное поле", то при выходе из записи будет выскакивать предупреждение, что поле должно быть заполнено обязательно.
PM ICQ   Вверх
AlPin
Дата 3.1.2007, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 2.1.2007

Репутация: нет
Всего: нет



Если поставить в таблице "обязательное поле" у фамилии, то если в форме пропустить ее и ввести какую-нибудь дату, потом стереть ее, то при закрытии достает окошко с информацией, что поле не может быть Null, а если мне уже расхотелось вводить новые данные. Вылазеет окошко с ошибкой, чего мне не надо.

Я точно так же хочу сделать и с полем "Дата увольнения" куда допускается вводить данные только если поле "Дата принятия"заполнено.

Что со второй строкой, что без нее:
Выскакивает сообщение, переходит на "Дата принятия", его можно заполнить и перейти на следующую запись и так далее. Получается, что есть даты принятия, но нет фамилий в таблице, а такого быть не должно.

Сейчас пытаюсь сделать при помощи макросов, но получается немного не так как надо
PM MAIL   Вверх
Юдифь
Дата 4.1.2007, 03:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 15.10.2006
Где: Монголия, Эрдэнэт

Репутация: нет
Всего: нет



Это тебе к сведению: если ты даже заполнишь всю запись и не хочешь сохранять ее, то нажимаешь <esc>, и запись удаляется.
А что касается моего примера - то у меня все срабатывает, и из поля не выпускает, пока не введу данные. Может, ты что-то не так делаешь?
PM ICQ   Вверх
AlPin
Дата 5.1.2007, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 2.1.2007

Репутация: нет
Всего: нет



За сведения спасибо, не знал.
Я так и не смог сделать чего хотел, ладно, пусть Access высвечивает свои окошки с ошибками вместо моих.

Тогда другой вопрос:
В другой ленточной форме из этой же БД поле "Табельный номер" выбирается из выпадающего списка, состоящего из тех, кто на данный момент работает (т.е. не уволен) и вводятся 2 даты (начало-конец работы).
Как сделать проверку, чтобы 1 и тот же рабочий (одинаковый табельный номер) не мог выполнять 2 работы в одно время?
PM MAIL   Вверх
dionisiu
Дата 6.1.2007, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 13.5.2006
Где: Крым

Репутация: 1
Всего: 2



скрин формы приложи, а то не понятно.
также опиши таблицу, в которой хранятся данные (которые нужно контролировать на отсутствие совпадений)
видимо, форма - типа табеля учёта рабочего времени.
Они бывают разные: по отдельному подразделению (бригада, участок, отдел ...) и по предприятию.
В первом случае - один работник в одном табеле дважды попасть не может, а во втором - может, если среди месяца было перемещение (частый случай для строительства - перевод с участка на участок), хотя и быть на двух участках в один день не должен (бывает, конечно, что на одном участке 4 часа, и на другом участке 4 часа).

а вот фраза
Цитата(AlPin @  5.1.2007,  18:43 Найти цитируемый пост)
чтобы 1 и тот же рабочий (одинаковый табельный номер) не мог выполнять 2 работы в одно время? 

это, конечно, не хорошо, но ведь бывает совмещение и/или расширение объёма работ.


самый простой выход пока видится - сделать в свойствах таблицы для поля, хранящего записи о табельных номерах, свойство - индексированное, обязательное, уникальные записи.
но если таблица идёт "с календарным накоплением" (в одной таблице хранятся табели отработанного времени за период квартал, год, пятилетку...), то нужны ещё два поля: Год и Месяц, а ключ таблицы будет составной по этим полям

PM MAIL ICQ   Вверх
AlPin
Дата 6.1.2007, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 2.1.2007

Репутация: нет
Всего: нет



Совмещения быть не должно (рабочий - это водитель, который совершает междугородние рейсы).

Вот такая форма:
Код типа транспорта|Номер маршрута|Длина маршрута|Табельный номер водителя|Дата выхода|Дата возвращения

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

Т.е., чтобы проверялись условия:
Дата_выхода_2>Дата_возвращения_1 or Дата_возвращения_2<Дата_выхода_1
Вот только я не знаю, как это реализовать.

Это сообщение отредактировал(а) AlPin - 6.1.2007, 18:24
PM MAIL   Вверх
dionisiu
Дата 9.1.2007, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 13.5.2006
Где: Крым

Репутация: 1
Всего: 2



если идёт срожайшая последовательность заполнения данных (то есть никакой документ не проводится "задним числом"), то вторая часть условия "Дата_возвращения_2<Дата_выхода_1" не обязательна (к тому же, её трудно реализовать)

Если описанные тобой названия полей формы РАВНЫ таким же полям некоей таблицы (предположим, Рейсы), то можно попытаться в свойства поля "Дата выхода" (условие на значение) вписать такой код:

Код

>=DMax("[Дата возвращения]", "[Рейсы]", "[Табельный номер водителя]=Forms![Рейсы]![Табельный номер водителя]")


Однако, таблица должна иметь как минимум одну запись для каждого водителя, иначе придётся сильно усложнять это условие. Пробуй мастер функций

PM MAIL ICQ   Вверх
Akina
Дата 9.1.2007, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(AlPin @  6.1.2007,  19:23 Найти цитируемый пост)
Т.е., чтобы проверялись условия:
Дата_выхода_2>Дата_возвращения_1 or Дата_возвращения_2<Дата_выхода_1
Вот только я не знаю, как это реализовать.

Код

Select *
From MyTable
Where (Date21 Between Date11 AND Date 12)
   OR (Date22 Between Date11 AND Date 12)

Если все в порядке - возвращаемый рекордсет должен быть пустым.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
dionisiu
Дата 10.1.2007, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 13.5.2006
Где: Крым

Репутация: 1
Всего: 2



Akina, автор имел ввиду сравнить данные в ПОЛЯХ Дата_возвращения и Дата_выхода в ТЕКУЩЕЙ ЗАПИСИ с данными в тех же полях ПРЕДЫДУЩЕЙ ЗАПИСИ. Ваш запрос пытается найти данные в НЕСУЩЕСТВУЮЩИХ полях. Или это - недокументированный способ обращения к предыдущим записям? тогда - снимаю шляпу.


PM MAIL ICQ   Вверх
Akina
Дата 10.1.2007, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



dionisiu, я удивлен...

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

Однако для текущей записи мы берем не значение поля записи в таблице БД, а содержимое контрола, т.е. литерал, и подставляем его в запрос. Т.е. имеем нечто типа:

Код
'extreme draft
strSQL = "Select * From MyTable Where (" & _
          Date21.Text & _
          " Between Date11 AND Date 12) OR (" & _
          Date22.Text & _
          " Between Date11 AND Date 12)"
Set rs = OpenRecordset(strSQL)
If rs.RecordCount > 0 Then MsgBox "Фигня какая-то..."



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS Access"
Akina
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Access | Следующая тема »


 




[ Время генерации скрипта: 0.0537 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.