#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. Это выражение фильтра, которое при открытии отчета фильтрует отчет по этой единственной записи.