我在访问中设计dataentryform。我创建了表格,一个字段的数据是日期/时间,但在格式的属性字段中,我将mm.\yyyy
放入月份和年份。我该如何为它定义输入掩码?我想看看 - 。 - -
当我在表格中输入数据时,我可以看到这个字段旁边的日历,但我必须选择一天,我不想选择一天,但是我选择的那天并没有保存在表格中,但我必须选择好日子。
更多解释:我有2个字段应该定义为mm.yyyy .one字段是(项目示例01.2010的开始),下一个字段是项目结束,它也具有相同的格式mm.yyyy(03.2015)。 后来我想得到一个查询,显示项目的持续时间(项目结束 - 项目开始)。所以我也应该根据我的数据进行计算。 但是我不知道我应该在表中为这两个字段定义什么类型的数据类型。起初我尝试了日期/时间。但我找不到合适的格式。然后我把它改成短文,我在输入掩码中输入了00.0000。 什么是最好的解决方案,因为我必须根据这两个字段计算项目的持续时间? (在查询中)
答案 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。