无法在 Access 中使用 Nz 和 DLookup 抑制#Error

Unable to suppress #Error using Nz and DLookup in Access

我正在处理一份报告 header,我想在其中的文本字段中显示 selected 查询参数。具体来说,用户访问一个表单,selects 可用组合框的任意组合,然后单击提交按钮将所选参数传递给将用于生成报告的查询。

在表单中,组合框显示来自查找查询的记录。例如,我的参数之一是 Status。 Status 组合框的行源有一个名为 qry_StatusLookup 的行源,它只是 Status table 的查询。这将在组合框中显示动态结果。组合框列数为 2,列宽设置为 0;“1”。这绑定了 ID 列(不是名称列),以便在用户提交他们的 selections 时将 ID 号传递给查询。

在我的报告 header 中,我有相同的字段应该反映在传递给查询的表单中选择的参数。例如,header 中的状态文本框设置为控制源:

=DLookUp("[Status_Name]","tbl_Status","[Status_ID] =" & [Forms]![frm_ParameterSelection]![cboStatusLookup])

这里显示的是所选参数的名称,而不是 ID 号。当我提交表单时,值传递给查询并显示报告。如果在表单上 select 编辑了状态,那么它将成功显示。但是,如果用户没有 select 状态,查询将 运行 成功(通过不按状态过滤),并且报告是正确的,但是 header 字段应该显示状态参数 selected 将显示为 #Error。

我试图将 Dlookup 包装在 NZ 函数中,但这仍然显示 #Error is the parameter is not selected from the form。但是,如果参数是从表单中 select 编辑的,那么状态将显示成功。

我的 Nz 函数的语法有问题吗?

=Nz(DLookUp("[Status_Name]","tbl_Status","[Status_ID] =" & [Forms]![frm_ParameterSelection]![cboStatusLookup]),"")

或者,传递给查询的空组合框值在技术上不为空吗?

错误不为空,您将 DLookUp 包装在 Nz 中,而不是字段中,如果字段 DLookUp returns 错误为空

尝试以下操作:

DLookUp("[Status_Name]","tbl_Status","[Status_ID] =" & Nz([Forms]![frm_ParameterSelection]![cboStatusLookup], 0))

(我假设 0 不会出现在您的 Status_ID 列中。或者,您可以使用 Iif(IsNull([frm_ParameterSelection]![cboStatusLookup]),