首页 > 解决方案 > VBA Access 中 DMin 函数中的两个日期条件

问题描述

我有一个包含多个日期字段的表格,例如

DOB (Date), 
DOA_ASST(Date), 
DOA_UDC (Date) 

还有一些领域,比如

ID (AutoNumber), 
EmpID (Integer), 
EmpName (Text), 
SeniorityNumber (Integer) etc.

许多员工在同一日期晋升,也有相同的任命日期。我想根据他们的第一次任命日期提供他们的年资序列号。

标准如下——

  1. 如果多个员工在同一日期晋升,则将考虑较早日期的任命日期,如果任命日期相同,则将考虑较早日期的出生日期。

我尝试了以下代码:-

Private Sub cmdProcess_Click()
Dim rst As Recordset
Dim rst1 As Recordset

Dim LastSN As Integer
Dim str, strAsst, strUDC, strLDC As String
Dim LDCDate, UDCDate, AsstDate, BirthDate As Date

AsstDate = Nz(DMax("[DOP_ASST]", "tblDraftSeniority"), DMin("[DOP_ASST]", "tblRawSeniority"))
UDCDate = DMin("[DOP_UDC]", "tblRawSeniority", "[DOP_ASST] = #" & AsstDate & "#")
LDCDate = DMin("[DOA_ESIC]", "tblRawSeniority", "[DOP_UDC] =  #" & UDCDate & "# AND [DOP_ASST] = #" & AsstDate & "#")
BirthDate = DMin("[DOB]", "tblRawSeniority", "[DOA_ESIC] =  #" & LDCDate & "#")

LastSN = DLookup("[ID]", "tblRawSeniority", "[DOB] =  #" & BirthDate & "#")

Set rst = CurrentDb.OpenRecordset("tblRawSeniority")
Set rst1 = CurrentDb.OpenRecordset("tblDraftSeniority")

rst.MoveLast
rst.MoveFirst
Do While rst.EOF = False

    If rst!ID = LastSN Then

        With rst
            Me.txtEmpName1 = rst!EmpName
            Me.txtEmpCatg1 = rst!Category
            Me.txtEmpDOB1 = rst!DOB
            Me.txtEmpDOEntry1 = rst!DOA_ESIC
            Me.txtEmpDONextPromo1 = rst!DOP_UDC
            Me.txtEmpDOCurrentPromo1 = rst!DOP_ASST
            Me.txtEmpStateRegion1 = rst!Region
            Me.txtRemark1 = rst!Remark
            Me.txtSN1 = rst!SrNoHQRS

        End With
    End If

    rst.MoveNext

Loop

Set rst = Nothing

End Sub

但有两个日期标准的null价值LDCDate

标签: vbams-access

解决方案


由于您允许 AsstDate 使用空值,因此您很可能在 LDCDate DMin 查找的条件中使用空值(或 0)。如果您的表在 DOP_ASST 字段中实际上没有空值,那么您的 LDCDate 将为空值,因为没有找到结果。


推荐阅读