【问题标题】:Run Macros for MS Access .accdb file with Python使用 Python 为 MS Access .accdb 文件运行宏
【发布时间】: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 进程。可能在较早的运行中,您没有完全退出(通常发生在以前的错误中)。

标签: python ms-access macros


【解决方案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。在后台打开。
猜你喜欢
  • 2012-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-28
相关资源
最近更新 更多