MS Access '16-查询未从字段中提取值

时间:2019-03-26 20:30:59

标签: access-vba ms-access-2016

[免责声明:我是自学成才的,而且是新手!]

我有一个FORM,QUERY使用该FORM提取数据并将其用于填充REPORT。当最终用户完成报告并单击一个按钮时,将会发生以下情况:

1)FORM将所有数据保存在表的新记录中
2)查询通过FORM中的ID(已自动编号)从该记录中提取该记录
3)QUERY填充一个使用表中的数据进行报告
4)FORM和QUERY关闭-无需保存。

QUERY使用以下条件从对应的TABLE中提取所有数据:[Forms]![Data_Input_Form]![ID]

但是,我的报告空白!哎呀!

我有一个类似的QUERY,可以使用以下条件从同一张表中提取数据并将其填充到类似的REPORT中:像Nz([Forms]![Home_Form]![Incident_ID_Lookup_text],“ *”)

不足为奇的是,当我将其添加到无法正常运行的QUERY中时,它会报告所有以前的记录。

'------------------------------------------------------------
' 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

REPORT需要填充最近的记录,但是一直空白。

1 个答案:

答案 0 :(得分:1)

那是因为您移动了一个新的(空)记录-没有ID。

我想,您所需要做的就是使用表单的当前ID-并对过滤器使用正确的语法:

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] = " & Me![ID].Value & ""

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

End Sub