| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MS Access > Проверка значения поля при заполнении формы |
| Автор: AlPin 2.1.2007, 19:08 |
| Всем здраствуйте. Я в БД, макросах и VBA новичок. Проблема такая: Дана таблица, а к ней форма с полями: Табельный номер, Фамилия, Дата принятия, Дата увольнения. Как сделать так, чтобы Access проверял (когда заполняешь форму), что поле "Фамилия" не пустое и только потом позволял вводить в "Дата принятия" |
| Автор: Rodman 2.1.2007, 19:20 | ||
| при помощи VBA проверяй что то типа
|
| Автор: AlPin 2.1.2007, 19:33 | ||
| Форма ленточная. Когда проверяю при получении фокуса на "Дата принятия":
постоянно выскакивает сообщение, даже если поле "Фамилия" не пустое. Помогите скорее, пока праздники хочу доделать. |
| Автор: Юдифь 3.1.2007, 03:32 | ||
Если поставить на свойство "выход" поля "фамилия" так?
вторая строка - если не хочешь, чтобы выпустила из поля "фамилия", пока не введешь значение А вообще, если в таблице на это поле поставить свойство "обязательное поле", то при выходе из записи будет выскакивать предупреждение, что поле должно быть заполнено обязательно. |
| Автор: AlPin 3.1.2007, 18:23 |
| Если поставить в таблице "обязательное поле" у фамилии, то если в форме пропустить ее и ввести какую-нибудь дату, потом стереть ее, то при закрытии достает окошко с информацией, что поле не может быть Null, а если мне уже расхотелось вводить новые данные. Вылазеет окошко с ошибкой, чего мне не надо. Я точно так же хочу сделать и с полем "Дата увольнения" куда допускается вводить данные только если поле "Дата принятия"заполнено. Что со второй строкой, что без нее: Выскакивает сообщение, переходит на "Дата принятия", его можно заполнить и перейти на следующую запись и так далее. Получается, что есть даты принятия, но нет фамилий в таблице, а такого быть не должно. Сейчас пытаюсь сделать при помощи макросов, но получается немного не так как надо |
| Автор: Юдифь 4.1.2007, 03:20 |
| Это тебе к сведению: если ты даже заполнишь всю запись и не хочешь сохранять ее, то нажимаешь <esc>, и запись удаляется. А что касается моего примера - то у меня все срабатывает, и из поля не выпускает, пока не введу данные. Может, ты что-то не так делаешь? |
| Автор: AlPin 5.1.2007, 18:43 |
| За сведения спасибо, не знал. Я так и не смог сделать чего хотел, ладно, пусть Access высвечивает свои окошки с ошибками вместо моих. Тогда другой вопрос: В другой ленточной форме из этой же БД поле "Табельный номер" выбирается из выпадающего списка, состоящего из тех, кто на данный момент работает (т.е. не уволен) и вводятся 2 даты (начало-конец работы). Как сделать проверку, чтобы 1 и тот же рабочий (одинаковый табельный номер) не мог выполнять 2 работы в одно время? |
| Автор: AlPin 6.1.2007, 18:23 |
| Совмещения быть не должно (рабочий - это водитель, который совершает междугородние рейсы). Вот такая форма: Код типа транспорта|Номер маршрута|Длина маршрута|Табельный номер водителя|Дата выхода|Дата возвращения Нужно сделать так: Если если есть одна запись с табельным номером, допустим, 1 и вводится вторая, уже другая запись с таким же табельным номером, то надо проверить, чтобы промежуток между датами не перекрывался Т.е., чтобы проверялись условия: Дата_выхода_2>Дата_возвращения_1 or Дата_возвращения_2<Дата_выхода_1 Вот только я не знаю, как это реализовать. |
| Автор: dionisiu 9.1.2007, 11:27 | ||
| если идёт срожайшая последовательность заполнения данных (то есть никакой документ не проводится "задним числом"), то вторая часть условия "Дата_возвращения_2<Дата_выхода_1" не обязательна (к тому же, её трудно реализовать) Если описанные тобой названия полей формы РАВНЫ таким же полям некоей таблицы (предположим, Рейсы), то можно попытаться в свойства поля "Дата выхода" (условие на значение) вписать такой код:
Однако, таблица должна иметь как минимум одну запись для каждого водителя, иначе придётся сильно усложнять это условие. Пробуй мастер функций |
| Автор: Akina 9.1.2007, 13:06 | ||||
Если все в порядке - возвращаемый рекордсет должен быть пустым. |
| Автор: dionisiu 10.1.2007, 10:21 |
| Akina, автор имел ввиду сравнить данные в ПОЛЯХ Дата_возвращения и Дата_выхода в ТЕКУЩЕЙ ЗАПИСИ с данными в тех же полях ПРЕДЫДУЩЕЙ ЗАПИСИ. Ваш запрос пытается найти данные в НЕСУЩЕСТВУЮЩИХ полях. Или это - недокументированный способ обращения к предыдущим записям? тогда - снимаю шляпу. |
| Автор: Akina 10.1.2007, 10:32 | ||
| dionisiu, я удивлен... Признаться, не смотрел плотно всю тему - хотя бы потому что занесение данных напрямую в таблицу (пусть и через форму) считаю глубоко порочным методом - и использую исключительно непривязанную форму, полный контроль, программное занесение и отображение имеющегося в таблице в подчиненной форме. Однако для текущей записи мы берем не значение поля записи в таблице БД, а содержимое контрола, т.е. литерал, и подставляем его в запрос. Т.е. имеем нечто типа:
|