Как установить значение несвязанного текстового поля со значением по умолчанию для пустой строки с помощью Access VBA - PullRequest
1 голос
/ 02 декабря 2011

У меня есть база данных с информацией о посетителях нашего отдела. Вот мои настройки: пользователь выбирает имя посетителя из списка. Access назначает значения из записи этого посетителя временным переменным и открывает несвязанную форму, где эти переменные являются значениями по умолчанию в текстовом поле. Когда пользователь изменяет значение в текстовом поле, событие After_Update использует SQL для обновления соответствующего поля в записи этого посетителя и назначает новое значение временной переменной.

Пример After_Update:

Dim strRUN As String
strRUN = updateVisitorOnDirty(Me.txtVisitorTravelMethod, "VisitorTravelMethod", 1)
HideWarnings (strRUN)
TempVars!strVisitorTravelMethod = Nz(Me.txtVisitorTravelMethod.Value, "")

"updateVisitorOnDirty" - это функция, которая возвращает SQL для обновления поля (указанного во втором аргументе) в таблице с информацией о посетителях с первым аргументом. (Число в конце говорит, что это строка.) «HideWarnings» отключает предупреждения, выполняет SQL, а затем снова включает предупреждения.

Моя проблема: Когда пользователь очищает текстовое поле, событие After_Update возвращает текстовое поле к его предыдущему значению.

Сначала я подумал, что, возможно, несвязанное текстовое поле вернулось к значению по умолчанию, когда оно было очищено, но я установил точку останова в подпрограмме, которая срабатывает во время After_Update:

Если я изменю значение в mytextbox с a на b, debug.print отобразит значение mytextbox как b. Если я изменю значение в mytextbox с a на (пустая или пустая строка), debug.print покажет значение mytextbox равным a.

Мой обходной путь заключался в добавлении небольшого символа «x» рядом с текстовым полем, которое пользователь может щелкнуть, чтобы: 1) очистить текстовое поле, 2) обновить временную переменную и 3) обновить таблицу. Это работает нормально, но, похоже, должен быть лучший способ. Помощь

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

(Я отредактировал это, чтобы код правильно отображался ... раньше не выходил из строки.)

Ответы [ 2 ]

1 голос
/ 07 декабря 2011

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

Call ResetDefault(Me.textbox1.Text, Me.textbox1)

И определил функцию:

Public Sub ResetDefault(ByVal strChange As String, ByRef txtCurrent As TextBox)
If Nz(strChange, "") = "" Then txtCurrent.DefaultValue = ""
End Sub

То есть, если пользователь очистил текстовое поле,значение по умолчанию для этого текстового поля было установлено равным "", что позволило текстовому полю фактически исчезнуть.

0 голосов
/ 03 декабря 2011

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

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

...