如何将Access表从一个mdb复制到另一个mdb?

问题描述:

我已经继承了使用Access 97数据库的设置。我需要从一个主mdb复制一个表格到其他多个表格以备使用。源mdb和源表大多是静态的,目标mdbs差别很大。如何将Access表从一个mdb复制到另一个mdb?

所以,我有:
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创建new_tableA *从表A;

类似的问题在这里堆栈溢出讲述如何从一个表复制记录到另一个,但目标表中预先存在的,特别是字段的定义:

STRSQL =“INSERT INTO ServiceRecordInvoices “& _
”(sriID,sriServiceRecordID,sriInvoiceDate,sriInvoiceNumber,“ & _
”sriDescription,sriInvoiceAmount)“ & _
” IN”” & strDatabasePathandNameTo & “ '” & _
“SELECT srpID,srpServiceRecordID,srpInvoiceDate,srpInvoiceNumber,” & _
“srpParts,srpPartsAmount” & _
“FROM ServiceRecordParts IN'” & strDatabasePathandNameFrom & “';”

我的第一次尝试看起来像这样,毫不奇怪,不起作用。有人可以引导我吗?

copyTableSql = “CREATE [new_tableA]” & _
“IN '” & destinationDBpath & “'” & _
“SELECT * FROM TABLEA IN '” & sourceDBpath & “';”

感谢您的任何建议。

如果您愿意在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您可能需要为Access 97引用不同的DAO版本。我不知道您需要哪个版本,但可能以CreateObject行的“DAO.DBEngine.35”开头。

实际上,如果您在destination.mdb中创建指向source.mdb中的tblA的链接,则此任务会更简单。这样你就不必将数据从一个数据库复制到另一个数据库。

+0

谢谢,HansUp。这正是我正在寻找的。像魅力一样工作。 – 2009-10-13 19:24:17

因为在Access中分离数据和逻辑是明智的,所以给他们提供3个数据库 - 一个连接到另外两个。那么你可能只需要把所有的东西都复制一遍每个人都可以获得mdb的共同副本,其中包含代码和A的公共副本,以及他们自己的1-2-3。

对于这类事情,访问是非常甜蜜的。你不应该失去任何效率。

此外,任何数据mdbs(或代码mdb)的任何未来更新只是另一个文件拷贝。

对于想要在MS访问中使用visual basic中的访问代码,或者实际上是想使用Windows脚本,您有点含糊不清?在你的情况下,Windows脚本似乎更合适。使用Windows脚本,您可以启动任何Windows应用程序,无论是Excel,Word还是MS访问,然后让该应用程序执行任何您想要的操作。您的脚本可以关闭应用程序。所以在windows land中,你有所谓的自动化,并且你编写了windows脚本来实现这些目标。但是,当您经常启动MS访问时,应用程序将具有在启动时运行的表单和代码。通常情况下,您不希望这些事情发生,因为当您使用Windows脚本编写程序时,就好像用户启动了应用程序一样。

然而事实证明,在windows 2000以后,你可以打开并读取和操作访问数据库文件,而无需在计算机上安装访问权限。这种方法的另一个优点是,您可以从这些数据库文件中复制数据,但实际上并不需要自行启动访问应用程序。这样可以节省内存,启动时间,并且如前所述,无需实际启动MS访问并在批处理文件中启动(请记住存在旧式批处理文件,然后存在我们称之为Windows脚本的内容......我建议你在这里使用Windows脚本)。因此,脚本方法可以很好地满足您将数据从一个文件复制到另一个文件的需要。

如果您想使用Windows任务计划程序运行一些夜间批处理程序,那么Windows脚本编程也可以很好地工作。事实上,如果您确实需要一些来自ms-access的夜间报告,那么Windows脚本将是您的选择,而不是在ms-access中使用VBA。 Windows脚本可让您启动ms-access,打印一些报告,然后关闭应用程序。你也可以在Excel中执行此操作,或者实际上可以对任何Windows应用程序执行此操作。

因此,支持Windows自动化解决方案,这是由于大多数Windows应用程序公开只是将它们的所有属性和方法公开为GUI部件所基于的对象和属性。因此,您的脚本代码通常可以实现SAME目标,就好像工作人员正坐在PC上并使用鼠标选择选项一样,只是使用应用程序的这些方法)。

请记住,这不是一个鼠标记录系统,而是一个所有Windows应用程序都遵守的真正的脚本语言。

然而就你的情况而言,如上所述,你不需要启动MS访问,并且可以使用随Windows提供的内置库来打开和操作这些数据库文件。 HansUp在这里发布的脚本实际上是一个标准的纯Jane窗口脚本。只需将他的示例代码粘贴到文本文件中,使用.vbs文件扩展名重命名文本文件,然后您就可以开始使用了。而且,即使没有安装MS访问权限,该脚本甚至可以运行并运行在Windows上。

+0

对不起,模糊 - 我正在寻找一个VBScript的答案。作为一个命令提示迷,我更喜欢脚本语言,但对Access没有经验。 – 2009-10-13 19:25:53

如果您在Access中运行此代码,则这是一行代码或使用DoCmd.TransferDatabase命令的宏。

根据您是从目标数据库(导入)还是从源(导出)运行它来设置选项。

+0

如果您使用vbScript自动执行Access,则需要多行来设置它,但一旦设置完成,它就是同一行代码。 – 2009-10-10 00:50:36

+0

而且,哦,顺便说一句,欢迎来到StackOverflow,卢克!很高兴有像你这样的重击手。 – 2009-10-10 00:51:08