2015-12-07 2 views
0

Я новичок в MS Access, и у меня есть форма с полями [имя] и [компания]. Я хочу, чтобы пользователь потребовал заполнить любой из них, но не обязательно оба. Они могут заполнить [имя], [компания] или и то, и другое, но они не могут оставить оба пустым.Как сделать любое из двух полей, необходимых в MS Access?

Как это достичь?

ответ

2

Вы можете сделать это в VBA:

Создать EventHandler, которая проходит перед сохранением набора данных и сказать ему, чтобы отменить обновление, если ваши условия не выполняются:

Private Sub Form_BeforeUpdate(Cancel As Integer) 
    If (isnull(me!name) and isnull(me.company) then 
     msgBox "Give me more !" 
     Cancel = True 
    End If 
End Sub 
+1

Или просто: 'If IsNull (Me! Name + Me! Company) Then' – Gustav

+0

Это работает, но создает проблему: если я начну вводить данные для новой записи, а затем удалю ее, Access не позволит мне перейти на предыдущий потому что ни одно из двух полей не содержит ничего. –

+0

Me.Undo отменяет все, что вы делали в текущей записи, и позволяет вам выйти из новой записи. Или положите его после Cancel = true или (лучше): создайте для него новую кнопку. – Johanness

0

Я бы рекомендуем Макросы данных в этом случае (если вы используете Access 2010 или новее). Преимущество более VBA заключается в том, что Data Macro работает на уровне двигателя, поэтому, если у вас есть несколько форм с этими полями, вам не нужно дублировать VBA для каждого из них. Это также устраняет проблему с запуском ввода данных и последующим их удалением.

Перейти к таблице дизайн, нажмите Создание данных Макросы>до изменения и добавьте Если состояние так:

Data macro Before Update

Вы можете использовать VBA, чтобы поймать номер ошибки 1, чтобы сделать некоторые вещи. Как говорят Access, номера ошибок определены пользователем и не имеют никакого значения для Access.

+0

@ Jeppe Я также думаю, что вы не должны называть свое поле 'Name', так как это вызывает некоторые проблемы при использовании VBA. Я не помню, что именно – Combinatix