【问题标题】:access 2010 accdb file bloating when i copy attachment field?复制附件字段时访问 2010 accdb 文件膨胀?
【发布时间】:2015-10-08 09:57:39
【问题描述】:

一张有大约 300 条记录的表带有照片附件字段,我需要将这 300 条记录复制到另一个表中。

所以下面的函数会调用 300 次。

Private Sub copyAttachmentField(ByRef srcField As DAO.Field, ByRef expField As DAO.Field)
    On Error GoTo Err_copyAttachmentField
    Dim rsSrcAtt As DAO.Recordset
    Dim rsExpAtt As DAO.Recordset

    Set rsSrcAtt = srcField.Value
    Set rsExpAtt = expField.Value

    If Not (rsSrcAtt.BOF And rsSrcAtt.EOF) Then
        rsSrcAtt.MoveFirst
        Do While Not rsSrcAtt.EOF
            rsExpAtt.AddNew
            rsExpAtt.fields("filedata").Value = rsSrcAtt.fields("filedata").Value   <==== THIS I REMARK IT TO DEBUG
            rsExpAtt.fields("filename").Value = rsSrcAtt.fields("filename").Value
            rsExpAtt.Update
            rsSrcAtt.MoveNext
        Loop
    End If

    rsSrcAtt.Close
    rsExpAtt.Close
    Set rsSrcAtt = Nothing
    Set rsExpAtt = Nothing

    Exit Sub

Err_copyAttachmentField:
    If Err.Number = 3420 Then
        rsSrcAtt.Close
        rsExpAtt.Close
        Set rsSrcAtt = Nothing
        Set rsExpAtt = Nothing
        Exit Sub
    Else
        MsgBox Err.Number & vbCr & Err.Description
        Resume
    End If
End Sub

accdb 每次增长 100M 字节。我可以肯定这张照片很小。它们只是 50k jpg 文件。所以只有 300 * 50k = 15,000k。 (15MB)

然后我注释“filedata”行,它不会再次增长......

【问题讨论】:

  • 您是否尝试过使用 SQL INSERT 语句(或 Append 查询)而不是 VBA 来复制记录?不知道这是否会有所作为,但所有这些代码似乎都没有必要。
  • 是的,您的建议很有道理。 Sql 是移动记录最有效和最直接的方式。我之前试过,访问sql引擎无法复制附件字段。(>﹏

标签: ms-access ms-access-2010 dao


【解决方案1】:

除了之后运行一个紧凑型之外,没有什么可做的。

虽然它不会伤害或损坏任何东西,但如果你不能忍受它,你将不得不将你的附件保存为外部单独的文件。

【讨论】:

  • 你说的我已经试了一整天了~>_
  • 好的,我以为你在复制后删除了附件。如果没有,数据库当然会变大。较大的增量可能是因为 Access 将附件转换并存储为比 jgps 大得多的位图。
  • “Access 将附件转换并存储为比 jgps 大得多的位图” - 至少对于 Attachment 字段不正确。在 OLE 嵌入图像的时代,在 Office 文档中保存图像时会出现大量的膨胀。但是,Access 中的Attachment 字段可以以该文件的本机格式存储几乎任何 类型的文件(不仅仅是图像)。事实上,Access 实际上会在将某些类型的文件保存为附件时压缩
  • 好的,但这里似乎不是这样。
  • 我猜数据库膨胀是由于在 dao vba 操作期间没有释放一些临时对象造成的。但不能通过紧凑型数据库免费。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-21
  • 2014-05-21
  • 1970-01-01
  • 2015-02-08
  • 1970-01-01
  • 2014-05-04
  • 2015-06-25
相关资源
最近更新 更多