Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 允许用户在MS Access中用句点分隔日期_Ms Access_Date_Data Entry - Fatal编程技术网

Ms access 允许用户在MS Access中用句点分隔日期

Ms access 允许用户在MS Access中用句点分隔日期,ms-access,date,data-entry,Ms Access,Date,Data Entry,我正在使用Access数据库,其中有一个包含多个日期输入字段的表单。我有一个新用户习惯于使用句点作为日期的分隔符,因此他们输入“6.22.11”而不是“6.22.11”或“6-22-11”。我希望继续允许这种类型的条目,但Access将“6.22.11”转换为时间而不是日期。我试着在没有帮助的情况下将文本框上的格式设置为“短日期”。我也尝试过向“失去焦点”事件添加代码,但由于Access已经完成了转换,所以时间太晚了。“更新前”事件在转换之前触发,但不允许我更改文本框中的文本。关于如何允许所有三

我正在使用Access数据库,其中有一个包含多个日期输入字段的表单。我有一个新用户习惯于使用句点作为日期的分隔符,因此他们输入“6.22.11”而不是“6.22.11”或“6-22-11”。我希望继续允许这种类型的条目,但Access将“6.22.11”转换为时间而不是日期。我试着在没有帮助的情况下将文本框上的格式设置为“短日期”。我也尝试过向“失去焦点”事件添加代码,但由于Access已经完成了转换,所以时间太晚了。“更新前”事件在转换之前触发,但不允许我更改文本框中的文本。关于如何允许所有三种形式的日期输入,有什么想法吗?

输入掩码。


输入掩码。

我为一个习惯于在输入掩码中输入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
'---------------------------------------------------------------------------
'用途:允许输入不带分隔符的8位日期:12312008
'用法:Set OnChange:=DateCtlChange([Form].[ActiveControl])
'8/6/09:允许输入不带分隔符的6位日期
(2019年和2020年仍然必须输入为8位数的日期)
'---------------------------------------------------------------------------
函数DateCtlChange(DateCtl作为文本框)
Dim s作为字符串,NewS作为字符串
On Error GoTo Err_DateCtlChange
s=DateCtl.Text
选择案例长度
案例6
如果它像“#######”那么
如果右(s,2)“19”和右(s,2)“20”,则
新闻=左(s,2)&“/”和中(s,3,2)&“/”和中(s,5,2)
如果结束
如果结束
案例8
如果它像“#########”那么
新闻=左(s,2)和“/”和中(s,3,2)和“/”和中(s,5,4)
如果结束
结束选择
如果是新闻,那么
DateCtl.Text=NewS
DateCtl.SelStart=Len(DateCtl.Text)
如果结束
退出日期更改:
退出功能
错误日期更改:
选择案例错误编号
'尝试将文本设置为日期时引发错误2101
'这使日期控件的验证失败
案例2101'您输入的设置对此属性无效。
'日志错误,但不显示用户
其他情况
'在此处添加自定义错误日志记录
结束选择
恢复退出日期更改
端函数

我为一个习惯于在输入掩码中输入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
'---------------------------------------------------------------------------
'用途:允许输入不带分隔符的8位日期:12312008
'用法:Set OnChange:=DateCtlChange([Form].[ActiveControl])
'8/6/09:允许输入不带分隔符的6位日期
(2019年和2020年仍然必须输入为8位数的日期)
'---------------------------------------------------------------------------
函数DateCtlChange(DateCtl作为文本框)
Dim s作为字符串,NewS作为字符串
On Error GoTo Err_DateCtlChange
s=DateCtl.Text
选择案例长度
案例6
如果它像“#######”那么
如果右(s,2)“19”和右(s,2)“20”,则
新闻=左(s,2)&“/”和中(s,3,2)&“/”和中(s,5,2)
如果结束
如果结束
案例8
如果它像“#########”那么
新闻=左(s,2)和“/”和中(s,3,2)和“/”和中(s,5,4)
如果结束
结束选择
如果是新闻,那么
DateCtl.Text=NewS
DateCtl.SelStart=Len(DateCtl.Text)
如果结束
退出日期更改:
退出功能
错误日期更改:
选择案例错误编号
'尝试将文本设置为日期时引发错误2101
'这使日期控件的验证失败
案例2101'您输入的设置对此属性无效。
'日志错误,但不显示用户
其他情况
'在此处添加自定义错误日志记录
结束选择
恢复退出日期更改
端函数

Access使用系统日期和时间格式来确定如何转换值。另一个会影响此用户计算机上的每个程序的选项是:

Access使用系统日期和时间格式来确定如何转换值。另一个会影响此用户计算机上每个程序的选项是:

您上面的示例

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

另一个近似方法是使用BeforeUpdate和AfterUpdate事件。 在BeforeUpdate中,您不能修改控件的de内容,但可以在AfterUpdate事件中设置一个标志(在模块/表单级别定义的变量)并更改内容:它将再次触发BeforeUpdate,但在这种情况下,由于已标记,您应该忽略它并取消滞后。

以上示例

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

另一个近似方法是使用BeforeUpdate和AfterUpdate事件。
在BeforeUpdate中,不能修改控件的de内容,但可以在AfterUpdate事件中设置标志(在模块/表单级别定义的变量)并更改内容:它将再次触发BeforeUpdate,但在这种情况下,由于已标记,您应该忽略它并取消延迟。

或者,您可以在Access中的日期中使用空格而不是斜杠。因此,用户可以在空格键上使用左手,在数字键盘上使用右手。我觉得这比斜杠或连字符更容易使用。

或者,您可以在Access中的日期中使用空格而不是斜杠。因此,用户可以在空格键上使用左手,在数字键盘上使用右手。我觉得这比斜杠或连字符更容易使用。

我希望避免输入掩码,因为根据我的经验,它们