Не могу использовать «(неизвестно)»; файл уже используется - PullRequest
5 голосов
/ 27 июля 2011

У нас есть проблема, которую, я думаю, легко решить, но просто не знаю, как. У нас есть Windows 2003 Server с приложением Classic ASP. База данных MSAccess используется для хранения данных.

Приложение разработано таким образом, чтобы оно имело множество включений.

Страница .asp может открыть соединение с БД и закрыть его в конце страницы. В то же время, включение, включенное в страницу, может также открыть ту же базу данных.

Проблема в том, что при втором открытии мы получаем ошибку:

Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Microsoft Access Driver] Could not use '(unknown)'; file already in use

Это только для нашей локальной конфигурации - мы не являемся владельцем этого проекта, но помогаем клиенту исправить некоторые элементы. Все отлично работает на стороне клиента. Когда мы устанавливаем доступ только для чтения к базе данных, эта ошибка не отображается. Итак, кажется, что ADODB.Connection открывает базу данных в монопольном режиме.

У кого-нибудь есть идеи, как это исправить?

Спасибо

Ответы [ 2 ]

6 голосов
/ 28 июля 2011

Хорошо. Проблема была решена. Как я уже говорил в вопросе - разрешение было ОЧЕНЬ ПРОСТО. Вместо того, чтобы устанавливать разрешение IUSR_ * на запись только в файл MDB, необходимо было установить разрешение на запись для всей папки, в которой хранится файл MDB. Странно, потому что я не вижу никаких созданных дополнительных файлов (то есть, как .ldb файл, который создается во время эксклюзивного открытия БД). Но это работает сейчас!

1 голос
/ 28 июля 2011

Насколько я помню, используя Access в мои первые классические дни ASP, вы не можете открыть более одного подключения одновременно, указывая на один и тот же физический файл .mdb, потому что, как только он открыт, он заблокирован.Вот чему я научился трудным путем.

Решением для меня было использование одного соединения.Имея очень маленький веб-сайт для управления, я просто использовал объект подключения уровня приложения, создавал и открывал один раз в global.asa, затем использовал на всех страницах.
Однако это не очень хорошо для обычных веб-сайтов, поэтому вы можете написать файл с именем «database.asp»."там создайте и откройте соединение, затем включите этот файл и используйте объект соединения в своем коде, не забывая закрывать его в конце каждой страницы.

Надеюсь, это имеет смысл, я уточню, если это необходимо.

...