将函数参数提供给交叉表查询

Feeding function arguments into crosstab query

我有一个子表单,我正试图根据多个复选框选择来更改它。对于每个复选框,我都编写了一个更新后事件,该事件调用一个 public 函数,该函数基于 checked/how 选择了哪些复选框。函数的第一部分如下,其中Home为主窗体,"ALLProgressTracking"为子窗体:

Public Function ProgressDisplay(argNoFields As Integer, Optional argField1 As String, Optional argField2 As String, Optional argField3 As String)

Dim strSQL As String

If argNoFields = 1 Then
strSQL = "TRANSFORM Sum([StatusTracking Query].CountofProjectID) AS CountOfProjects " & _
            "SELECT [StatusTracking Query]." & argField1 & " " & _
            "FROM [StatusTracking Query] " & _
            "GROUP BY [StatusTracking Query]." & argField1 & " " & _
            "PIVOT [StatusTracking Query].ValueDate;"

Forms!Home![ALLProgressTracking].SourceObject = "Form.IndProgressTracking"
Forms!Home![ALLProgressTracking].Form.RecordSource = strSQL

问题是我已经使用绑定为行标题之一的三个可能字段之一构建了表单(它是一个交叉表 form/query),因此当我尝试更改 SQL 将上面的代码用于备用字段我得到#Name 而不是正确的行标题。 我猜这是改变 SQL 语句以引用我作为源调用的子表单的函数的问题 object 但我不知道如何完成此操作.

例如,对于 IndProgressTracking 表单,我有以下 SQL 表单:

TRANSFORM Sum([StatusTracking Query].CountOfProjectID) AS SumOfCountOfProjectID
SELECT [StatusTracking Query].Category
FROM [StatusTracking Query]
GROUP BY [StatusTracking Query].Category
PIVOT [StatusTracking Query].ValueDate;

当我将 "Status" 输入函数时,表单将加载项目计数的正确数字,但是所有行标题都是#Name。

希望这一切都有意义并且有人能够提供帮助!

您可以将字段名称别名为静态:

TRANSFORM Sum([StatusTracking Query].CountOfProjectID) AS SumOfCountOfProjectID
SELECT [StatusTracking Query].Category As ArgField1
FROM [StatusTracking Query]
GROUP BY [StatusTracking Query].Category
PIVOT [StatusTracking Query].ValueDate;

我能够通过在函数末尾添加这一行来解决问题,在记录源行之后:

Forms!Home![ALLProgressTracking].Form.[TrackingMetric].ControlSource = argField1

其中[TrackingMetric]是之前显示#Name?的绑定文本框的名称。