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

时间:2016-03-22 17:09:24

标签: python ms-access macros

我正在尝试在.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)

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

可能是什么问题?

1 个答案:

答案 0 :(得分:0)

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

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()

现在它运作良好。