我有以下查询“ qryE”。
Equipment E1_45J E2_45J E3_45J E4_45J
400 2019-03-25 2019-10-07
401 2019-04-01 2019-10-23
402 2019-02-14 2019-08-25 2019-11-11
403 2019-02-11 2019-09-05 2019-11-25
我创建了一个函数来返回这4列之间的最新值:
Function getmaxdate(dteDate1 As Date, dteDate2 As Date, dteDate3 As Date, dteDate4 As Date) As Date
Dim dteMaxDate As Date
dteMaxDate = dteDate1
Debug.Print dteDate2
If IsDate(dteDate2) Then
If dteDate2 > dteMaxDate Then dteMaxDate = dteDate2
If IsDate(dteDate3) Then
If dteDate3 > dteMaxDate Then dteMaxDate = dteDate3
If IsDate(dteDate4) Then
If dteDate4 > dteMaxDate Then dteMaxDate = dteDate4
getmaxdate = dteMaxDate
End Function
我要实现的目标是:
Equipment 45J
400 2019-10-07
401 2019-10-23
402 2019-11-11
403 2019-11-25
但是,当我使用45J运行查询时:
getmaxdate([E1_45J],[E2_45J],[E3_45J],[E4_45J])
我在条件表达式中出现数据类型不匹配。
我尝试通过以下方式强制查询值的格式:
45J: getmaxdate(Format([E1_45J], "yyyy/mm/dd"),Format([E2_45J], "yyyy/mm/dd"),Format([E3_45J], "yyyy/mm/dd"),Format([E4_45J], "yyyy/mm/dd"))
但是,我仍然遇到相同的错误。
我在做什么错了?
答案 0 :(得分:1)
大概是由于将Null
传递给Date
参数,导致出现类型不匹配。
更改函数的签名以接受Variant
值而不是Date
-Variant
可以容纳Null
值。
在所有参数都定义为As Date
的情况下,IsDate
函数只能返回True
。
我建议不要假设date1
是有效日期,并且将“最大日期”默认设置为CDate(0)
:如果记录中包含任何日期,它将大于该日期。
也请注意关闭您的If...End If
区块。
答案 1 :(得分:1)
您可以在qryE上使用SQL来执行此操作,我的表是tblTesting
,因此您将对其进行更改。
select equipment,MAX(d) as mxDate from
(
SELECT
equipment,
E1_45J as d from tblTesting
UNION
SELECT
equipment,
E2_45J as d from tblTesting
UNION
SELECT
equipment,
E3_45J as d from tblTesting
UNION
SELECT
equipment,
E4_45J as d from tblTesting
)
group by equipment