【问题标题】:Microsoft Access - Crosstab of a filtered formMicrosoft Access - 过滤表单的交叉表
【发布时间】:2019-01-27 17:21:13
【问题描述】:

我正在尝试生成类似于交叉表的报告。数据来自过滤后的表单(DatesWorkerID (String))。

  • 表格:frmReg
  • 数据表:tReg
  • 报告:reportReg

在下面一行:

Set qdf = dbsReport.QueryDefs(Me.RecordSource)

我收到了错误:

错误 3265 在此集合中找不到项目

我做错了什么?

Private Sub Report_Open(Cancel As Integer)
 '  Create underlying recordset for report using criteria

    Dim intX As Integer
    Dim qdf As QueryDef
    Dim frm As Form

    '   Don't open report if frmReg form isn't loaded.
    If Not (IsLoaded("frmReg")) Then
        Cancel = True
        MsgBox "To preview or print this report, you must open " _
                & "frmReg in Form view.", vbExclamation, _
               "Must Open Dialog Box"
        Exit Sub
    End If

    '  Set database variable to current database.
    Set dbsReport = CurrentDb
    Set frm = Forms!frmReg

    '  Open QueryDef object.
    ' Set qdf = dbsReport.QueryDefs("ReportReg")
     Me.RecordSource = "SELECT * FROM [tReg]"
     Set qdf = dbsReport.QueryDefs(Me.RecordSource)

    '  Open Recordset object.
    Set rstReport = qdf.OpenRecordset()

    '  Set a variable to hold number of columns in crosstab query.
    intColumnCount = rstReport.Fields.Count
End Sub

【问题讨论】:

  • 您的驱动器在做什么?请将任何代码发布到您的主题中。您的驱动器需要访问权限,这对用户不友好。
  • 我的错误。我添加了报告的代码“打开”事件。

标签: sql vba forms ms-access filter


【解决方案1】:

看起来问题可能是 SQL 和命令之间的关系问题,并且您可能没有查询设置来获取您正在寻找的信息。

试试这个:

sSQL = "SELECT * FROM [tReg]"
Me.RecordSource = sSQL
Set qdf = dbsReport.CreateQueryDef("NewQuery", sSQL)

'This will purge the query after your inteactions are complete
dbsReport.QueryDefs.Delete "NewQuery" 

注意:这不包括QueryDef 的任何交互。

【讨论】:

    【解决方案2】:

    QueryDefs 集合采用已保存的命名查询,而不是 SQL 语句。正如@Jiggles32 演示的那样,您需要创建一个命名查询,然后使用QueryDefs() 调用来引用它。

    但是,您可以通过直接使用 OpenRecordset() 打开记录集来绕过查询的使用,这是您需要的最终结果:

    strSQL = "SELECT * FROM [tReg]"
    
    Me.RecordSource = strSQL
    Set rstReport = dbsReport.OpenRecordset(strSQL)
    
    '  Set a variable to hold number of columns in crosstab query.
    intColumnCount = rstReport.Fields.Count
    

    实际上,您可以使用RecordsetClone 属性直接提取表单的记录集(如果运行各种操作不影响表单的实际记录,则优先于Recordset):

    strSQL = "SELECT * FROM [tReg]"
    
    Me.RecordSource = strSQL
    Set rstReport = Me.RecordsetClone
    
    '  Set a variable to hold number of columns in crosstab query.
    intColumnCount = rstReport.Fields.Count
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      相关资源
      最近更新 更多