好的,所以我必须在访问07中运行一些查询然后压缩并修复它。我正在使用python和win32com来做到这一点。我目前使用的代码就是这个。
import os;
import win32com.client;
DB1 = 'db1.mdb'
DB2 = 'db1N.mdb'
DB3 = 'db2.mdb'
DBR = r'db1.mdb'
access = win32com.client.Dispatch("Access.Application")
access.OpenCurrentDatabase(DBR)
DB = access.CurrentDb()
access.DoCmd.OpenQuery("1")
access.DoCmd.OpenQuery("2")
access.DoCmd.OpenQuery("3")
access.CloseCurrentDatabase()
access.Application.Quit();
os.system('copy "db1.mdb" "db2.mdb"')
access = win32com.client.Dispatch("Access.Application")
access.CompactRepair(DB3,DB2)
access.Application.Quit();
os.remove("db2.mdb")
os.remove("db1.mdb")
os.rename("db1N.mdb","db1.mdb")
问题是我收到了这个错误。
WindowsError: [Error 32] The process cannot access the file because it is being used by another process: 'db1.mdb'
我不知道为什么我收到此错误,因为我正在退出应该关闭文件的访问权限。任何想法如何解决这个问题将不胜感激。
答案 0 :(得分:1)
您的代码包含以下行:
DB = access.CurrentDb()
执行该行时,CurrentDb()
引用 db1.mdb 。然后,您将在
os.remove("db1.mdb")
所以我想知道变量DB是否仍然存在对 db1.mdb 的引用。也许您可以先在del DB
之前尝试os.remove()
。
或者,因为你的代码实际上并没有使用那个DB变量,所以只需要删除它。
答案 1 :(得分:1)
我做了一些修改,让你的榜样为我工作。要解决您的问题,请添加DB.Close();
import os;
import win32com.client;
path='C:/project/714239'
os.chdir(path)
DB1 = 'db1.mdb'
DB2 = 'db1N.mdb'
DB3 = 'db2.mdb'
access = win32com.client.Dispatch("Access.Application")
access.OpenCurrentDatabase(path + '/' + DB1, False)
DB = access.CurrentDb()
DB.Close(); #ADDED THIS
access.CloseCurrentDatabase()
access.Application.Quit();
os.system('copy ' + DB1 + ' ' + DB2)
access = win32com.client.Dispatch("Access.Application")
access.CompactRepair(path + '/' + DB2, path + '/' + DB3, True)
access.Application.Quit();
os.remove(DB2)
os.remove(DB1)
os.rename(DB3,DB1)