【问题标题】:Data Macros in MS Access not working with SQL-Queries from JAVAMS Access 中的数据宏不适用于来自 JAVA 的 SQL 查询
【发布时间】:2018-10-09 08:27:28
【问题描述】:

我使用 JavaFX 创建了一个数据库 (MS Access) 和一个前端。

在一个表中,我实现了一个数据宏,它在不同的列(CurrentUser()-Function)中触发 INSERT 事件。我以不同的方式测试了数据宏(直接在 MS Access 中创建了一行,使用 SQL-Insert-Query 创建了一个 VBA 代码),并且任何时候我的触发器都可以工作。

我的 Java 前端也做得很好(SQL INSERT 到 MS Access)。 但问题是:数据宏不能以这种方式工作。

我想,来自 MS Access 的后端更新与数据宏之间存在关联,因为每当我使用 JavaFX 前端执行 SQL-Insert-Command 时,MS Access 都没有向我显示新行在表格中(刷新表格无法解决此问题)。我需要先关闭 MS Access 才能看到我的新表格插入(当然没有触发器插入 :-))。

有没有办法解决这个问题?

如果有任何帮助,我将不胜感激!谢谢

【问题讨论】:

  • 欢迎来到 SO。提问时,请提供minimal reproducible example
  • 没有。数据宏非常特定于仅访问环境。对于跨平台或其他后端,请使用 服务器引擎数据库,如 SQL Server 或 MySQL。
  • 好的,感谢您的反馈!
  • 这与 SQL 触发器并没有什么不同。如果您开始从 SQL 触发器调用外部代码库,那么它往往不起作用 - Access 也是如此。使用其他系统更新 Access 表是完全合法的 - 而且您在 Access 中的表触发器代码将运行得很好。但是,不能使用 VBA 代码 - 请参阅下面的答案。

标签: sql ms-access javafx triggers ms-access-data-macro


【解决方案1】:

所谓的数据宏当然很像表触发器。它们可以而且应该工作,而无需启动或什至在计算机上运行 Access 的副本。

但是,如果数据宏使用“任何”VBA 函数,那么只有在您启动 Access 时这样的宏才会起作用。

因此您必须删除 =CurrentUser() 的使用,因为这似乎是 VBA 函数。

因此,您开始使用 VBA 函数的瞬间,即您编写的那些表触发器、事件和代码将不起作用的瞬间。 (即:除非从 Access 运行,否则不起作用)。因此,如果其他系统(FoxPro、Vb6 或其他系统)使用数据宏确实可以正常工作。只是在执行此操作时不能引入 VBA 代码。

虽然您“可以”从这些表触发器中调用或使用 VBA 代码,但强烈建议您不要这样做。

因此,如果您使用 Vb6 vb.net、FoxPro 等打开 Access 数据库,您就可以更新数据,并且您拥有的过程宏代码将运行和执行。

但是,Vb6、FoxPro(您的 java)等不使用 VBA 代码(Visual Basic For Applications),因此数据引擎无法使用。

如果您的表事件代码(数据宏)使用任何外部 VBA 代码,那么您只能使用 Access 作为更新此类表的方法,因为任何其他系统都没有可用的 VBA 库和代码。

事实上,您可以将 jet(现在称为 ACE)安装为 100% 单独安装。因此,对于您编写的程序表代码,Access 数据库引擎 (ACE) 不需要在目标计算机上安装 VBA。也不必安装 Access 的副本。

因此,如果您的数据宏引用或使用任何外部 VBA 函数,那么唯一可以更新表的客户端将是 Access,因为没有其他接口可以提供解析 VBA 代码的“表达式服务”库和系统。

并且没有获取当前用户的数据宏功能。因此,实现这一点的唯一方法是在启动时使用一些代码将“当前用户”设置为表(比如 1 条记录)。然后数据宏可以从表中读取该 1 条记录以获取“当前用户”。当然,这种设置在多用户设置中不起作用,但对于本地文件,这可能是“kluge”类型的孤子。

这也意味着您的启动代码(VB6、Java 等)。如果您正在编写代码,则必须使用包含当前用户的 1 行来更新“用户”表——据我所知,您无法从数据宏中获取此信息。

但是,虽然当前用户在数据宏中不可用,但在标准的非表宏中可用。

但是,数据(表)宏只有本地变量。如果数据宏可以调用用户宏,那么您可以这样做。

因此,您不能从数据宏调用或使用 VBA 代码 - 它们向 VBA 引入了外部依赖关系,除非加载 Access,否则该依赖关系不可用。

数据宏是独立的路由,即使在 Access 前端应用程序之外发生更新,它们也会运行。但是,在 Access 前端之外使用时,数据引擎不会加载或使用 VBA。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 2013-09-19
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多