【问题标题】:Pass manually generated RecordSet to SubReport将手动生成的 RecordSet 传递给 SubReport
【发布时间】:2013-01-09 07:10:08
【问题描述】:

在 Microsoft Access 2007 中是否可以手动生成 RecordSet 对象并将对象传递给 Microsoft Access 报表和子报表?

我想要一个表单,用户在该表单上单击一个按钮,OnClick 事件会动态创建两个 RecordSet,打开一个 Report 并将第一个 RecordSet 附加到 Report 并将第二个 RecordSet 附加到该 Report 的 SubReport。然后生成/显示报告。

谢谢。

【问题讨论】:

    标签: ms-access


    【解决方案1】:

    您可以将表单或报表的记录源设置为 SQL 字符串。您还可以使用 OpenForm 或 OpenReport 的 WHERE 参数根据现有查询或表过滤表单或报表。最后,您可以将表单的记录集设置为现有的记录集,但这比仅将记录源设置为 sql 稍微复杂一些。

      sSQL = "SELECT [" & Me.AField & "] FROM [" & Me.ATable & "] " _
           & "WHERE [" & MeAnotherField & "] " & Me.Operator & Me.Value
    
      Forms!AnotherForm.Recordsource = sSQL
    

    断开的记录集

    Private Sub Form_Load()
    Set rs = New ADODB.Recordset ''CreateObject("ADODB.RECORDSET")
    
     With rs
        'Set .ActiveConnection = cn
        .LockType = adLockOptimistic
        .CursorType = adOpenKeyset
     End With
    
    'Create arrays from the lists
    asL1 = Split("a,b,c,", ",")
    asL2 = Split("b,e,c,d", ",")
    
    'Create a disconnected recordset
    rs.Fields.Append "Srt", adVarChar, 25
    rs.Fields.Append "L1", adVarChar, 25
    rs.Fields.Append "L2", adVarChar, 25
    
    rs.Open
    
    'Add list 1 to the recordset
    For i = 0 To UBound(asL1)
        rs.AddNew Array("Srt", "L1"), Array(asL1(i), asL1(i))
        rs.Update
    Next
    
    rs.Sort = "Srt"
    
    Set Me.Recordset = rs
    Set rs = Nothing
    Set cn = Nothing
    End Sub
    

    【讨论】:

    • 我想我没有问清楚。为了清楚起见,我在数据库中没有任何表。我想使用 VBA 手动/以编程方式创建 ADODB.RecordSet。然后我想将 RecordSet 附加到报告中。我试图避免生成一个临时表,填充它然后删除它。
    • 我的属性有误。以上经过测试,但是您可能无法将断开连接的记录集用于报告。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2019-08-02
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多