8

我需要将 Access 数据宏从我的测试数据库传输到我的生产数据库。有人知道该怎么做吗?

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

如果我只需要这样做一次,这没什么大不了的,但我需要在开发项目的过程中多次这样做。

我尝试将表导出到 xml,但不包括数据宏。

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

4

5 回答 5

10

您可能想尝试一对未记录的 VBA 函数

要导出:

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

要导入:

LoadFromText acTableDataMacro, "TableName", "C:\PathToFile\DataMacro.xml"
于 2012-10-27T20:46:51.633 回答
6

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

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

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

所以其他人知道,LoadFromText 会覆盖任何以前的宏,这太棒了,因为我的模板在第一次尝试时没有正确。

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

于 2013-04-27T16:20:28.443 回答
3

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

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

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

例如,更新表后触发器在 Access 中如下所示:

在此处输入图像描述

如果你剪掉上面的(ctrl-a,ctrl-cc),那么你可以将它粘贴到记事本中。事实上,你甚至可以在 Visual Studio 或任何 xml 编辑器中粘贴/打开它,你会看到:

在此处输入图像描述

所以你可以从这些宏中剪切+粘贴。

如前所述,因此在过去,我经常保留更改的“日志”。

因此,如果我在异地工作并修改了 2 个代码模块、4 个表单和 2 个报告,那么我就有了一些更改日志。我会在这张表中输入更改的对象。

当我到达现场时,我快速浏览了该表,我知道要导入 3-5 个对象,这样的导入只需几分钟。

但是,使用表触发器和存储过程,您可以复制更多内容。

我要么做两件事之一:

使用日志的想法和

a) 取消发布开发版本并将其带到您的工作站点。然后,您导入新的表单、报告等。对于触发代码,您可以在两个应用程序之间进行剪切和粘贴。

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

以上肯定不太理想。再一次,在过去,我并不总是有代码来编写表格更改的脚本,并且使用一个小日志表效果很好。

所以过去我经常只是写下某某表被修改了,我必须添加某某列。

因此,您可以选择将宏代码作为 xml 剪切+粘贴到单独的小文档中,还是直接从开发中剪切+粘贴到生产中。

我确实认为,如果您在不同的位置工作,那么我认为最好取消发布开发版本并随身携带(我假设您知道/意识到您可以制作未发布的 Web 应用程序副本) .

所以表单、代码模块、宏等可以很容易地导入(你删除表单等,然后从那个未发布的副本中导入)。

但是,对于表代码呢?您必须从该未发布的副本中一次剪切 + 粘贴到某个暂存区域,或者如前所述在应用程序之间剪切 + 粘贴。

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

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

于 2012-02-09T08:46:00.673 回答
0

我遇到了同样的问题,无法找到正确的宏以便以 xml 格式导出。但是我能够右键单击我的查询并以这种方式导出到 xml,所以我知道这是可能的。

但是我希望它从一个按钮运行,我找到了一种简单的方法来做到这一点,而无需编写任何 vba 代码。

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

于 2015-07-07T14:17:07.933 回答
0

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

于 2016-11-18T22:47:06.360 回答