访问 OpenReport 不适用于 Where 条件
Access OpenReport not working with Where condtion
这一定是一个非常简单的错误。我只是看不到它。
我的位置字符串:
strWhere = "tbl_final.[Geschäftspartner] = " & Chr(34) & BP & Chr(34)
应该放在这里:
DoCmd.OpenReport "Contribution", acViewPreview, , strWhere
结果是报告打开...但包含所有记录。我一直在研究不同版本的 SQL 字符串,甚至将参数引入底层查询(我知道这不是解决方案)。
我没看到什么?
更新:
底层查询是直接嵌入到报告 RecordSource 属性
中的 SQL 语句
更新 2:
如果我创建一个全新的报告,其中只包含字段 Geschäftspartner
和一个度量字段,那么代码就可以工作。因此错误一定是由报告中的某些内容引起的。
更新 3:链接到报告的完整查询
SELECT tbl_final.Geschäftspartner, tbl_final.Referenzwährung, tbl_final.Periodenbeginn, tbl_final.Periodenende, tbl_final.Anlagekategorie, tbl_final.[Produkt / ISIN], tbl_final.ISIN, tbl_final.[Telekurs Valorennummer], tbl_final.[Asset Domicile], tbl_final.[Valor name], tbl_final.[FIRE: Kontonummer], tbl_final.[Special Fund Category], tbl_final.[FRS: Type of Collateral], tbl_final.[Nominal Currency], tbl_final.[Asset Type], tbl_final.[Anteile per Periodenende], tbl_final.[Marktwert per Periodenende], tbl_final.[Durchschn# Marktwert in Referenzwährung], tbl_final.[Durchschnittlicher Anteil in %], tbl_final.[AVA_TER in %], tbl_final.[AVA_TER Datum], tbl_final.[VDF_TER in %], tbl_final.[VDF_TER Datum], tbl_final.[TER in %], tbl_final.[TER Datum], tbl_final.[Gewichtete TER in %], tbl_final.[TER in Referenzwährung], tbl_final.Client, tbl_final.CRM, tbl_final.[Received TER-Report for 2014], tbl_final.Language
FROM tbl_final;
使用Debug.Print
查看您的strWhere
,您将会看到。
或者尝试这个修改 - 对于一个数字:
strWhere = "[Geschäftspartner] = " & BP & ""
在完成 SQL 语句并确保它在虚拟 table、虚拟查询和虚拟报告上正常工作后,我最终回到了我的 VBA代码。
在那里我发现了问题:
我编写了代码,在使用 Where 条件打开报表之前以编程方式更改报表上的标签。我有以下代码行:
DoCmd.OpenReport REPORT_NAME, acDesign
Set rptObject = Reports(REPORT_NAME)
'Various other objects being changed here but edited out for readability
'...
rptObject.OLEUnbound86.Visible = True
DoCmd.Close acForm, REPORT_NAME, acSaveYes
在最后一行,我没有关闭 REPORT,而是关闭了 FORM。一个不存在的。不幸的是,Access 从未提醒我这个事实!因此,报表保持打开状态,当我尝试传递 Where 条件时,它没有将它应用于报表(大概是因为对象仍然打开)。
解决方案是将最后一行简单地更改为:
DoCmd.Close acReport, REPORT_NAME, acSaveYes
这一定是一个非常简单的错误。我只是看不到它。 我的位置字符串:
strWhere = "tbl_final.[Geschäftspartner] = " & Chr(34) & BP & Chr(34)
应该放在这里:
DoCmd.OpenReport "Contribution", acViewPreview, , strWhere
结果是报告打开...但包含所有记录。我一直在研究不同版本的 SQL 字符串,甚至将参数引入底层查询(我知道这不是解决方案)。
我没看到什么?
更新: 底层查询是直接嵌入到报告 RecordSource 属性
中的 SQL 语句更新 2:
如果我创建一个全新的报告,其中只包含字段 Geschäftspartner
和一个度量字段,那么代码就可以工作。因此错误一定是由报告中的某些内容引起的。
更新 3:链接到报告的完整查询
SELECT tbl_final.Geschäftspartner, tbl_final.Referenzwährung, tbl_final.Periodenbeginn, tbl_final.Periodenende, tbl_final.Anlagekategorie, tbl_final.[Produkt / ISIN], tbl_final.ISIN, tbl_final.[Telekurs Valorennummer], tbl_final.[Asset Domicile], tbl_final.[Valor name], tbl_final.[FIRE: Kontonummer], tbl_final.[Special Fund Category], tbl_final.[FRS: Type of Collateral], tbl_final.[Nominal Currency], tbl_final.[Asset Type], tbl_final.[Anteile per Periodenende], tbl_final.[Marktwert per Periodenende], tbl_final.[Durchschn# Marktwert in Referenzwährung], tbl_final.[Durchschnittlicher Anteil in %], tbl_final.[AVA_TER in %], tbl_final.[AVA_TER Datum], tbl_final.[VDF_TER in %], tbl_final.[VDF_TER Datum], tbl_final.[TER in %], tbl_final.[TER Datum], tbl_final.[Gewichtete TER in %], tbl_final.[TER in Referenzwährung], tbl_final.Client, tbl_final.CRM, tbl_final.[Received TER-Report for 2014], tbl_final.Language
FROM tbl_final;
使用Debug.Print
查看您的strWhere
,您将会看到。
或者尝试这个修改 - 对于一个数字:
strWhere = "[Geschäftspartner] = " & BP & ""
在完成 SQL 语句并确保它在虚拟 table、虚拟查询和虚拟报告上正常工作后,我最终回到了我的 VBA代码。
在那里我发现了问题:
我编写了代码,在使用 Where 条件打开报表之前以编程方式更改报表上的标签。我有以下代码行:
DoCmd.OpenReport REPORT_NAME, acDesign
Set rptObject = Reports(REPORT_NAME)
'Various other objects being changed here but edited out for readability
'...
rptObject.OLEUnbound86.Visible = True
DoCmd.Close acForm, REPORT_NAME, acSaveYes
在最后一行,我没有关闭 REPORT,而是关闭了 FORM。一个不存在的。不幸的是,Access 从未提醒我这个事实!因此,报表保持打开状态,当我尝试传递 Where 条件时,它没有将它应用于报表(大概是因为对象仍然打开)。
解决方案是将最后一行简单地更改为:
DoCmd.Close acReport, REPORT_NAME, acSaveYes