使用 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