python - Web 服务器 MSAccess 错误 : You canceled the previous operation

标签 python ms-access go com

我收到一个神秘的 MSAccess 错误,我无法弄清楚是什么原因造成的。

我有以下 设置 :

  • 调用
  • 的 Golang/Gin 网络服务器 (Windows)
  • 使用 COM 调用
  • 的已编译 Python 脚本 (.exe)
  • 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 可执行文件,一切都会按预期工作,并且不会发生错误。但是,如果我从我的 golang 代码(网络服务器/测试)中调用它,它会抛出“您取消了上一个操作”。错误,据我在线阅读,当宏名称或表名称不正确时会发生此错误。

    我现在唯一的假设是,当我的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 接口(interface)将其解释为相对路径并崩溃。

    不幸的是,我做同样事情的测试仍然会为更正的路径抛出相同的错误。我的生产代码有效,所以我会将这个问题标记为已回答,如果我遇到测试问题的原因,我会更新它。

    编辑:
    正如所宣传的那样,我遇到了测试中出现的问题。在我的测试中,我将 Access 数据库复制到一个子文件夹中进行处理,并在测试后对其进行清理。

    显然,您必须在 Access 信任中心中激活宏的执行(这是一个全局设置)。 我已经在源数据库中激活了宏,但是在我的测试中自动复制之后,当我打开实际的 db 文件并尝试手动执行宏时,我显然在数据库本身中收到了通知!

    关于python - Web 服务器 MSAccess 错误 : You canceled the previous operation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60463514/

    相关文章:

    python - 属性错误: module 'pymysql.constants.ER' has no attribute 'CONSTRAINT_FAILED' in pymysql Python

    ms-access - 如何判断 ACCDB 文件的版本?

    ms-access - 微软 Access : how to add 1 row between 2 rows?

    go - 编译器如何交叉编译到不同的操作系统和体系结构?

    docker run -w 从 go 脚本运行时出现意外错误

    python - 为什么这会打印两次错误消息?

    python - 尝试在 scikit-learn 中并行化参数搜索会导致 "SystemError: NULL result without error in PyObject_Call"

    SQL只选择最高日期

    javascript - go 函数内的await js 异步函数(promise)

    python - 如何在Python中找到给定字符串中的最大数字?