Web server MSAccess error: You canceled the previous operation
Web server MSAccess error: You canceled the previous operation
我收到一个神秘的 MSAccess 错误,我无法弄清楚是什么导致了它。
我有以下设置:
- 调用
的 Golang / Gin 网络服务器 (Windows)
- 已编译 python 脚本 (.exe) 使用 COM 调用
- 用于将数据库查询导出为特定格式的 MSAccess 宏。
我还在多层上进行了一些原始日志记录,以帮助我在这种奇怪的体系结构中进行调试。
错误 记录自 python:<class 'pywintypes.com_error'>: (-2147352567, 'Ausnahmefehler aufgetreten.', (0, None, 'Sie haben den vorherigen Vorgang abgebrochen.', 'vbaac10.chm', 5738, -2146826287), None)
大致翻译为
<class 'pywintypes.com_error'>: (-2147352567, 'Unknown error.', (0, None, 'You canceled the previous operation.', 'vbaac10.chm', 5738, -2146826287), None)
.
奇怪的是,如果我 运行 自己执行 python executable,一切都按预期进行,没有错误发生。但是,如果我从我的 golang 代码(网络服务器/测试)调用它,它会抛出 'You canceled the previous operation.' 错误,据我从在线阅读中可以看出,当宏名称或 table 名称不正确时会发生该错误。
我现在唯一的假设是我golang执行的时候和我自己执行的时候用户权限不一样?
这里是调用宏的相关python代码:
import pythoncom
import win32com.client
import sys
import logger
log = logger.Logger("data-sync.txt")
def export_db(db_path):
try:
log.info(f"Exporting database under: {db_path}")
log.info("- Connecting to Access COM interface.")
oAccess = win32com.client.Dispatch("Access.Application")
log.info("- Opening provided database.")
oAccess.OpenCurrentDatabase(db_path, False)
log.info("- Running Macro \"ExportDb\"")
oAccess.DoCmd.RunMacro("ExportDb")
log.info("- Running complete, closing database")
oAccess.CloseCurrentDatabase()
except Exception as err:
log.error(type(err), err)
pass
pass
我已经三重检查了路径和调用的宏名称,欢迎任何其他想法。
我至少弄清楚了为什么它部分不起作用。显然在我的可执行文件中我有一个硬编码的默认路径,如下所示:
default_db_path = r"C:\Users\some\path\DummyData.accdb"
但是我提供了以下格式的路径:
export-database.exe "C:/Users/some/path/DummyData.accdb"
不同的斜杠显然足以让 Access 或 COM 接口将其解释为相对路径并导致崩溃。
不幸的是,我的测试做的是完全相同的事情,但对于更正的路径仍然会抛出相同的错误。我的高效代码有效,所以我会将这个问题标记为已回答,如果我遇到测试问题的原因,我会更新它。
编辑:
正如所宣传的那样,我遇到了我的测试中出现的问题。在我的测试中,我将 access 数据库复制到一个子文件夹中进行处理,并在我的测试后清理它。
显然你必须在访问信任中心激活宏的执行(这是一个全局设置)。我已经在源数据库中激活了宏,但是在在我的测试中自动复制 当我打开实际的 db 文件并尝试手动执行宏时,我显然在数据库本身中收到了通知!
我收到一个神秘的 MSAccess 错误,我无法弄清楚是什么导致了它。
我有以下设置:
- 调用 的 Golang / Gin 网络服务器 (Windows)
- 已编译 python 脚本 (.exe) 使用 COM 调用
- 用于将数据库查询导出为特定格式的 MSAccess 宏。
我还在多层上进行了一些原始日志记录,以帮助我在这种奇怪的体系结构中进行调试。
错误 记录自 python:<class 'pywintypes.com_error'>: (-2147352567, 'Ausnahmefehler aufgetreten.', (0, None, 'Sie haben den vorherigen Vorgang abgebrochen.', 'vbaac10.chm', 5738, -2146826287), None)
大致翻译为
<class 'pywintypes.com_error'>: (-2147352567, 'Unknown error.', (0, None, 'You canceled the previous operation.', 'vbaac10.chm', 5738, -2146826287), None)
.
奇怪的是,如果我 运行 自己执行 python executable,一切都按预期进行,没有错误发生。但是,如果我从我的 golang 代码(网络服务器/测试)调用它,它会抛出 'You canceled the previous operation.' 错误,据我从在线阅读中可以看出,当宏名称或 table 名称不正确时会发生该错误。
我现在唯一的假设是我golang执行的时候和我自己执行的时候用户权限不一样?
这里是调用宏的相关python代码:
import pythoncom
import win32com.client
import sys
import logger
log = logger.Logger("data-sync.txt")
def export_db(db_path):
try:
log.info(f"Exporting database under: {db_path}")
log.info("- Connecting to Access COM interface.")
oAccess = win32com.client.Dispatch("Access.Application")
log.info("- Opening provided database.")
oAccess.OpenCurrentDatabase(db_path, False)
log.info("- Running Macro \"ExportDb\"")
oAccess.DoCmd.RunMacro("ExportDb")
log.info("- Running complete, closing database")
oAccess.CloseCurrentDatabase()
except Exception as err:
log.error(type(err), err)
pass
pass
我已经三重检查了路径和调用的宏名称,欢迎任何其他想法。
我至少弄清楚了为什么它部分不起作用。显然在我的可执行文件中我有一个硬编码的默认路径,如下所示:
default_db_path = r"C:\Users\some\path\DummyData.accdb"
但是我提供了以下格式的路径:
export-database.exe "C:/Users/some/path/DummyData.accdb"
不同的斜杠显然足以让 Access 或 COM 接口将其解释为相对路径并导致崩溃。
不幸的是,我的测试做的是完全相同的事情,但对于更正的路径仍然会抛出相同的错误。我的高效代码有效,所以我会将这个问题标记为已回答,如果我遇到测试问题的原因,我会更新它。
编辑: 正如所宣传的那样,我遇到了我的测试中出现的问题。在我的测试中,我将 access 数据库复制到一个子文件夹中进行处理,并在我的测试后清理它。
显然你必须在访问信任中心激活宏的执行(这是一个全局设置)。我已经在源数据库中激活了宏,但是在在我的测试中自动复制 当我打开实际的 db 文件并尝试手动执行宏时,我显然在数据库本身中收到了通知!