Файл не был выпущен - PullRequest
       1

Файл не был выпущен

2 голосов
/ 07 марта 2012

Хорошо, поэтому мне нужно выполнить несколько запросов в 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 ]

1 голос
/ 07 марта 2012

Я внес некоторые изменения, чтобы ваш пример работал на меня. Чтобы решить вашу проблему, добавьте 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)
1 голос
/ 07 марта 2012

Ваш код содержит эту строку:

DB = access.CurrentDb()

Когда эта строка выполняется, CurrentDb() ссылается db1.mdb .Затем вы получите WindowsError at:

os.remove("db1.mdb")

Так что мне интересно, если переменная DB все еще содержит ссылку на db1.mdb .Возможно, вы могли бы сначала попробовать del DB до os.remove().

Или, поскольку ваш код на самом деле не использует эту переменную БД, просто избавьтесь от нее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...