Автозаполнение моей формы в Access с использованием поля со списком

У меня возникла проблема, когда я хочу автоматически заполнить форму в Microsoft Access. Идея состоит в том, что я использую поле со списком для выбора имени. Затем код onChange моего Combobox автоматически вставляет все остальные данные в соответствующее поле. Я использую этот код в поле со списком.

Private Sub cmbName_Change()
Me.tbPersonalNumber = Me.cmbName.Column(0)
Me.tbEmailadress = Me.cmbName.Column(2)
Me.tbBirthday = Me.cmbName.Column(3)
End Sub

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

Я что-то упускаю? Я пробовал все, но это не сработает. Я думал, что проблема связана с тем, что столбец дня рождения является последним в таблице. Или иметь тип даты.

Заранее благодарим вас за ваше время и усилия!

Редактировать; .Column(1) отсутствует, потому что это имя уже вставлено в ComboBox.


person J.Rommers    schedule 15.08.2016    source источник
comment
Отображается ли дата дня рождения в поле со списком (при выпадении)? Если ширина его столбца равна 0, увеличьте его во время отладки. -- На мой взгляд, для этого лучше подходит событие _AfterUpdate, чем _Change, но если все остальное работает, то, вероятно, проблема не в этом.   -  person Andre    schedule 15.08.2016
comment
@Andre Дата дня рождения не отображается в поле со списком при выпадании. Однако я узнал, что PersonalNumber делает. Может быть, это часть проблемы? Это SQL, который имеет поле со списком. SELECT Personel.PersonalNumber, Personel.Name, Personel.Emailadress, Personel.Dirthday FROM Personel ORDER BY Personel.Name;   -  person J.Rommers    schedule 15.08.2016
comment
Вы проверили количество столбцов?   -  person winghei    schedule 15.08.2016


Ответы (2)


Существует некоторая путаница, вызванная формулировкой вопроса, я попытаюсь изложить, как я интерпретировал, и, если я правильно понял, это может привести вас к ответу.

У вас есть поле со списком под названием cmdName, которое предварительно заполнено данными из таблицы. Содержимое поля со списком может выглядеть так, как показано ниже (возможно, вы установили нулевую ширину столбца, чтобы скрыть данные)

0001|Gary Evans|[email protected]|01/Jan/1970
0002|J Rommers |[email protected]  |02/Jan/1970

Когда пользователь выбирает J Rommers, Me.tbPersonalNumber заполняется Me.cmbName.Column(0) (0002), а Me.tbEmailadress заполняется Me.cmbName.Column(2) ([email protected]), но Me.tbBirthday не заполняется Me.cmbName.Column(3) (02 января 1970 г.).

Предполагая, что Me.tbBirthday — это текстовое поле без кода, который мог бы его очистить, я подозреваю, что проблема в поле со списком. Не зная, как настроено ваше поле со списком, я бы предложил следующие проверки: -

  • В свойствах поля со списком Column Count равно 4?
  • In debug, with a breakpoint on Me.tbBirthday = Me.cmbName.Column(3), does it show you the date you are after?
    • If it is not there does the query that populates the combo box have it in?

Изменить на основе комментариев, чтобы помочь в дальнейшем: -

  • Измените запрос на SELECT Personel.PersonalNumber, Personel.Emailadress, Personel.Birthday, Personel.Name FROM Personel ORDER BY Personel.Name;, это поместит все поля, которые вы хотите скрыть, на передний план.
  • Измените свойство ширины столбца cmbName на 0,0,0, это первые те, которые вы хотите скрыть, и оставьте последний, чтобы заполнить ширину поля со списком.
  • Убедитесь, что свойство количества столбцов по-прежнему равно 4 в соответствии с ответом.
  • Измените свой код, как показано ниже, и ответ Gustav

Код замены:-

Me.tbPersonalNumber = Me.cmbName.Column(0)
Me.tbEmailadress = Me.cmbName.Column(1)
Me.tbBirthday = DateValue(Me.cmbName.Column(2))

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

person Gary Evans    schedule 15.08.2016
comment
Это в сочетании с автором @Gustav выше работает! Большое спасибо! - person J.Rommers; 15.08.2016
comment
Я добавил больше информации, чтобы получить нужный вам формат. - person Gary Evans; 15.08.2016

Поля со списком (и списки) всегда возвращают строку, поэтому преобразуйте ее в значение даты:

Me!tbBirthday.Value = DateValue(Me!cmbName.Column(3))
person Gustav    schedule 15.08.2016