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。
我正在 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。