2012-02-09 188 views
7

我需要将Access数据宏从我的测试数据库传输到我的生产数据库。任何人都知道如何做到这一点?如何导出Access 2010数据宏

我知道将表从一个accdb转移到另一个也会传输数据宏,但这不是我的选择。我也知道我可以在生产accdb中手动重新创建它们,但是这让我容易接受错误,并且需要比生成脚本的传输方案更长时间地关闭生产数据库。

如果我只需要做这件事,那就不是什么大不了的事情,但是我需要在开发项目过程中做很多次。

我试过将表格导出到xml,但数据宏不包括在内。

请注意,我在这里询问Access 2010 数据宏,而不是常规的Access宏。

回答

3

我在这里没有很好的答案。

但是,在过去,我经常制作一个表格变更的“日志”,然后在现场简单地使用它。

请注意,您可以剪切+粘贴宏代码。代码保存为XML。

例如,此更新表之后触发看起来像这样在访问:

enter image description here

如果你切出上述(CTRL-A,CTRL-CC),,那么你可以粘贴到一个记事本。事实上,你甚至可以粘贴/在Visual Studio或任何XML编辑器打开它,你可以看到这一点:

enter image description here

所以,你可以剪切+粘贴出的宏。

如前所述,因此在过去,我经常保持一个“记录”的变化。因此,如果我在现场工作,并修改了2个代码模块,4个表单和2个报表,那么我有一点变化记录。我会在这张纸上输入什么物体被改变了。

当我到达现场时,我快速浏览该表并知道要导入3-5个对象,并且这种导入只有几分钟的上限。

但是,使用表触发器和存储过程,您可以有更多,然后只有几个要复制。

我要么做两件事情之一:

使用日志理念和

一)取消发布的开发版本,并带来与我到你的工作现场。然后导入新表单,报告等。 对于触发器代码,可以在两个应用程序之间剪切+粘贴。

b)当您对触发器进行更改时,请将+粘贴到记事本文档中并将它们放在目录中。在现场时,只需拿起每个记事本,剪切+粘贴到生产中,然后将记事本项目移动或复制到“完成”文件夹中。

以上情况肯定不理想。然后再次在过去,我并不总是有代码来编写表格变更的脚本,并且使用一个小日志工作得很好。

所以在过去,我经常只是写下这样和那样的表格被修改,我必须添加这样和那样的列。

因此,如果您想要将xml的宏代码剪切+粘贴到单独的小文档中,或者将开发切入+生产中,您真的可以选择它。

我的确认为,如果你在不同的地方工作,那么我认为最好取消发布开发版本,并将它与你一起(我假设你知道/重申你可以制作未发布的副本一个Web应用程序)。因此,表单,代码模块,宏的等可以被导入相当容易(你删除表单等,只是从未发布的副本导入)。

但是,对于表代码?您必须一次将未发布的副本剪切+粘贴到某个临时区域,或者在应用程序之间剪切粘贴。

保存文本可能在这里工作,但我还没有时间来制作更好的解决方案。

编辑: 顺便说一句,在上面我假设了一个Web服务数据库,但建议仍然适用于非Web Access数据库。

+0

感谢您的时间和所有细节Albert。 XML信息非常有用。另外Ctrl-C,Ctrl-V也能很好地工作。根据你的声誉,我将此作为福音的答案。再次感谢 – unrazzle 2012-02-09 11:23:58

6

你可能想尝试一对无证VBA函数

导出:

SaveAsText acTableDataMacro, "TableName", "C:\PathToFile\DataMacro.xml" 

导入:

LoadFromText acTableDataMacro, "TableName", "C:\PathToFile\DataMacro.xml" 
4

要上的Martijn Pieters的扩大/ LANIK的答案(感谢Martijn和Lanik),我需要在28个不同的表上创建几乎相同的数据宏,每个表上都有一个AfterInsert,AfterUpdate,AfterDelete和命名数据宏。所以,我用SaveAsText命令

SaveAsText acTableDataMacro, “表名”, “C:\ PathToFile \ DataMacro.xml”

创建模板,然后使用该模板创建XML 28文件通过一个小vba代码,替换表名,主键等。我还创建了28个LoadFromText命令。然后,我可以使用LoadFromText命令一次加载所有的宏,并具有可重复的过程。现在我已经完成了测试,可以通过这种方式快速更新生产数据库,或者轻松地将相同的数据宏添加到其他表中。

所以其他人都知道,LoadFromText覆盖了以前的任何宏,这是非常棒的,因为我没有在第一次尝试时使用我的模板。

鉴于上述情况,下一步是让您的'updater'数据库应用程序使用DoCmd.TransferDatabase命令,将具有所有LoadFromText命令的函数/ sub的模块传输到Data .accdb。它也应该传递一个宏来运行该函数/子。我试图让我的更新程序然后执行宏来加载数据宏,但Access安全阻止了这一点。因此,您可能需要让您的用户打开数据库并启用它,然后运行宏。如果我们可以直接编辑数据宏,这会更复杂,但确实提供了解决问题的解决方法。

+0

优秀的答案。使用'SaveAsText acTableDataMacro'代码时遇到问题,[我在此处发布了一个问题](http://stackoverflow.com/questions/31755802/can-i-use-access-vba-to - 确定-IF-A-表具有-A-数据宏)。 – 2015-07-31 22:02:52

0

我有同样的问题,无法找到正确的宏以XML格式导出。然而,我能够右键点击我的查询并以这种方式导出到xml,所以我知道这是可能的。

然而,我希望它从一个按钮运行,我发现一个简单的方法做到这一点,而无需编写任何vba代码。

您首先需要通过右键单击表或查询并选择导出并选择xml作为文件类型来手动导出表或查询。最后,您可以保存导出步骤,只需勾选该框即可保存步骤并为导出步骤指定一个适当的名称。完成此操作后,可以使用RunSavedImportExport操作通过宏运行导出步骤。只需选择手动导出时创建的已保存导出的名称。任务完成。希望这有助于他人。

+2

仅供参考:数据宏不包含在XML中 - 我只是在Access 2013上试过它。 – HarveyFrench 2015-09-25 07:55:20

0

右键单击宏并选择Export,然后选择要接收宏的数据库。

+0

我知道它适用于导航窗格中列出的常规宏,但是它也适用于数据宏,例如Before Change,插入后,...? (我不认为它确实如此。) – 2016-11-18 23:21:33