【问题标题】:Microsoft Access DLookup based on Entry Date基于输入日期的 Microsoft Access DLookup
【发布时间】:2021-02-22 19:50:40
【问题描述】:

我是 Microsoft Access 的新手,一直在努力解决一个问题。
我正在使用表单根据表格 (UpdatedFiles) 搜索申请号。

我正在尝试让表单显示给定申请号的最新输入状态。但是,当我尝试这样做时,结果总是会提取给定申请号上最早输入的状态。

我的表单有代码,一旦保存记录,就会更新输入日期 (ENTRYDT)。

当我搜索应用程序编号 (APPID) 时,我基本上是在尝试使用最新的 ENTRYDT。 APPID 是表的主键。

我的代码如下所示:

Private Sub SearchCommand_Click()
Dim strfilapp As String
Dim strcheck As Variant


strfilapp = "[APPID] = " & "'" & Me!APPID & "'"

strcheck = DLookup("[APPID]", "UpdatedFiles", strfilapp)

If Not IsNull(strcheck) Then
    On Error Resume Next
    [APPID] = DLookup("[APPID]", "UpdatedFiles", strfilapp)
    [LN] = DLookup("[LN]", "UpdatedFiles", strfilapp)
    [FN] = DLookup("[FN]", "UpdatedFiles", strfilapp)
    [PAPERAPP] = DLookup("[PAPERAPP]", "UpdatedFiles", strfilapp & "[ENTRYDT]" >= # LATEST #)
    On Error GoTo 0
Else
    Me.APPID = ""
    MsgBox ("No file with an hyperlinked paper application found for your search. Searching for a file without...")

    strcheck = DLookup("[APPID]", "InitialFiles", strfilapp)

    If Not IsNull(strcheck) Then
        On Error Resume Next
    [APPID] = DLookup("[APPID]", "InitialFiles", strfilapp)
    [LN] = DLookup("[LN]", "InitialFiles", strfilapp)
    [FN] = DLookup("[FN]", "InitialFiles", strfilapp)
        On Error GoTo 0
    Else
        Me.APPID = ""
        MsgBox ("No file found for your search. Try again.")
        Me.SearchField.SetFocus
    End If
End If

End Sub

当我执行 APPID 搜索时,我不断获取第一次输入数据库的应用程序,而不是最新的应用程序(基于 ENTRYDT)。

我尝试将 ENTRYDT 添加到 [PAPERAPP] 行,作为 DLookup 中的参数,但似乎无法弄清楚如何去做。你能帮帮我吗?

谢谢!

【问题讨论】:

  • 如果 APPID 是数字类型字段,请勿使用撇号分隔符。当 Me!APPID 中已经有 APPID 时,为什么还要为 APPID 执行 DLookup? If Not IsNull(Me.APPID) Then。那为什么要将APPID字段设置为APPID呢?我没有看到使用 ENTRYDT。编辑问题以显示您的尝试。代码似乎在多条记录中重复名称信息 - 为什么?
  • 由于某种原因,APPID 存储为短文本... APPID DLookup 是因为我为此 IF ELSE 使用了两个不同的表。如果在 UpdatedFiles 表中找不到 APPID,它会查看原始表并从原始表中提取所有数据。原始表是实时更新的,并且 updatedfiles 表将在单个时间点对原始表进行快照。
  • 我迷路了。两个 DLookup 都引用同一个表。表单绑定到哪个表?原始表(名称?)是不是累积数据?添加/更新/替换记录?那些 # 需要是引号内的文字文本。假设 ENTRYDT 是一个日期/时间字段,该字段不需要#,只需要条件参数。
  • 表单绑定到 UpdatedFiles 表。 InitialFiles 是运行查询产生的累积数据。 UpdatedFiles 表有一个超链接字段,而 InitialFiles 字段没有。我们将 PAPERAPP 超链接到初始文件,这反过来使其成为更新文件。我希望只更新记录,而不是添加记录。但是,我还没有弄清楚该怎么做,因为该表会不断生成新记录,即使 APPID 已经在 UpdatedFiles 中。我还使用完整的 VBA 更新了原始帖子,以更好地展示表格搜索的工作原理。
  • Octothorpes 和 >= 引号内的运算符,还需要 AND:& " AND [ENTRYDT] >= #" & [LATEST] & "#")

标签: vba ms-access record dlookup


【解决方案1】:

如果您希望 PAPERAPP 与给定 APPID 的最新日期相关联 - 如 Max() - 日期,则可能需要另一个域聚合函数。

[PAPERAPP] = DLookup("[PAPERAPP]", "UpdatedFiles", strfilapp & " AND [ENTRYDT] = #" & _
            DMax("ENTRYDT", "UpdatedFiles", "APPID='" & [APPID] & "'") & "#")

【讨论】:

  • 谢谢!我之前也尝试过 DMax,但没有尝试将 DMax 嵌套到 DLookup 中。像魅力一样工作。
  • 很高兴它成功了。将日期值拉到变量和连接变量也应该有效。如果答案解决了问题,请标记为已接受。点赞也不错。
  • 我两个都做了。它说由于我的声誉未满 15 岁,它不会公开显示我的赞成票。
猜你喜欢
  • 1970-01-01
  • 2018-12-25
  • 2014-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-30
  • 1970-01-01
相关资源
最近更新 更多