使用 Python 为 MS Access .accdb 文件运行宏

Posted

技术标签:

【中文标题】使用 Python 为 MS Access .accdb 文件运行宏【英文标题】:Run Macros for MS Access .accdb file with Python 【发布时间】:2016-03-22 17:09:23 【问题描述】:

我正在尝试在 .accdb 文件中运行宏查询(宏执行许多查询,为数据库中的每个查询保存一个新表)。

看起来像这样:

import os
import sys
import shutil
import win32ui
import win32api,time
import win32com.client
from win32com.client import Dispatch, constants
const=win32com.client.constants


  def ejecutarPY():

    src_dir= r"C:\Users\irecasens\Desktop"
    os.chdir(src_dir)

    strDbName = 'test1.accdb'     
    objAccess = Dispatch("Access.Application")    
    objAccess.Visible = False    
    objAccess.OpenCurrentDatabase(strDbName)     
    objDB = objAccess.CurrentDb()      
    objAccess.DoCmd.RunMacro('GO')     
    objAccess.Application.Quit()     

ejecutarPY()

它给出的错误是:

Traceback (most recent call last):
  File "C:\EjecutarMacros.py", line 25, in <module>
    ejecutarPY()
  File "C:\EjecutarMacros.py", line 20, in ejecutarPY
    objAccess.OpenCurrentDatabase(strDbName)
  File "<COMObject Access.Application>", line 3, in OpenCurrentDatabase
  File "C:\Program Files\Python\lib\site-packages\win32com\client\dynamic.py", line 287, in _ApplyTypes_
    result = self._oleobj_.InvokeTypes(*(dispid, LCID, wFlags, retType, argTypes) + args)
com_error: (-2147352567, 'Ocurri\xf3 una excepci\xf3n.', (0, None, u'La base de datos ya est\xe1 abierta.', None, -1, -2146820422), None)

最后它说数据库已经打开,但它不是(它是一个本地文件,没有人有任何访问权限。里面的所有表也是本地的)。

可能是什么问题?

【问题讨论】:

很好。恭喜?你有编程问题吗?这个网站是用来提问的,而不是一个转储随机代码的地方……什么?佩服? 请在提供其他(重要)信息时edit您的问题。不要把它埋在 cmets 里。 对于那些在家玩的人,谷歌翻译说“La base de datos ya está abierta”。表示“数据库现在 [当前?] 打开。” 检查您的任务管理器是否有任何挥之不去的 MSAccess.exe 进程。可能在较早的运行中,您没有完全退出(通常发生在以前的错误中)。 【参考方案1】:

我开始更改一些命令,使其看起来像这样:

def ejecutarPY():

    src_dir= r"C:\Users\..."
    os.chdir(src_dir)
    strDbName = 'C:\Users\....accdb'
    print(strDbName)
    ac = win32com.client.Dispatch("Access.Application")
    ac.Visible=False

    ac.OpenCurrentDatabase(strDbName)
    ac.DoCmd.RunMacro('GO')
    ac.DoCmd.CloseDatabase
    ac = None

ejecutarPY()

现在可以正常使用了。

【讨论】:

您仍应结束该过程:objAccess.Application.Quit()。您的结尾关闭了数据库文件,但保留了 .exe。在后台打开。

以上是关于使用 Python 为 MS Access .accdb 文件运行宏的主要内容,如果未能解决你的问题,请参考以下文章

使用 python 将 pandas 数据框导入 MS Access 表

如何在 Compact Framework 中使用 MS Access 数据库?

使用 Python 将数据从 MS Access 复制到 MS Excel

Eclipse 数据源资源管理器和 MS-Access

从 Python 导出文件的 MS Access 大文件大小问题

具有用户功能条件的 MS Access 查询停止处理 odbc 数据