【问题标题】:MS Access - OpenReport with WhereCondition prompting for parameters/Invalid bracketingMS Access - 带有 WhereCondition 提示参数/无效括号的 OpenReport
【发布时间】:2020-08-17 22:50:07
【问题描述】:

在我的 MS Access 项目中,我有一个用于收集几个参数的表单。当用户单击Search 按钮时,它将运行一些代码,使用DoCmd.OpenReportWhereCondition 打开报告。

我已经在其他 10 个表单上完成了此操作,所有方式都完全相同。在打开此特定报告时,我遇到了错误。

这是我的Search_Button_Click 方法:

Private Sub Search_Button_Click()

    Dim str As String
    str = "[n.Complete] = True"    
    str = str & " AND [pn.Processing_Date] BETWEEN #" & From_Date.value & "# AND #" & To_Date.value & "#"
    str = str & " AND pn.Nest_Number LIKE '" & Nest_Number.value & "*'"
    
    DoCmd.OpenReport "r_Processed_Jobs_New", acViewReport, WhereCondition:=str

End Sub

问题

使用此代码,生成的错误消息是这样的:

运行时错误“3126”:名称“[n.Complete]”的括号无效。

我尝试使用n.[Complete] 甚至n.Complete,但两个选项都提示我说:Enter Parameter Value for n.Complete

我的项目

报告Record Source 设置为查询Q_Processed_Jobs。这是查询:

SELECT nj.Job_Number, nj.Nest_Number, nj.Customer_Name, nj.Job_Date, pn.Processing_Date AS [Processing Date]
FROM (Nest AS n INNER JOIN Nest_Job AS nj ON n.Nest_Number = nj.Nest_Number) INNER JOIN Processing_Nest AS pn ON n.Nest_Number = pn.Nest_Number;

所以我有n,它为表Nest 取别名。我在报告中没有Completen.Complete。它仅在WhereCondition 中用于过滤查询结果。表的别名和列是存在的,为什么提示我好像不认识一样?

工作示例

再一次,我用其他查询和报告做了无数次,它们都没有出现这些错误。为什么会发生在这里?

这是我的另一个表格的示例:

Private Sub Search_Button_Click()

    Dim str As String
    str = "[t.Date_Received] BETWEEN #" & From_Date.value & "# AND #" & To_Date.value & "#"
    str = " AND [pli.PO_Number] = " & PO_Number.value
        
    DoCmd.OpenReport "r_Receiving_By_Date", acViewReport, WhereCondition:=str
End Sub

以及相应的查询:

SELECT pli.PO_Number, pli.Inventory_Code, r.ID, r.Date_Received, rli.Quantity, rli.Weight, rli.CWT, rli.Total, pli.Total, iif(pli.Complete = True, 0, pli.Total - rli.Total) AS Balance, rli.MTR_Number, rli.Heat_Number
FROM ([PO Line Items] AS pli INNER JOIN (SELECT t.PO_Number, t.ID, t.Date_Received FROM Receiving AS t)  AS r ON pli.PO_Number = r.PO_Number) INNER JOIN [Receiving Line Items] AS rli ON (rli.Inventory_Code = pli.Inventory_Code) AND (r.ID = rli.Receiving_Id);

【问题讨论】:

  • SQL 语句使用Where 条件而不是过滤报告。 SQL 查询中没有包含n.Complete 的字段。那么n.Complete如何过滤报告呢?

标签: ms-access


【解决方案1】:

DoCmd.OpenReport ... , WhereCondition:=str 获取报告的记录源 (Q_Processed_Jobs),并将 WhereCondition 应用于该查询的结果集

因此,如果您想按n.Complete 进行过滤,那么这必须是查询的SELECT 列表的一部分。即使它实际上并没有在报告中使用。

同样适用于pn.Nest_Number

n.[Complete] 是正确的形式(或n.Complete)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多