table 中的数据类型应该是 Date/time 还是短文本?

datatype in the table should be Date/time or short tgext?

我正在 access 中设计数据输入表单。我制作了 tables 并且一个字段的数据类型是 Date/time 但在 属性 字段中我输入 mm.\yyyy 以获得 month 和 year 的格式。我应该如何为它定义输入掩码?我想看看 - 。 - - 当我在表单中输入数据时,我可以在该字段旁边看到日历,但我也必须选择日期我不想选择日期,但是我选择的日期不会保存在 table 中,但我必须选择好日期。

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

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

另一种方法是将 two/three 并列的年月(-日)文本框,然后使用 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。