首页 文章

在报告之间传递记录集

提问于
浏览
2

我有一个表格,可以生成邮寄报告 . 该表单打开一个记录集,其中包含所需的所有字段 . 我在徘徊如何将这个记录集传递给报告,这样我就不需要再次打开相同的记录集 .

同样,有时我也想在表单之间传递记录集(没有主/子表单关系),我该怎么做?

另一个小问题,当我在数据表视图中打开一个表单时,它总是非常大 . 打开时如何限制尺寸?

谢谢!

编辑:

为了更清楚,说我有“FORM”,当用户点击它上面的按钮时,“报告”将被打开 . 我希望“报告”使用已在“FORM”中创建(打开)的记录集 .

同样在“FORM”上,有一个由用户填写的文本框,我也想在“报告”中显示它 .

EDIT2:

我累了,但不能通过记录集,也没有从我的表单上的文本框填充我的报告中的字段,非常烦人..

3 回答

  • 0

    您应该只需将正确的SQL语句传递给报表即可完成此操作 . 这可以使用Opening Arguments完成 .

    假设您确实希望在表单上看到相同的记录集,那么您需要做什么取决于您打开表单的方式,或者您如何过滤表单 . 您确实可以使用相同的DAO Recordset对象,并将报表Recordset对象设置为Form的Recordset对象的副本或克隆 . 但是,这可能不是获得您要查找的结果所必需的 .

    Solution #1
    如果表单使用查询或SQL语句,则可以使用此解决方案 .

    表格上的代码:

    DoCmd.OpenReport "rptReportName", acViewPreview, , , acWindowNormal, Me.RecordSource
    

    您的报告代码:

    Private Sub Report_Open(Cancel As Integer)
        Me.RecordSource = Nz(Me.OpenArgs, "")
    End Sub
    

    Solution #2
    如果您的表单使用's filter property to filter down to the correct set of records. I' m表单,假设您希望将该过滤条件传递给报表,请使用此解决方案 . 您'll need to configure the report so that it uses the same RecordSource as your Form (or it must at least contain the table/fields that will be included in your filter statement). The problem is that passing the recordsource of your report to your form doesn' t传递您可能在表单上设置的任何过滤器 .

    DoCmd.OpenReport "rptReportName", acViewPreview, , Nz(Me.Filter, ""), acWindowNormal
    

    最后,请注意,无法设置Report的记录集属性 . 你可以像我已经显示的那样分配一个Recordsource(一个记录源是一个tablename,一个queryname或一个SQL语句)但你不能使用Recordset属性,除非数据库是一个Access Data Project,我不建议在所有 .

    Edit1
    从原始帖子中不清楚OP试图解决的问题 . 我错误地认为他无法获得相同的记录,以便在他的报告中显示他在表格上的内容 . 似乎OP担心两次前往服务器检索记录 .

    因为您无法在Access报表上设置Recordset值,所以最好的选择可能是创建本地Access表并将其用作临时表 . 我不知道你的记录集通常是多大 . 如果它非常大(5000条记录),这个解决方案可能不是一个好主意 . 我能想到的一个问题是,它会导致您的前端数据库应用程序文件随着时间的推移而膨胀,除非您将文件设置为关闭时运行Compact和Repair .

  • 2

    我认为两次去服务器的担心是没有根据的 .

    如果你使用Jet / ACE后端,Jet会在本地缓存数据,除非数据发生变化,否则不会重新检索(在这种情况下,我认为你可能想要更新)数据,没有?) .

    对于服务器数据库,服务器本身可能会缓存结果,特别是如果在两种情况下使用的SQL语句都相同 .

    这看起来像是一个过早优化的情况 .

  • 2

    好吧如果我从你的问题中理解你需要通过知道/不知道记录集编号来操纵表中的数据 .
    如果是那时你需要改变如何访问表中数据的心态,因为在列表中提升记录集号并不是很正确的方式,通常我们提升数据并记录数字是隐藏的 .
    因此,当您阅读表格时,请尝试将字段传递给变量以供以后使用,或将它们直接传递到列表视图 .
    访问表以获取每个数据的方式来自另一个总是变化的过程 .
    但即使你想保留记录号以供以后使用,也要尝试将名称声明为公共变量 ArrayList() 然后当你从表中读取时可以使用 'Variable'.add(RecordNumber) .
    因此,当您需要访问特定号码时,请通过调用 VariableName(ListViewLineNumber) 从列表视图中获取读取行号 . 如果此解决方案与您的问题密切相关,请通知我 .

相关问题