MS Access ’16 — Запрос, не извлекающий значение из поля

#vba #ms-access

#vba #ms-access

Вопрос:

[Отказ от ответственности: Я самоучка и абсолютный новичок!]

У меня есть ФОРМА, с помощью которой ЗАПРОС извлекает данные и использует их для заполнения ОТЧЕТА. Когда конечный пользователь завершает отчет и нажимает кнопку, должно произойти следующее:

1) ФОРМА сохраняет все данные в новой записи в ТАБЛИЦЕ
2) Запрос извлекает эту запись по идентификатору (который пронумерован автоматически) из ФОРМЫ
3) ЗАПРОС заполняет ОТЧЕТ данными из ТАБЛИЦЫ
4) ФОРМА и ЗАПРОС закрываются — сохранять не нужно.

ЗАПРОС извлекает все данные из соответствующей ТАБЛИЦЫ со следующими критериями: [Формы]![Data_Input_Form]![ИДЕНТИФИКАТОР]

Однако мой ОТЧЕТ выдается пустым! Ик!

У меня есть аналогичный ЗАПРОС, который извлекает данные из той же ТАБЛИЦЫ и заполняет их в похожем ОТЧЕТЕ со следующими критериями: Как Nz ([Формы]![Домашняя форма]![Incident_ID_Lookup_text],»*»)

Неудивительно, что когда я добавил это к ЗАПРОСУ, который работал не так, как я хотел, он выдал ВСЕ предыдущие записи.

 '------------------------------------------------------------
' Add Report [and Open Report] Button Click
'
'
'------------------------------------------------------------

Private Sub Add_Rpt_Btn_Click()

If MsgBox("Are you sure? No backsies.", vbYesNo, "Add Report?") = vbNo Then
    Exit Sub
End If

 'Check for Necessary Fields and Add New Record
If (IsNull(Me.Person_Filing) Or IsNull(Me.Nature_Lst) Or IsNull(Me.Location_Cmb) Or IsNull(Me.Summary) Or IsNull(Me.Narrative)) = True Then
    MsgBox "Looks like you left some important information out. Please fill out all fields with an asterisk.", vbOKOnly, Whoops
    Exit Sub
Else
    DoCmd.GoToRecord , , acNewRec
End If

 'Run Query to Open Report
DoCmd.OpenQuery "Form_to_Report_Qry"

DoCmd.OpenReport "Incident_Report_1", acViewReport, , [ID] = [Forms]![Data_Input_Form]![ID]

 'Close Query without Saving
DoCmd.Close acQuery, "Form_to_Report_Qry", acSaveNo

 'Close Form without Saving
DoCmd.Close acForm, "Data_Input_Form", acSaveNo

End Sub
  

ОТЧЕТ необходимо заполнить самой последней записью, но она продолжает оставаться пустой.

Ответ №1:

Это потому, что вы перемещаете новую (пустую) запись без идентификатора.

Я думаю, все, что вам нужно, это использовать текущий идентификатор формы — и использовать правильный синтаксис для фильтра:

 Private Sub Add_Rpt_Btn_Click()

    If MsgBox("Are you sure? No backsies.", vbYesNo, "Add Report?") = vbNo Then
        Exit Sub
    End If

    ' Check for Necessary Fields and Add New Record
    If (IsNull(Me.Person_Filing) Or IsNull(Me.Nature_Lst) Or IsNull(Me.Location_Cmb) Or IsNull(Me.Summary) Or IsNull(Me.Narrative)) = True Then
        MsgBox "Looks like you left some important information out. Please fill out all fields with an asterisk.", vbOKOnly, Whoops
        Exit Sub
    End If

    ' If not saved, save the current record.
    If Me.Dirty = True Then
        Me.Dirty = False
    End If

    DoCmd.OpenReport "Incident_Report_1", acViewReport, , "[ID] = " amp; Me![ID].Value amp; ""

    ' Close Form without Saving
    DoCmd.Close acForm, Me.Name, acSaveNo

End Sub
  

Комментарии:

1. Ого, да! Спасибо, Густав, это полностью сработало. Можете ли вы объяснить (или дать ссылку на объяснение) этот фрагмент: «[ID] = » amp; Me![ID].Value amp; «» И еще раз спасибо! Я был в тупике!

2. Это выражение фильтра, которое при открытии отчета фильтрует отчет по этой единственной записи.