表中的数据类型应该是日期/时间还是短tgext?

时间:2017-03-29 08:06:01

标签: ms-access-2010 ms-access-2007 ms-access-2013 ms-access-2016

我在访问中设计dataentryform。我创建了表格,一个字段的数据是日期/时间,但在格式的属性字段中,我将mm.\yyyy放入月份和年份。我该如何为它定义输入掩码?我想看看 - 。 - - 当我在表格中输入数据时,我可以看到这个字段旁边的日历,但我必须选择一天,我不想选择一天,但是我选择的那天并没有保存在表格中,但我必须选择好日子。

更多解释:我有2个字段应该定义为mm.yyyy .one字段是(项目示例01.2010的开始),下一个字段是项目结束,它也具有相同的格式mm.yyyy(03.2015)。 后来我想得到一个查询,显示项目的持续时间(项目结束 - 项目开始)。所以我也应该根据我的数据进行计算。 但是我不知道我应该在表中为这两个字段定义什么类型的数据类型。起初我尝试了日期/时间。但我找不到合适的格式。然后我把它改成短文,我在输入掩码中输入了00.0000。 什么是最好的解决方案,因为我必须根据这两个字段计算项目的持续时间? (在查询中)

1 个答案:

答案 0 :(得分:1)

有很多方法可以解决这个问题。一种是简单地允许用户在未绑定的文本框中自由键入,然后在更新之前验证/更正。

另一个是年/月(-day)有两个/三个并列的文本框,然后使用 DateSerial(y,m,d)构建日期值。

在VBA中,单独mm / yyyy永远不会形成日期值,所以必须以某种方式静默添加一天。

应避免使用输入掩码,因为它们是用户的主要仇恨对象。

如果你坚持,你可以从我的文章中了解如何处理这个问题:

Entering ISO formatted date with input mask and full validation in Microsoft Access

它假设ISO序列,因为年 - 月确定可能的日期值。

<强>附录:

虽然十进制月份不是一个确切的衡量标准,因为这几个月的天数不同,你会非常接近这个功能:

Public Function DecimalMonths( _
    ByVal Date1 As Date, _
    ByVal Date2 As Date) _
    As Double

    Dim Part1   As Double
    Dim Part2   As Double
    Dim Months  As Double
    Dim Days1   As Integer
    Dim Days2   As Integer

    Days1 = Day(DateSerial(Year(Date1), Month(Date1) + 1, 0))
    Days2 = Day(DateSerial(Year(Date2), Month(Date2) + 1, 0))

    Months = DateDiff("m", Date1, Date2)
    Part1 = (Day(Date1) - 1) / Days1
    Part2 = (Day(Date2) - 1) / Days2

    Months = Months - Part1 + Part2

    DecimalMonths = Months

End Function

请注意,2017-04-15至2017-06-01的计数为1.53

虽然从2017-04-16到2017-06-01将是1.5。