在 microsoft access 2010 表单和报告中显示多个附件

Posted

技术标签:

【中文标题】在 microsoft access 2010 表单和报告中显示多个附件【英文标题】:Display multiple attachments in microsoft access 2010 forms and reports 【发布时间】:2012-12-16 15:29:55 【问题描述】:

最初我很高兴在 Access 2010 中发现附件字段。这个功能在美学上让我内心的数据库纯粹主义者感到厌烦,但我内心的懒惰的草皮在这里负责,从表面上看,它确实可以使我当前的项目之一更容易/更简单。令人高兴的是,它会在表单和报告上自动显示图片/图标,但是(为什么总是有一个但是啊!)它只显示第一个,我需要它来显示所有这些。

您当然可以一次滚动浏览附件,但我很确定我的客户不会佩戴它,尽管他要求我在 MS-Access 中完成该项目,该项目似乎只有非常简陋的构建在显示选项中:/但是...

我可能错了,我几乎没有 MS-Access 经验。我的编码背景完全是 LAMP 堆栈和 Web,所以我对 Windows/Access 生态系统中提供的内容非常无知。我怀疑有优秀的 3rd 方报告工具可以提供非常灵活的布局,但我需要查看表单上的所有附件,而不仅仅是报告。

所以,一味地误入虚空,我最初的策略是这样的……

为附件创建一个单独的表格,其中每个字段都是一个仅包含单个项目的“附件”。然后在表单和报告中使用脚本来...

    在该表中查询属于相关记录的所有附件 将这些字段显示/格式化为某种列表 将新的附件字段动态附加到该列表的末尾,以便用户可以在某个地方上传下一个附件 每当添加附件时刷新表单页面,以便有一个免费的。

所以,我的问题是……

    我描述的内容在 Access 中是否可行? 我是否缺少更简单/更好/规范的解决方案? Access 的脚本语言在显示方面的功能有多强大?即笨重还是像素完美? 它还不是 Visual Basic 是吗? (不!;) 如果有,我可以在表单/报告中使用其他脚本语言吗?

抱歉,我知道这是一个有点冗长的问题,但我在这里是一条没有水的鱼!

谢谢,

罗杰

【问题讨论】:

【参考方案1】:

假设我有一张带附件的表格:

假设我在希望显示的附件字段之一中有三张图像。我可以创建一个查询:

之后我可以创建一个连续的表格:

【讨论】:

太棒了!非常感谢你。你知道我是否能够让图像水平排列还是仅限于垂直列表布局?对不起,我是一个访问新手,如果它是一个网络表单,我可以在 5 分钟内完成所有这些! 如果你想要简单,你就被限制在垂直领域。考虑一下,您不知道查询将返回多少张图片,附件数据类型允许用户在添加时选择多张图片,因此难以控制,以及返回 n 条记录是垂直的。如果你想要水平,你将不得不选择一组返回数并编写代码。我强烈怀疑在网络表单中你会有同样的限制。 好的,这证实了我最糟糕的怀疑。我将尝试在不同的平台上销售我的客户 - 我认为他们不会对 Access 中布局的不灵活性感到满意。非常感谢您的帮助。 什么不灵活?您能否在不编写任何代码的情况下在其他包中水平存储和布局不确定数量的图像? 我的表单设置和你在这里一样,除了我的附件仍然按 ID 分组。您是如何取消分组记录的?【参考方案2】:

我搜索了这个以寻找类似的问题。我每个字段有多个附件。我打算使用该字段来存储两个图像控件的 .jpg 和 .pdf 文件,这两个图像控件是通过将字段从属性拖到表单中创建的。我将它们命名为 ctlImage 和 ctlFeatures。我将此表单用作产品目录表单上更多信息按钮的非模态弹出窗口。到目前为止,我能够在产品目录中搜索记录并使用选定的列表框搜索结果打开带有 where 子句的表单,以将详细信息表单设置为当前记录。当我尝试操作 ctlImage 以查找图像类型时,在智能感知中显示的唯一属性是 ctlImage.value。我希望将 ctlImage 分配给 jpg 并将 ctlFeatures 分配给 pdf 以下是 frmProducts btnMoreInfo_Click 代码和 frmCatalogDetails 代码,以防其中一个弄乱了另一个。

Private Sub btnMoreInfo_Click()
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim str As String
    Dim row As Long
    Set db = CurrentDb
    Set rs = db.OpenRecordset("tblProducts", dbOpenSnapshot)

        If Me.lstSearchResults.ItemsSelected.Count > 0 Then

            ' Debug.Print Me.lstSearchResults.Column(0)
            row = Me.lstSearchResults.Column(0)
            rs.MoveFirst
            rs.FindFirst "ProductID=" & row
            Debug.Print rs("Description")
            DoCmd.OpenForm "frmCatalogDetails", acNormal, , "ProductID=" & Me.lstSearchResults.Column(0, Me.lstSearchResults.ItemsSelected), acFormReadOnly, acWindowNormal

        Else
            MsgBox "You must select a product"
            Exit Sub
        End If
End Sub

和目录详情

Option Compare Database
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim fld As DAO.Field

Private Sub Form_Load()

    Set db = CurrentDb

    'Set rs = db.OpenRecordset("tblProducts", dbOpenSnapshot)


    'Set fld = rs("image")

    Debug.Print rs("ProductID")
    Debug.Print rs("Description")
    'me.ctlImage.ControlSource =

    'Me.ctlImage.CurrentAttachment = fld.Value    
End Sub

rs 语句已被注释掉,因为我无法通过此表单识别父表单中的 rs。我得到一个未设置的块变量,但如果我执行 rs.openRecordSet 则记录集将返回到第一行。除了您上面的回答之外,我几乎没有看到有关操纵附件对象的信息,而且帮助也很困难,因为它甚至不包括在附件字段内的访问。在这个话题上,我会做更多的提问而不是回答,我非常感谢你们中的许多人花时间来制定答案。 罗林 座右铭:在需要时寻求帮助,在被要求时提供帮助,并记住您来自哪里。

【讨论】:

以上是关于在 microsoft access 2010 表单和报告中显示多个附件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Microsoft Access 中透视表?

在 Microsoft Access 2010 数据宏中使用变量数据

Microsoft Access 2010 中的自定义查询

Microsoft Access 2010 - 在基于查询的报表中按计算字段过滤

Microsoft Access 2010 Web 数据库将日期转换为字符串

在不同的设置上使 SQL Server 中的 Microsoft Access 表相同