ms 访问中的自定义 DateDiff 函数不起作用
Posted
技术标签:
【中文标题】ms 访问中的自定义 DateDiff 函数不起作用【英文标题】:Customized DateDiff function in ms access does not work 【发布时间】:2021-12-06 23:56:37 【问题描述】:我为我的 access 数据库创建了一个自定义 DateDiff 函数。我希望它在两个日期之间给出一个结果,例如 x 年 y 月2年7个月。代码如下:
Option Compare Database
Option Explicit
Function MyDateDiff(D1 As Date, D2 As Date) As Variant
' D1= Begin Date
' D2= Current Date
Dim M1 As Integer
Dim M2 As Integer
Dim Y1 As Integer
Dim y As String
Dim mo As String
If D1 = Null Then
Exit Function
End If
If D2 = Null Then
Exit Function
End If
M1 = DateDiff("m", D1, D2)
Y1 = Int(M1 / 12)
M2 = M1 - (Y1 * 12)
If Y1 > 1 Then
y = "years"
Else: y = "year"
End If
If M2 > 1 Then
mo = "months"
Else: mo = "month"
End If
MyDateDiff = Y1 & y & M2 & mo
End Function
我在查询中使用它,但它显示如下错误:
我需要知道我在这里做错了什么。提前致谢。
【问题讨论】:
你把程序放在通用模块里了吗?模块不能与过程同名。 而这个If D1 = Null Then
是错误的语法。应该是If IsNull(D1) Then
;但它永远不会发生,因为您已将 D1 和 D2 声明为 Date
,它永远不会是 Null。
【参考方案1】:
无法将任何东西与 Null 进行比较,甚至不能与另一个 Null 进行比较,因为 Null 没有什么可比较的。使用 IsNull() 或在查询中使用 Is Null。查看 allenbrowne.com/casu-12.html。此外,只有 Variant 类型的变量可以保存 Null。声明为 Date 类型的变量将具有默认值 12:00:00 AM。考虑:
Function MyDateDiff(D1 As Date, D2 As Date) As Variant
' D1= Begin Date
' D2= Current Date
Dim M1 As Integer
Dim M2 As Integer
Dim Y1 As Integer
Dim y As String
Dim m As String
If Year(D1) = 1899 Or Year(D2) = 1899 Then
MyDateDiff = Null
Else
M1 = DateDiff("m", D1, D2)
Y1 = Int(M1 / 12)
M2 = M1 - (Y1 * 12)
y = " year" & IIf(Y1 > 1, "s", "")
m = " month" & IIf(M2 > 1, "s", "")
MyDateDiff = Y1 & y & " " & M2 & m
End If
End Function
【讨论】:
以上是关于ms 访问中的自定义 DateDiff 函数不起作用的主要内容,如果未能解决你的问题,请参考以下文章
定义和用法 DATEDIFF() 函数返回两个日期之间的天数
C 中的自定义函数在 Red Hat Linux 中不起作用,但在 HPUX 中可以