【发布时间】:2015-06-29 16:18:40
【问题描述】:
我在 SAS 和 Access 方面拥有丰富的经验,并且我知道如何从 VBA 调用 Access,但是我遇到了需要帮助的表锁问题。
基本上我正在做的是在 SAS 中运行一个 proc freq,将它传递给 Access 中的一个表,以便可以在子表单中读取它。
我有一个带有一些组合框的表单,用户可以在其中选择有关他们想要频率的变量的信息。然后他们点击一个按钮,VBA 将这些参数传递给 SAS,然后子表单将填充来自 SAS 的频率数据。
除了最后一部分,一切都正常。
我已成功从 Access 获取参数,将它们传递给 SAS,并运行正确的频率。但在 SAS 将 proc 导出回 Access 期间,我收到一条错误消息:“执行:数据库引擎无法锁定表“FREQ”,因为它已被其他人或进程使用。”
问题是 SAS 导出到的表在 Access 中被打开 SAS 的表单使用。
由于在 SAS 处理时我显然没有使用表单,有没有办法让表单解锁或断开与表的连接,以便 SAS 可以访问它,然后在 SAS 完成处理后将表重新连接到表单?
我尝试拆分数据库,但遇到了同样的问题。
【问题讨论】:
-
能否关闭表单,更新表格,然后重新打开表单?
-
我还是会遇到同样的问题。我可以告诉它关闭并重新打开,但 Access 不知道要等待 SAS 重新打开,因此它只会在 SAS 运行时关闭并重新打开并产生同样的问题
-
您是否偶然获得了 SAS Add-in for Microsoft Office 的许可?
-
让您的 sas 更新更新临时表中的特定值,因为它是最后一次操作。在开始更新之前,请关闭您的表单并打开一个带有定时事件的隐藏表单,以定期检查临时表中的特定值。一旦 on-timer 事件找到值,关闭隐藏的表单,打开你的主表单备份。
-
让 SAS 将结果写入 CSV。然后在访问中导入 CSV。有点丑,但应该避免锁定问题。