无法将记录集变量传递给报告参数并使用DoCmd.OpenReport

问题描述 投票:0回答:1

我试图通过使用 DoCmd.OpenReport 将变量从记录集传递到报表来获取在 VBA 中运行的 Access 报表,但无法使其工作。有人可以让我知道我做错了什么吗?

使用基础报告中名为“Code”的特定分配变量 具有特定文本的作品:“[Code]=""LXFT48"""

但是当我尝试传递相应的记录集变量“FactCode”时 报告中不显示任何内容:“[Code]=”&“[FactCode]”

相反,我被要求提供参数的值,因此显然它无法识别该字段。

我尝试了 [FactCode] 的替换,例如 [Model] 和 rst![Model],但没有任何效果。

这只是报价正确的问题吗?

我可以通过 msgbox 获取要显示的每条记录的记录集数据。

Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim tdf As DAO.TableDef
Dim strSQL As String
Dim FactCode As String

Set db = CurrentDb
Set tdf = db.TableDefs("tbl TRAAFES-1")
Set fso = CreateObject("Scripting.FileSystemObject")

strSQL = "SELECT * FROM [tbl TRAAFES-1]"
Set rst = tdf.OpenRecordset()

With rst
    rst.MoveFirst

    Do Until .EOF
    FactCode = rst![Model]
      
    DoCmd.OpenReport "rpt Pricing Rules- AAFES Format - FULL REPORT", acViewPreview, "", "Code =         ""LXFT48””", acNormal ‘ *** THIS WORKS ***

    DoCmd.OpenReport "rpt Pricing Rules- AAFES Format - FULL REPORT", acViewPreview, "", "[Code]=" & "[FactCode]", acNormal ‘ *** DOESN’T WORK***
vba ms-access ms-access-reports
1个回答
0
投票

要修复代码,请使用

"[Code]=" & rst![FactMode]
而不是
"[Code]=[FactMode]"
总而言之,您正在使用串联构建所需的字符串。

这与这两种说法的区别本质上是一样的:

Dim name as String
Dim greeting as String

name = "David"
greeting = "Hello, name!"           '// Hello, name! <-- incorrect
greeting = "Hello, " & name & "!"   '// Hello, David!

您的代码稍微复杂一些,因为您正在构建一个需要由 Access 作为过滤条件进行评估的字符串。您有一个变量

FactCode
,其值例如
LXFT48
并且您想要构建一个字符串
[Code] = LXFt48
..但这是错误的!您需要构建一个字符串
[Code] = 'LXFT48'

因此,在这种情况下,还要在字符串周围添加引号。 示例:

Dim myStr as String
dim FactCode as String
FactCode = "LXFT48"
myStr = "[Code] = " & "'" & FactCode & "'"

'// Or if you prefer a few less characters to type
myStr = "[Code] = '" & FactCode & "'"
© www.soinside.com 2019 - 2024. All rights reserved.