Microsoft Access DLookup на основе даты входа

Я новичок в Microsoft Access и пытаюсь понять проблему.
Я использую форму для поиска номера приложения на основе таблицы (UpdatedFiles).

Я пытаюсь получить форму для отображения последнего введенного статуса по заданному номеру заявки. Однако, когда я пытаюсь это сделать, в результате всегда отображается самый ранний введенный статус для данного номера приложения.

В моей форме есть код, который обновляет дату входа (ENTRYDT) после сохранения записи.

Я в основном пытаюсь использовать последнюю версию ENTRYDT, когда ищу номер приложения (APPID). 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, но просто не могу понять, как это сделать. Не могли бы вы мне помочь?

Спасибо!


person AccessNovice    schedule 22.02.2021    source источник
comment
Если APPID является полем числового типа, не используйте разделители апострофов. Зачем делать DLookup для APPID, если у вас уже есть APPID в Me! APPID? If Not IsNull(Me.APPID) Then. Тогда зачем устанавливать в поле APPID значение APPID? Я не вижу использования ENTRYDT. Отредактируйте вопрос, чтобы показать свою попытку. Код, кажется, дублирует информацию об имени в нескольких записях - почему?   -  person June7    schedule 22.02.2021
comment
По какой-то причине APPID хранится как Short Text ... APPID DLookup - это потому, что я использую две разные таблицы для этого IF ELSE. Если APPID не найден в таблице UpdatedFiles, он просматривает необработанную таблицу для него и извлекает все данные из необработанной таблицы. Необработанная таблица обновляется в реальном времени, а таблица updatedfiles предназначена для создания моментального снимка этой необработанной таблицы за один момент времени.   -  person AccessNovice    schedule 23.02.2021
comment
Я потерян. Оба DLookup ссылаются на одну и ту же таблицу. К какой таблице привязана форма? Исходная таблица (имя?) Не является совокупными данными? Записи добавляются / обновляются / заменяются? Эти # должны быть буквальным текстом в кавычках. Предполагая, что ENTRYDT - это поле даты / времени, # для поля не требуется, только параметр критерия.   -  person June7    schedule 23.02.2021
comment
Форма привязана к таблице UpdatedFiles. InitialFiles - это совокупные данные, полученные в результате выполненного запроса. В таблице UpdatedFiles есть поле Hyperlink, а в поле InitialFiles нет. Мы делаем гиперссылку PAPERAPP на исходный файл, что, в свою очередь, превращает его в UpdatedFile. Я хочу, чтобы записи только обновлялись, а не добавлялись. Однако я не понял, как это сделать, поскольку таблица продолжает генерировать новые записи, даже если APPID уже находится в UpdatedFiles. Я также обновил исходный пост полным VBA, чтобы лучше продемонстрировать, как работает поиск по таблице.   -  person AccessNovice    schedule 23.02.2021
comment
Octothorpes и оператор ›= в кавычках, также необходимо AND: & " AND [ENTRYDT] >= #" & [LATEST] & "#")   -  person June7    schedule 23.02.2021
comment
Понятно. Так выглядят мои строки в таблице UpdatedFiles . Когда я выполняю поиск с добавленным приведенным выше кодом, я получаю первое, что вводится в таблицу с APPID. Я хочу, чтобы поиск отображал данные PAPERAPP для самого последнего ENTRYDT для этого APPID.   -  person AccessNovice    schedule 23.02.2021


Ответы (1)


Если вы хотите, чтобы PAPERAPP был связан с самой последней - как в Max () - датой для данного APPID, вероятно, потребуется другая агрегатная функция домена.

[PAPERAPP] = DLookup("[PAPERAPP]", "UpdatedFiles", strfilapp & " AND [ENTRYDT] = #" & _
            DMax("ENTRYDT", "UpdatedFiles", "APPID='" & [APPID] & "'") & "#")
person June7    schedule 22.02.2021
comment
Спасибо! Я пробовал использовать DMax и раньше, но вложить DMax в DLookup не удалось. Работал как шарм. - person AccessNovice; 23.02.2021
comment
Рад, что это сработало. Вытягивание значения даты в переменную и конкатенацию переменной также должны работать. Если ответ решает проблему, отметьте как принятый. Голоса за тоже хороши. - person June7; 23.02.2021
comment
Я пошел дальше и сделал и то, и другое. Он говорит, что не будет публично отображать мои голоса, так как у меня репутация ниже 15. - person AccessNovice; 23.02.2021