Разрешить пользователю разделять даты с периодом в MS Access - PullRequest
1 голос
/ 22 июня 2011

Я работаю с базой данных Access, где у меня есть форма, которая содержит несколько полей для ввода даты.У меня есть новый пользователь, который привык использовать точку в качестве разделителя для дат, поэтому вместо «6/22/11» или «6-22-11» они вводят «6.22.11».Я хотел бы продолжить разрешать этот тип записи, но Access преобразует «6.22.11» во время вместо даты.Я попытался установить формат в текстовом поле «Короткая дата» без посторонней помощи.Я также попытался добавить код в событие «Потерянный фокус», но это слишком поздно, так как Access уже выполнил преобразование.Событие «Перед обновлением» запускается перед преобразованием, но не позволяет мне изменить текст в текстовом поле.Любые идеи о том, как я могу разрешить все три формы ввода даты?

Ответы [ 5 ]

1 голос
/ 23 июня 2011

ваш пример выше

Private Sub Texto0_KeyPress(KeyAscii As Integer)
    If Chr(KeyAscii) = "." Then
        KeyAscii = Asc("/")
    End If
End Sub

у меня работает.

Еще одно приближение - игра с событиями BeforeUpdate и AfterUpdate. В BeforeUpdate вы не можете изменять содержимое элемента управления, но вы можете установить флаг (переменную, определенную на уровне модуля / формы) в событии AfterUpdate и изменить содержимое: он снова вызовет BeforeUpdate, но в этом случае, поскольку помечены, вы должны игнорировать и разблокировать.

0 голосов
/ 23 июня 2011

В качестве альтернативы вы можете использовать пробелы вместо косых черт в датах в Access.Таким образом, пользователь может использовать левую руку на пробел и правой рукой на цифровой клавиатуре.Я чувствую, что его гораздо проще использовать, чем косую черту или дефис.

0 голосов
/ 22 июня 2011

Я написал следующую функцию для пользователя, который привык вводить 6- и 8-значные даты в масках ввода, просто набирая строку чисел без разделителя.Вы должны иметь возможность изменить его для своих целей:

'---------------------------------------------------------------------------
' Purpose   : Enables entry of 8-digit dates with no delimiters: 12312008
' Usage     : Set OnChange: =DateCtlChange([Form].[ActiveControl])
'  8/ 6/09  : Allow entry of 6-digit dates with no delimiters
'               (year 2019 and 2020 must still be entered as 8-digit dates)
'---------------------------------------------------------------------------
Function DateCtlChange(DateCtl As TextBox)
Dim s As String, NewS As String

    On Error GoTo Err_DateCtlChange

    s = DateCtl.Text
    Select Case Len(s)
    Case 6
        If s Like "######" Then
            If Right(s, 2) <> "19" And Right(s, 2) <> "20" Then
                NewS = Left(s, 2) & "/" & Mid(s, 3, 2) & "/" & Mid(s, 5, 2)
            End If
        End If
    Case 8
        If s Like "########" Then
            NewS = Left(s, 2) & "/" & Mid(s, 3, 2) & "/" & Mid(s, 5, 4)
        End If
    End Select
    If IsDate(NewS) Then
        DateCtl.Text = NewS
        DateCtl.SelStart = Len(DateCtl.Text)
    End If


Exit_DateCtlChange:
    Exit Function
Err_DateCtlChange:
    Select Case Err.Number
    'Error 2101 is raised when we try to set the text to a date 
    '    that fails the date control's validation
    Case 2101    'The setting you entered isn't valid for this property.
        'Log error but don't show user
    Case Else
        'Add your custom error logging here
    End Select
    Resume Exit_DateCtlChange
End Function
0 голосов
/ 23 июня 2011

Access использует системный формат даты и времени для определения способа перевода значения.Другой вариант, который может повлиять на каждую программу на компьютере этого пользователя, заключается в следующем: http://office.microsoft.com/en-us/access-help/change-the-default-date-time-number-or-measurement-format-HA010351415.aspx?CTT=1#BM2

0 голосов
/ 22 июня 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...