Office中国论坛/Access中国论坛

标题: “从前有座山,山里有座庙”——再谈Access附件的上传与下载 [打印本页]

作者: roych    时间: 2020-4-19 17:58
标题: “从前有座山,山里有座庙”——再谈Access附件的上传与下载
几年前,,写过一个关于Access附件字段的帖子:“从前有座山,山里有座庙……”——浅谈Access附件的上传与下载最近版友拿来用的时候发现了一些bug,于是QQ私信联系我。今天一看,原来是当时考虑不周所致,于是稍稍改了下原先的模块,代码如下:
  1. '***************************************************************************************************************
  2. '批量保存附件到文件
  3. '函数:SaveFileToAttachment(ByVal strTableName As String, ByVal strAttachFieldName As String)
  4. '
  5. '参数说明:
  6. '
  7. 'strTableName:             必选。字符串。表名称,用于打开记录集。理论上可以使用查询或者SQL语句,不过个人觉得使用表名称就好了。
  8. '
  9. 'strAttachFieldName:       必选。字符串。附件字段的名称,用于读取附件。
  10. '
  11. '
  12. '
  13. '使用方法:Call SaveFileToAttachment("表1","附件")
  14. '
  15. '
  16. '作者:Roych
  17. '
  18. '编写日期:2015-09-03
  19. '改进日期:2020-04-19
  20. '***************************************************************************************************************

  21. Function SaveFileToAttachment(ByVal strTableName As String, ByVal strAttachFieldName As String)
  22. '定义记录集
  23. Dim rst As DAO.Recordset
  24. '定义附件记录集
  25. Dim rstAtt As DAO.Recordset2
  26. '附件属性
  27. Dim FldAttData As DAO.Field2
  28. '定义文件拾取器和变量
  29. Dim fd As FileDialog
  30. Dim i As Long
  31. Dim J As Long

  32. Set rst = CurrentDb.OpenRecordset(strTableName)

  33. Set fd = Application.FileDialog(msoFileDialogFilePicker)

  34. With fd
  35.     .AllowMultiSelect = True
  36.     .Title = "请上传附件"
  37.     .ButtonName = "浏览"
  38.     If .Show = -1 Then
  39.         rst.Edit
  40.         For i = 1 To fd.SelectedItems.Count
  41.             Set rstAtt = rst(strAttachFieldName).Value
  42.             rstAtt.AddNew
  43.             Set FldAttData = rstAtt.Fields("filedata")
  44.             FldAttData.LoadFromFile fd.SelectedItems(i)
  45.             rstAtt.Update
  46.             rstAtt.Close
  47.         Next
  48.             rst.Update
  49.     End If
  50. End With

  51. rst.Close
  52. Set rst = Nothing

  53. End Function
复制代码





当时考虑的是,一次性插入多条记录,每条记录插入多个附件的情况。然而实际工作中,这种应用场景也许不多。可能更多的情况是,每条记录插入若干个附件。“从前有座山,山上有座庙,庙里有个老和尚…”。嗯哼,他念歪了经。修改后的最终效果如下:
[attach]63747[/attach]
值得注意的是,Access中的追加查询是不允许插入多值字段的。所以在使用这个模块时,应当先追加其它字段,再更新附件字段。为了不至于更新出错,应当在第一个表上添加主键字段的条件。详细见附件,这里就不赘述了。

此外,考虑到很多版友可能会在实际工作中用上一些自定义编号模块,所以,把layaman_999同志的自定义编号模块引用过来(原贴见这里:高效的年月日的自动编号函数),在这里替广大网友一并谢过了!
最后奉上附件如下:
[attach]63748[/attach]

作者: yanwei82123300    时间: 2020-4-20 07:18
roych老师希望您也具体讲解一下递归的使用,递归太高大上了,谢谢
作者: roych    时间: 2020-4-20 11:30
yanwei82123300 发表于 2020-4-20 07:18
roych老师希望您也具体讲解一下递归的使用,递归太高大上了,谢谢

以前的帖子里有递归啊。问题是,你觉得什么地方会用上。
http://www.office-cn.net/thread-125127-1-1.html
通常来说,递归都是在树形菜单或者BOM上应用多一些,其他场景并不常见。
作者: yanwei82123300    时间: 2020-4-20 16:16
roych 发表于 2020-4-20 11:30
以前的帖子里有递归啊。问题是,你觉得什么地方会用上。
http://www.office-cn.net/thread-125127-1-1 ...

roych老师,是呀BOM上我们一直在纠结,ORACLE导出数据只有single单层的,需要频繁的查找底层数据
作者: f105f104    时间: 2021-11-13 19:02
学习中,感谢
作者: f105f104    时间: 2021-11-15 08:03
真是太好用了,再次感谢,解决大问题了
作者: wuwu200222    时间: 2024-4-2 15:18
学习




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3