我继承了一个利用Access 97数据库的设置。我需要将一个表从一个主mdb复制到多个其他mdb以准备使用。源mdb和源表大多是静态的,目标mdbs差异很大。
所以,我有:
source.mdb包含表A
destination.mdb包含表1,2和3
我最终需要:
source.mdb不变(包含表A)
destination.mdb包含表1,2,3和A
这在Access GUI中是一个足够简单的任务,但由于这项任务需要在一天内完成数百次,我想自动化它。最终目标是拥有一个脚本或批处理文件,我可以给每个mdb用户(大约75名员工)在使用前自行操作每个数据库。我在UNIX / Oracle环境中的家里更多,所以编写脚本会让我感到厌倦。
在Oracle中,我会使用这样的查询:
从用户/密码@ sourceDB复制到用户/密码@ destinationDB
使用select * from tableA创建new_tableA;
关于堆栈溢出的类似问题告诉我如何将记录从一个表复制到另一个表,但目标表预先存在,并且定义了特定的字段:
strSQL =“INSERT INTO ServiceRecordInvoices”& _
“(sriID,sriServiceRecordID,sriInvoiceDate,sriInvoiceNumber,”& _
“sriDescription,sriInvoiceAmount”“& _
“IN'”& strDatabasePathandNameTo& “'”& _
“SELECT srpID,srpServiceRecordID,srpInvoiceDate,srpInvoiceNumber,”& _
“srpParts,srpPartsAmount”& _
“来自ServiceRecordParts IN”& strDatabasePathandNameFrom& “”;“
我的第一次尝试看起来像这样并且不出所料,不起作用。有人能引导我吗?
copyTableSql =“CREATE [new_tableA]”& _
“IN'”& destinationDBpath& “'”& _
“SELECT * FROM tableA IN'”& sourceDBpath& “”;“
感谢您的任何建议。
答案 0 :(得分:2)
如果您愿意在Access中使用VBA来自动执行此任务,那么使用“SELECT ... INTO ...”语句就可以轻松实现 - Access调用Make Table Query。
SELECT s.* INTO tblA IN 'C:\SomeFolder\destination.mdb' FROM tblA AS s;
如果您必须使用Access之外的脚本驱动它,请尝试类似于此的vbscript:
Option Explicit
Dim dbe
Dim db
Set dbe = CreateObject("DAO.DBEngine.36")
Set db = dbe.OpenDatabase("C:\SomeFolder\source.mdb")
db.Execute "SELECT s.* INTO tblA IN 'C:\SomeFolder\destination.mdb' FROM tblA AS s;"
Set db = Nothing
Set dbe = Nothing
我使用自己的数据库和表名测试了该脚本,它适用于Access 2007.您可能需要为Access 97引用不同的DAO版本。我不知道您需要哪个版本,但可能以“DAO.DBEngine.35”开头,用于CreateObject行。
实际上,如果在destination.mdb中创建指向source.mdb中的tblA的链接,则此任务会更简单。这样您就不必将数据从一个数据库复制到另一个数据库。
答案 1 :(得分:1)
因为无论如何将Access中的数据和逻辑分开是明智的,为它们提供3个数据库 - 一个与另外两个连接。然后你可能只是文件复制一切。每个人都会获得mdb的通用副本,其中包含代码和A的通用副本,以及他们自己的1-2-3。
对于这种事情,访问是非常甜蜜的。你不应该失去任何效率。
此外,对任何一个数据mdbs(或者代码mdb)的任何未来更新都只是另一个文件复制。
答案 2 :(得分:1)
在想要在MS访问中使用Visual Basic中的访问编码,或者您是否真的想要使用Windows脚本时,您有点模糊?在你的情况下,似乎Windows脚本更合适。使用Windows脚本,您可以启动任何Windows应用程序,无论是excel,word,甚至是MS访问,然后让该应用程序执行您想要的任何操作。然后,您的脚本可以关闭应用程序。因此,在Windows版本中,您拥有所谓的自动化,并编写Windows脚本来实现这些目标。但是,当您经常启动MS访问时,应用程序将具有在启动时运行的表单和代码。通常,您不希望这些事情发生,因为当您使用Windows脚本时,它就像用户启动了应用程序一样。
然而事实证明,在Windows 2000的每个窗口框中,您都可以打开,读取和操作访问数据库文件,甚至无需在计算机上安装访问权限。这种方法的另一个优点是,您可以从这些数据库文件中复制数据,但实际上不必启动访问应用程序本身。这节省了内存,启动时间,并且如上所述消除了实际拥有MS访问启动的需要并在批处理文件中启动(请记住有旧式批处理文件,然后我们称之为Windows脚本...我建议你在这里使用Windows脚本)。因此,脚本编写方法非常适合将数据从一个文件复制到另一个文件的需要。
如果您想使用Windows任务计划程序运行一些夜间批处理程序,Windows脚本也可以正常工作。事实上,如果你确实需要ms-access的一些夜间报告,那么Windows脚本将是你的选择,而不是在ms-access中使用VBA。 Windows脚本将使您能够启动ms-access,打印一些报告,然后关闭应用程序。您也可以为Excel执行此操作,或者实际上只对任何Windows应用程序执行此操作。
因此支持Windows中的自动化解决方案,这是因为大多数Windows应用程序公开只是将其所有属性和方法公开为GUI部件所基于的对象和属性。因此,您的脚本代码通常可以实现相同的目标,就好像工作人员坐在他们的PC上并使用鼠标选择只使用应用程序的那些方法的选项一样。)
请记住,这不是鼠标录制系统,而是所有Windows应用程序都遵循的真正的脚本语言。
但是在您的情况下,如上所述,您不需要启动MS访问,并且您可以使用Windows附带的内置库来打开和操作这些数据库文件。 HansUp在这里发布的脚本实际上是一个标准的简单Windows脚本。只需将他的示例代码粘贴到文本文件中,使用.vbs文件扩展名重命名文本文件,就可以了。并且,即使没有安装MS访问,该脚本甚至可以在Windows机器上运行。
答案 3 :(得分:0)
如果从Access中运行此命令,则使用DoCmd.TransferDatabase命令,这是一行代码或宏。
根据您是从目标数据库(导入)还是从源(导出)运行选项来设置选项。