【发布时间】: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