设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 4200|回复: 6
打印 上一主题 下一主题

[模块/函数] “从前有座山,山里有座庙”——再谈Access附件的上传与下载

[复制链接]
跳转到指定楼层
1#
发表于 2020-4-19 17:58:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
几年前,,写过一个关于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
复制代码





当时考虑的是,一次性插入多条记录,每条记录插入多个附件的情况。然而实际工作中,这种应用场景也许不多。可能更多的情况是,每条记录插入若干个附件。“从前有座山,山上有座庙,庙里有个老和尚…”。嗯哼,他念歪了经。修改后的最终效果如下:

值得注意的是,Access中的追加查询是不允许插入多值字段的。所以在使用这个模块时,应当先追加其它字段,再更新附件字段。为了不至于更新出错,应当在第一个表上添加主键字段的条件。详细见附件,这里就不赘述了。

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2020-4-20 07:18:15 | 只看该作者
roych老师希望您也具体讲解一下递归的使用,递归太高大上了,谢谢
3#
 楼主| 发表于 2020-4-20 11:30:20 | 只看该作者
yanwei82123300 发表于 2020-4-20 07:18
roych老师希望您也具体讲解一下递归的使用,递归太高大上了,谢谢

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

roych老师,是呀BOM上我们一直在纠结,ORACLE导出数据只有single单层的,需要频繁的查找底层数据

点击这里给我发消息

5#
发表于 2021-11-13 19:02:40 | 只看该作者
学习中,感谢

点击这里给我发消息

6#
发表于 2021-11-15 08:03:34 | 只看该作者
真是太好用了,再次感谢,解决大问题了

点击这里给我发消息

7#
发表于 2024-4-2 15:18:26 | 只看该作者
学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-25 08:20 , Processed in 0.105025 second(s), 31 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表