Как разрешить поле со списком оставаться пустым//пропускать в форме

Я относительно новичок в Access, и любой SQL и VBA, которые я изучил, является самоучкой, поэтому я был бы очень признателен за ответы, которые не слишком перегружены техническими терминами... тем не менее, у меня проблема с разрешением полям со списком оставаться пустым в форме, если пользователь не хочет вводить данные. Кроме того, я использую Access 2016.

Первоначально проблема, с которой я столкнулся, заключалась в том, что если поле со списком было полностью пропущено и оставлено пустым, или если пользователь выбирает поле со списком, а затем пытается двигаться дальше, не делая выбора из списка, он получает сообщение об ошибке «Вы попытались назначить нулевой значение переменной, которая не является типом данных Variant», и не смогли перейти ни к каким другим полям в форме или сохранить введенную запись.

Я нашел эту статью, в которой подробно описан возможный решение, но я не могу заставить его работать. Я сделал несвязанный список со списком, установил для источника строки значение:

SELECT EmailID, PersonalEmail FROM EmailT  UNION SELECT "<N/A>","<N/A>" FROM EmailT
ORDER BY PersonalEmail;

где PersonalEmail — это поле короткого текста, а EmailID — это автонумерация. Я также выполнил шаги, описанные в статье, для форматирования поля со списком (ширина столбца и т. д.) и установил для него значение Limit to List = Yes.

Вот мой точный код:

Private Sub Combo62_AfterUpdate()
If Combo62 = "<N/A>" Then
    EmailID = Null
Else
    EmailID = Combo62
End If
End Sub

Private Sub Form_Current()
If IsNull(EmailID) Then
    Combo62 = "<N/A>"
Else
    Combo62 = EmailID
End If
End Sub

‹ N/A> теперь отображается в моем списке, но если он выбран, я получаю сообщение об ошибке: «Введенное вами значение недействительно для этого поля. Например, вы могли ввести текст в числовое поле или число больше, чем разрешено параметром FieldSize».

Отладчик Access выделяет строку:

EmailID = Null

но я не уверен, какие шаги я должен предпринять сейчас, чтобы попытаться исправить это.

Я полностью открыт для других методов, позволяющих оставить поле со списком пустым, если кто-то знает лучший способ сделать это. Насколько я знаю, мне не хватает чего-то действительно очевидного! Заранее спасибо за любую информацию!

РЕДАКТИРОВАТЬ: Спасибо за вашу помощь, ребята, я так и не понял, в чем именно проблема, но я получил совет от другого форума, чтобы переосмыслить дизайн моей базы данных, так что это оказалось нулевой проблемой - теперь все совершенно по-другому!


person AliG    schedule 26.04.2016    source источник
comment
Является ли EmailID целым числом? Целые числа не могут быть нулевыми в vba, вам нужно будет найти другой способ обработки этого, например, установить его на -1   -  person Doktor OSwaldo    schedule 27.04.2016
comment
EmailID — это целое число — я не знал, что они не могут быть нулевыми. Я попытался установить его на -1, но все равно не смог запустить код без ошибки.   -  person AliG    schedule 29.04.2016
comment
только варианты могут быть нулевыми в vba, для числовых типов данных есть конструктор по умолчанию со значением (целое число равно 0). Так что ваш IsNull (EmailID) тоже бесполезен   -  person Doktor OSwaldo    schedule 29.04.2016
comment
Я попытался установить его значение на 0 и изменить эту другую строку на If (EmailID = 0) Then вместо использования IsNull, но все равно не повезло. Та же ошибка выскакивает.   -  person AliG    schedule 03.05.2016
comment
опубликуйте свои определения переменных или, лучше, полный блок кода. Я не думаю, что мы сможем решить это только с помощью этого кода;)   -  person Doktor OSwaldo    schedule 03.05.2016


Ответы (1)


Если источник записей для вашей формы содержит запрос с отношениями «один ко многим», может возникнуть эта ошибка. Попробуйте использовать только базовую таблицу в качестве источника записи для формы. Используйте подчиненные формы, если вам нужно отобразить связанные данные. Тогда остальная часть кода может оказаться ненужной.

person JJ32    schedule 26.04.2016
comment
Я попытался создать новую форму на основе этого метода проектирования, но также столкнулся с проблемами. Если я попытаюсь выбрать параметр в раскрывающемся списке или сначала ввести поле со списком в подчиненной форме, я получаю сообщение об ошибке. Вы не можете присвоить значение этому объекту. * Объект может быть элементом управления в форме только для чтения. * Объект может находиться в форме, открытой в представлении «Дизайн». *Значение может быть слишком большим для этого поля. Я точно знаю, что он не открыт в представлении дизайна... - person AliG; 29.04.2016