![]() |
|
Модераторы: Akina |
![]()
|
|
| AlPin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 2.1.2007 Репутация: нет Всего: нет |
Всем здраствуйте.
Я в БД, макросах и VBA новичок. Проблема такая: Дана таблица, а к ней форма с полями: Табельный номер, Фамилия, Дата принятия, Дата увольнения. Как сделать так, чтобы Access проверял (когда заполняешь форму), что поле "Фамилия" не пустое и только потом позволял вводить в "Дата принятия" |
|||
|
||||
| Rodman |
|
|||
|
CIO ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 6144 Регистрация: 7.5.2006 Где: Ukraine ⇛ Kyiv ci ty Репутация: 1 Всего: 122 |
при помощи VBA проверяй
что то типа
|
|||
|
||||
| AlPin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 2.1.2007 Репутация: нет Всего: нет |
Форма ленточная.
Когда проверяю при получении фокуса на "Дата принятия":
постоянно выскакивает сообщение, даже если поле "Фамилия" не пустое. Помогите скорее, пока праздники хочу доделать. Это сообщение отредактировал(а) AlPin - 2.1.2007, 21:38 |
|||
|
||||
| Юдифь |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 15.10.2006 Где: Монголия, Эрдэнэт Репутация: нет Всего: нет |
Если поставить на свойство "выход" поля "фамилия" так?
вторая строка - если не хочешь, чтобы выпустила из поля "фамилия", пока не введешь значение А вообще, если в таблице на это поле поставить свойство "обязательное поле", то при выходе из записи будет выскакивать предупреждение, что поле должно быть заполнено обязательно. |
|||
|
||||
| AlPin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 2.1.2007 Репутация: нет Всего: нет |
Если поставить в таблице "обязательное поле" у фамилии, то если в форме пропустить ее и ввести какую-нибудь дату, потом стереть ее, то при закрытии достает окошко с информацией, что поле не может быть Null, а если мне уже расхотелось вводить новые данные. Вылазеет окошко с ошибкой, чего мне не надо.
Я точно так же хочу сделать и с полем "Дата увольнения" куда допускается вводить данные только если поле "Дата принятия"заполнено. Что со второй строкой, что без нее: Выскакивает сообщение, переходит на "Дата принятия", его можно заполнить и перейти на следующую запись и так далее. Получается, что есть даты принятия, но нет фамилий в таблице, а такого быть не должно. Сейчас пытаюсь сделать при помощи макросов, но получается немного не так как надо |
|||
|
||||
| Юдифь |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 15.10.2006 Где: Монголия, Эрдэнэт Репутация: нет Всего: нет |
Это тебе к сведению: если ты даже заполнишь всю запись и не хочешь сохранять ее, то нажимаешь <esc>, и запись удаляется.
А что касается моего примера - то у меня все срабатывает, и из поля не выпускает, пока не введу данные. Может, ты что-то не так делаешь? |
|||
|
||||
| AlPin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 2.1.2007 Репутация: нет Всего: нет |
За сведения спасибо, не знал.
Я так и не смог сделать чего хотел, ладно, пусть Access высвечивает свои окошки с ошибками вместо моих. Тогда другой вопрос: В другой ленточной форме из этой же БД поле "Табельный номер" выбирается из выпадающего списка, состоящего из тех, кто на данный момент работает (т.е. не уволен) и вводятся 2 даты (начало-конец работы). Как сделать проверку, чтобы 1 и тот же рабочий (одинаковый табельный номер) не мог выполнять 2 работы в одно время? |
|||
|
||||
| dionisiu |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 13.5.2006 Где: Крым Репутация: 1 Всего: 2 |
скрин формы приложи, а то не понятно.
также опиши таблицу, в которой хранятся данные (которые нужно контролировать на отсутствие совпадений) видимо, форма - типа табеля учёта рабочего времени. Они бывают разные: по отдельному подразделению (бригада, участок, отдел ...) и по предприятию. В первом случае - один работник в одном табеле дважды попасть не может, а во втором - может, если среди месяца было перемещение (частый случай для строительства - перевод с участка на участок), хотя и быть на двух участках в один день не должен (бывает, конечно, что на одном участке 4 часа, и на другом участке 4 часа). а вот фраза
это, конечно, не хорошо, но ведь бывает совмещение и/или расширение объёма работ. самый простой выход пока видится - сделать в свойствах таблицы для поля, хранящего записи о табельных номерах, свойство - индексированное, обязательное, уникальные записи. но если таблица идёт "с календарным накоплением" (в одной таблице хранятся табели отработанного времени за период квартал, год, пятилетку...), то нужны ещё два поля: Год и Месяц, а ключ таблицы будет составной по этим полям |
|||
|
||||
| AlPin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 2.1.2007 Репутация: нет Всего: нет |
Совмещения быть не должно (рабочий - это водитель, который совершает междугородние рейсы).
Вот такая форма: Код типа транспорта|Номер маршрута|Длина маршрута|Табельный номер водителя|Дата выхода|Дата возвращения Нужно сделать так: Если если есть одна запись с табельным номером, допустим, 1 и вводится вторая, уже другая запись с таким же табельным номером, то надо проверить, чтобы промежуток между датами не перекрывался Т.е., чтобы проверялись условия: Дата_выхода_2>Дата_возвращения_1 or Дата_возвращения_2<Дата_выхода_1 Вот только я не знаю, как это реализовать. Это сообщение отредактировал(а) AlPin - 6.1.2007, 18:24 |
|||
|
||||
| dionisiu |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 13.5.2006 Где: Крым Репутация: 1 Всего: 2 |
если идёт срожайшая последовательность заполнения данных (то есть никакой документ не проводится "задним числом"), то вторая часть условия "Дата_возвращения_2<Дата_выхода_1" не обязательна (к тому же, её трудно реализовать)
Если описанные тобой названия полей формы РАВНЫ таким же полям некоей таблицы (предположим, Рейсы), то можно попытаться в свойства поля "Дата выхода" (условие на значение) вписать такой код:
Однако, таблица должна иметь как минимум одну запись для каждого водителя, иначе придётся сильно усложнять это условие. Пробуй мастер функций |
|||
|
||||
| Akina |
|
||||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
Если все в порядке - возвращаемый рекордсет должен быть пустым. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
| dionisiu |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 13.5.2006 Где: Крым Репутация: 1 Всего: 2 |
Akina, автор имел ввиду сравнить данные в ПОЛЯХ Дата_возвращения и Дата_выхода в ТЕКУЩЕЙ ЗАПИСИ с данными в тех же полях ПРЕДЫДУЩЕЙ ЗАПИСИ. Ваш запрос пытается найти данные в НЕСУЩЕСТВУЮЩИХ полях. Или это - недокументированный способ обращения к предыдущим записям? тогда - снимаю шляпу.
|
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
dionisiu, я удивлен...
Признаться, не смотрел плотно всю тему - хотя бы потому что занесение данных напрямую в таблицу (пусть и через форму) считаю глубоко порочным методом - и использую исключительно непривязанную форму, полный контроль, программное занесение и отображение имеющегося в таблице в подчиненной форме. Однако для текущей записи мы берем не значение поля записи в таблице БД, а содержимое контрола, т.е. литерал, и подставляем его в запрос. Т.е. имеем нечто типа:
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
![]()
|
| Правила форума "MS Access" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MS Access | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |