|
本帖最后由 roych 于 2015-1-31 16:01 编辑
一直以为只有我们怕麻烦,后来才知道外国人更怕麻烦,不信且看:“Don't trouble troubles until trouble troubles you”,里面就有4个麻烦(trouble),够麻烦了吧?虽说怕归怕,但现实还是要面对的。例如,导出数据库组件就是一件很麻烦的事情。当然,聪明的版友如你,可能直接就说了,直接复制出来作为备份不就行了嘛?这不是自找麻烦吗?
这句话说得好。不过我还是想先说说背景:数据库是其它部门某个前辈开发的,或许因为安全的缘故,用Shell指定了工作组打开软件。然而几经辗转,也不知道是版本(源文件是Office 2002版本) 还是因为工作组的缘故,只能在指定的某台电脑打开。而目前公司开始装2010……现在大家知道为什么只能导出了吧?
关于导出,用系统自带的导出命令不是不可以,不过五十几张表,再加五十几个查询,再加五十几个窗体,加上十几个宏和三四个模块,虽说不多,老是点着鼠标也不太愉快,而且更加麻烦的是,一旦点错了,很可能某个表没导出,逐个对比起来,想来也不轻松吧?因此只好写一个模块来执行,跟大家温习一下DoCmd.TransferDatabase的用法。
- Sub test()
- '需要引用DAO 3.6库
- Dim db As dao.Database
- Set db = CurrentDb
- '导出表
- For Each tbl In db.TableDefs
- '系统表不导出(嗯,如果删除If语句将出错)。
- If Not tbl.Name Like "msys*" Then
- DoCmd.TransferDatabase acExport, "Microsoft Access", CurrentProject.Path & "\test.mdb", acTable, tbl.Name, tbl.Name
- End If
- Next
- '导出查询
- For Each qry In db.QueryDefs
- DoCmd.TransferDatabase acExport, "Microsoft Access", CurrentProject.Path & "\test.mdb", acQuery, qry.Name, qry.Name
- Next
- '导出窗体
- For Each frm In CurrentProject.AllForms
- DoCmd.TransferDatabase acExport, "Microsoft Access", CurrentProject.Path & "\test.mdb", acForm, frm.Name, frm.Name
- Next frm
- '导出宏
- For Each mcr In CurrentProject.AllMacros
- DoCmd.TransferDatabase acExport, "Microsoft Access", CurrentProject.Path & "\test.mdb", acMacro, mcr.Name, mcr.Name
- Next mcr
- '导出报表
- For Each rpt In CurrentProject.AllReports
- DoCmd.TransferDatabase acExport, "Microsoft Access", CurrentProject.Path & "\test.mdb", acReport, rpt.Name, rpt.Name
- Next rpt
- '导出模块
- For Each mdl In CurrentProject.AllModules
- DoCmd.TransferDatabase acExport, "Microsoft Access", CurrentProject.Path & "\test.mdb", acModule, mdl.Name, mdl.Name
- Next mdl
- End Sub
复制代码 在即将被导出的数据库中新建一个模块,把上面代码复制进去执行即可。——可能有版友会觉得,这样会不会把这个模块也导进去了?这个放心就是了,这是正在执行的模块,是不会被导入的。此外,值得留意的是,表和查询,跟窗体等其它组件是分属不同的集合的。
能不能用Container或者AccessObject来做呢?目前还没调试。此外,这只能在当前数据库里执行,也算是一个缺陷。看看大家有没有更好的办法。希望能与大家探讨。
|
评分
-
查看全部评分
|