文件未被释放

时间:2012-03-07 17:13:11

标签: python winapi ms-access

好的,所以我必须在访问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'

我不知道为什么我收到此错误,因为我正在退出应该关闭文件的访问权限。任何想法如何解决这个问题将不胜感激。

2 个答案:

答案 0 :(得分:1)

您的代码包含以下行:

DB = access.CurrentDb()

执行该行时,CurrentDb()引用 db1.mdb 。然后,您将在

处获得 WindowsError
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)