设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[模块/函数] 麻烦自找——浅谈Access组件的导出

[复制链接]
跳转到指定楼层
1#
发表于 2011-6-25 01:51:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 roych 于 2015-1-31 16:01 编辑

       一直以为只有我们怕麻烦,后来才知道外国人更怕麻烦,不信且看:“Don't trouble troubles until trouble troubles you”,里面就有4个麻烦(trouble),够麻烦了吧?虽说怕归怕,但现实还是要面对的。例如,导出数据库组件就是一件很麻烦的事情。当然,聪明的版友如你,可能直接就说了,直接复制出来作为备份不就行了嘛?这不是自找麻烦吗?

      这句话说得好。不过我还是想先说说背景:数据库是其它部门某个前辈开发的,或许因为安全的缘故,用Shell指定了工作组打开软件。然而几经辗转,也不知道是版本(源文件是Office 2002版本)  还是因为工作组的缘故,只能在指定的某台电脑打开。而目前公司开始装2010……现在大家知道为什么只能导出了吧?

       关于导出,用系统自带的导出命令不是不可以,不过五十几张表,再加五十几个查询,再加五十几个窗体,加上十几个宏和三四个模块,虽说不多,老是点着鼠标也不太愉快,而且更加麻烦的是,一旦点错了,很可能某个表没导出,逐个对比起来,想来也不轻松吧?因此只好写一个模块来执行,跟大家温习一下DoCmd.TransferDatabase的用法。

  1. Sub test()
  2. '需要引用DAO 3.6库
  3. Dim db As dao.Database
  4. Set db = CurrentDb
  5. '导出表
  6. For Each tbl In db.TableDefs
  7. '系统表不导出(嗯,如果删除If语句将出错)。
  8. If Not tbl.Name Like "msys*" Then
  9. DoCmd.TransferDatabase acExport, "Microsoft Access", CurrentProject.Path & "\test.mdb", acTable, tbl.Name, tbl.Name
  10. End If
  11. Next
  12. '导出查询
  13. For Each qry In db.QueryDefs
  14. DoCmd.TransferDatabase acExport, "Microsoft Access", CurrentProject.Path & "\test.mdb", acQuery, qry.Name, qry.Name
  15. Next
  16. '导出窗体
  17. For Each frm In CurrentProject.AllForms
  18. DoCmd.TransferDatabase acExport, "Microsoft Access", CurrentProject.Path & "\test.mdb", acForm, frm.Name, frm.Name
  19. Next frm
  20. '导出宏
  21. For Each mcr In CurrentProject.AllMacros
  22. DoCmd.TransferDatabase acExport, "Microsoft Access", CurrentProject.Path & "\test.mdb", acMacro, mcr.Name, mcr.Name
  23. Next mcr
  24. '导出报表
  25. For Each rpt In CurrentProject.AllReports
  26. DoCmd.TransferDatabase acExport, "Microsoft Access", CurrentProject.Path & "\test.mdb", acReport, rpt.Name, rpt.Name
  27. Next rpt
  28. '导出模块
  29. For Each mdl In CurrentProject.AllModules
  30. DoCmd.TransferDatabase acExport, "Microsoft Access", CurrentProject.Path & "\test.mdb", acModule, mdl.Name, mdl.Name
  31. Next mdl
  32. End Sub
复制代码
      在即将被导出的数据库中新建一个模块,把上面代码复制进去执行即可。——可能有版友会觉得,这样会不会把这个模块也导进去了?这个放心就是了,这是正在执行的模块,是不会被导入的。此外,值得留意的是,表和查询,跟窗体等其它组件是分属不同的集合的。
       能不能用Container或者AccessObject来做呢?目前还没调试。此外,这只能在当前数据库里执行,也算是一个缺陷。看看大家有没有更好的办法。希望能与大家探讨。

评分

参与人数 2经验 +6 收起 理由
huangqinyong + 4
Grant + 2 精品文章

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2011-6-25 08:59:27 | 只看该作者
先收下~
3#
发表于 2011-6-25 21:00:37 | 只看该作者
这个功能不错,收下了,谢谢

点击这里给我发消息

4#
发表于 2011-6-25 21:56:34 | 只看该作者
收藏学习!谢谢!
5#
发表于 2011-8-8 16:41:29 | 只看该作者
收下了,学习个,谢谢!
6#
发表于 2012-1-11 18:43:14 | 只看该作者
学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 11:51 , Processed in 0.109628 second(s), 30 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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