Блокировка файла недоступна

Обновлено: 21.11.2024

Статус Эта тема была заблокирована и не открыта для дальнейших ответов. Первоначальный инициатор темы может использовать кнопку «Отчет», чтобы запросить ее повторное открытие, но любой другой пользователь с похожей проблемой должен создать новую тему. Посмотрите наше приветственное руководство, чтобы узнать, как пользоваться этим сайтом.

dfriend846

В нашей сети есть база данных Access, которую одновременно используют 2-3 из нас. Для нас это не проблема. Один человек не может получить к нему доступ из-за ошибки «Не удалось заблокировать файл». У остальных такой проблемы нет. Кто-нибудь может сказать мне, как это исправить? Является ли проблема в безопасности человека или конфигурации доступа или в базе данных?

dfriend846

Вот ответ на указанную выше проблему: пользователи, у которых возникли проблемы с открытием Access, имели права только на чтение сетевой папки, содержащей базу данных. Если бы они были первым (единственным?) пользователем, тогда не было бы проблем, но если бы они вошли в систему как несколько пользователей, программа не могла бы создать файл блокировки, поскольку у них не было прав записи. После изменения разрешения на запись проблема исчезла.

Адеян

глисандо

У меня такая же проблема и на работе. Недавно я взял на себя администрирование базы данных. Есть пользователь, который всегда получает сообщение об ошибке "не удалось заблокировать файл"

Является ли предоставление им прав на запись единственным способом решить эту проблему? Что, если этот конкретный пользователь не должен выполнять какое-либо редактирование данных, а я в конечном итоге предоставлю ему право «ЗАПИСАТЬ»?

dfriend846

Здравствуйте, Глисандо,
извините, но я не могу подтвердить, что другой метод будет работать. В своей заметке 2005 года я упомянул права на запись папки в сети. Существуют способы запретить людям с правами записи изменять данные. В моем случае пользователи получают доступ к данным через формы, а те, кому не следует изменять данные, используют формы, поля которых нельзя редактировать. Ничто из этого не остановит решительного человека с небольшими знаниями.

глисандо

В этом случае я предоставлю пользователям права на запись. Ребята, на сервере есть несколько файлов типа MSACCESS.EXE, application.mdb, Security.mdw, MSACCESS.EXE.dsn и application.mdb.dsn. Я щелкнул правой кнопкой мыши на «application.mdb», а затем на вкладке «Безопасность». В разделе «Имена групп или пользователей» я вижу список имен. Ниже в разделе «Разрешения для имени сотрудника» я вижу типы разрешений, предоставляемых каждому отдельному пользователю. Теперь я подумал, что все, что мне нужно сделать, это щелкнуть вкладку «разрешить» для разрешения «запись». Когда я нажал на нее, это была зеленая галочка, а не серая, как другие галочки, предназначенные для других разрешений. Я нажал «применить», а не «ок». Однако у пользователя все еще есть та же ошибка, что и раньше. Есть ли что-нибудь еще, что я должен сделать, чтобы исправить эту проблему, ребята?

Кристобаль03

У меня сложилось впечатление, что dfriend846 имел в виду установку разрешений на запись для пользователя Windows в сетевую папку, а не создание разрешений на запись для пользователей в рамках собственных функций безопасности Access или самого файла базы данных. Пользователи Windows должны иметь возможность записи в папку, в которой находится база данных, чтобы создавать файлы блокировки.

глисандо

Я прочитал ваше сообщение. Спасибо большое. Я зашел в сетевую папку, щелкнул правой кнопкой мыши и выбрал свойства. Я нажал на вкладку «Безопасность». В разделе «Имена групп или пользователей» я щелкнул имя пользователя, а в разделе «Разрешения для пользователя» я щелкнул поле «Разрешить» для «записи» (уже были выбраны «Чтение и выполнение», «Список содержимого папки» и «Чтение»). ). Я нажал на вкладку «Дополнительно» и под именем пользователя обнаружил, что все необходимые разрешения выбраны, как и в случае с пользователями, у которых нет ошибки «не удалось заблокировать файл».

Чтобы убедиться, что все в порядке, я зашел в папку и щелкнул правой кнопкой мыши файл application.mdb. Я выбрал имя пользователя и обнаружил, что в разделе «Разрешения для пользователя» я обнаружил, что галочка в поле разрешения для «Чтение и выполнение» и «Чтение» должна быть зеленой, а галочка для поля записи неактивна. Мне это показалось странным, так как для других пользователей галочки во всех трех полях были выделены серым цветом. Еще одна вещь, которую я заметил, была в дополнительных настройках безопасности, для этого конкретного имени пользователя в столбце «Унаследовано от» указано: не унаследовано. Затем я нажал «Изменить», чтобы увидеть разрешенные разрешения, и был очень удивлен, увидев, что поля «создать файлы/записать данные», «создать папки/добавить данные», «записать атрибуты» и «записать расширенные атрибуты» не были выбраны. Я в замешательстве, что еще я должен сделать?

глисандо

Мне нужно добавить нового пользователя в базу данных. Вот что я пробовал:

Я щелкнул правой кнопкой мыши папку с базой данных. Я выбрал свойства. На общей вкладке есть опция «Добавить». Можно ли таким образом добавить нового пользователя в базу данных?

Однако я прочитал в Библии Ms Access 2003, что мне нужно перейти в Инструменты, Безопасность, Учетные записи пользователей и групп, чтобы добавить пользователей, однако я столкнулся с проблемой. Если я зайду в папку и дважды щелкну файл database.mdb, я получу сообщение о том, что у меня недостаточно прав для использования объекта, однако у меня есть все разрешения. Что мне делать?

dfriend846

Здравствуйте, Glisandro,
К сожалению, я смог ответить на свой первоначальный вопрос, но у меня недостаточно опыта, чтобы ответить на ваши вопросы. Кристобаль был прав (6 июня), что моя проблема связана с сетевым доступом для чтения/записи для пользователя. Это можно проверить, открыв интересующую папку с компьютера пользователя и создав файл. Простой способ сделать это — щелкнуть правой кнопкой мыши пустое место и выбрать новый текстовый документ. Вы должны иметь возможность создать текстовый файл, а затем стереть его. Если вы не можете этого сделать, вам нужно будет изменить настройки, прежде чем переходить к Access.
Я не пытался использовать файл database.mdb.

Статус Эта тема была заблокирована и не открыта для дальнейших ответов. Первоначальный инициатор темы может использовать кнопку «Отчет», чтобы запросить ее повторное открытие, но любой другой пользователь с похожей проблемой должен создать новую тему. Посмотрите наше приветственное руководство, чтобы узнать, как пользоваться этим сайтом.

Сегодня у меня был клиент, который не смог открыть общую серверную базу данных. Система выдала ошибку «Не удалось заблокировать файл».

Я определил, что Access пытался открыть файл в эксклюзивном режиме, хотя ни один из обычных методов для эксклюзивного открытия файла не применялся:

• Для параметра "Файл" / "Параметры" / "Настройки клиента" / "Дополнительно" / "По умолчанию" выбран режим открытия "Общий доступ".

• Командная строка /excl не использовалась

• У пользователя были права полного доступа к общей папке, содержащей базу данных

• При создании новой тестовой базы данных она открывалась монопольно, и никто другой не мог ее открыть.

• Вновь созданную тестовую базу данных нельзя было повторно открыть, если ее открыл другой пользователь,

• Несколько других пользователей могли без проблем одновременно открывать новую тестовую базу данных.

Пользователь использовал базу данных для обычных операций в течение нескольких дней до возникновения проблемы.

Сегодня система пользователя была обновлена ​​до сборки 16.0.14701.20248.

У всех остальных тестовых пользователей была сборка 16.0.14701.20226.

Проблема решена.

Кто-нибудь еще может подтвердить, что эта проблема существует с последней сборкой Access?

Сообщить о нарушении

Домогательство – это любое поведение, направленное на то, чтобы побеспокоить или расстроить человека или группу людей. К угрозам относятся любые угрозы самоубийства, насилия или причинения вреда другому человеку. Любой контент на тему для взрослых или неуместный для веб-сайта сообщества. Любое изображение, ссылка или обсуждение наготы. Любое поведение, которое является оскорбительным, грубым, вульгарным, оскверняет или демонстрирует неуважение. Любое поведение, которое может нарушать лицензионные соглашения с конечными пользователями, включая предоставление ключей продукта или ссылок на пиратское программное обеспечение. Незапрашиваемая массовая рассылка или массовая реклама. Любые ссылки на вирусы, шпионское ПО, вредоносное ПО или фишинговые сайты или их пропаганда. Любой другой неприемлемый контент или поведение, как это определено Условиями использования или Кодексом поведения. Любое изображение, ссылка или обсуждение, связанные с детской порнографией, детской наготой или другим жестоким обращением с детьми или их эксплуатацией.

Если вы начали получать сообщение об ошибке «Файл используется» или «Не удалось заблокировать файл» в декабре 2021 г., возможно, вы стали жертвой ошибки Access. Вот как это исправить.

Майк Вулф

Если вы начали получать одно из следующих сообщений об ошибках начиная с 14 декабря 2021 года ("вторник исправлений"), то вы, скорее всего, стали невинной жертвой исправления безопасности Microsoft с непредвиденными последствиями.

Примеры сообщений об ошибках

Файл уже используется

-

ОБНОВЛЕНИЕ [2022-01-08]: я написал статью с подробным описанием того, как создать автоматическую установку, чтобы развернуть исправление ошибки на большом количестве компьютеров. В своем образце я использовал исправление среды выполнения Access 2013, но для отправки исправления ошибки в другие версии Access необходимо выполнить те же действия:

Пошаговый процесс исправления праздничной ошибки 2021 года для Office/Access 2013. Эти же шаги можно адаптировать и для исправления других версий.

Майк Вульф больше не установлен

Не удалось заблокировать файл

-

ОБНОВЛЕНИЕ [2021-12-29]: существует частичное обходное решение для ошибки "Не удалось заблокировать файл", связанной с методом DBEngine.OpenDatabase:

Эта экспериментальная функция может помочь вам избежать ошибки «Не удалось заблокировать файл» при запуске метода OpenDatabase объекта DBEngine.

Майк Вульф больше не установлен

Затронутые версии

Эта проблема появилась в следующих обновлениях:

  • KB 5002104 для Office 2013
  • KB 5002099 для Office 2016
  • Office 2019, версия 1808, сборка 10381.20020.
  • Office LTSC 2021, версия 2108, сборка 14332.20204

Приложения Microsoft 365:

  • Текущая версия канала 2111, сборка 14701.20248
  • Ежемесячный корпоративный канал, версия 2110, сборка 14527.20340
  • Ежемесячный корпоративный канал, версия 2109, сборка 14430.20380
  • Semi-Annual Enterprise Channel (предварительная версия), версия 2108, сборка 14326.20692.
  • Semi-Annual Enterprise Channel версии 2102, сборка 13801.21086
  • Semi-Annual Enterprise Channel Version 2008, сборка 13127.21842

Рабочие версии

Проблема устранена в следующих версиях:

  • Текущая версия канала 2111, сборка 14701.20262
  • Текущий канал (предварительная версия), версия 2112, сборка 14729.20170.
  • Ежемесячный корпоративный канал, версия 2110, сборка 14527.20344
  • Semi-Annual Enterprise Channel (предварительная версия), версия 2108, сборка 14326.20702.
  • Semi-Annual Enterprise Channel версии 2102, сборка 13801.21092
  • Semi-Annual Enterprise Channel, версия 2008, сборка 13127.21846

Установка исправления

Откат к предыдущей версии

Эта ошибка появилась как побочный эффект исправления системы безопасности, поэтому лучше всего обновить Office, как описано выше. Тем не менее, если вы не можете обновить Office по какой-либо причине, вы можете вернуться к предыдущей версии в качестве обходного пути, чтобы избежать ошибки.

Вот документация по откату до более ранней версии:

  • Информацию о сборках MSI см. в разделе Информация о возможности удаления Office
  • Информацию о Microsoft 365 см. в разделе Как вернуться к более ранней версии Office 2016 "нажми и работай"

Дополнительная литература

ОБНОВЛЕНИЕ [2022-01-08]: Я думаю, что лучшая страница в Интернете, посвященная этой ошибке, находится на сайте Даниэля Пино. На сегодняшний день (08.01.2022) статья содержит около 100 комментариев от пользователей, сообщающих об их собственном уникальном опыте устранения этой ошибки, а также некоторые из исправлений, которые им помогли:

Возникла потенциальная новая ошибка: «Этот файл уже используется. Введите новое имя или закройте файл, открытый в другой программе» и «Не удалось заблокировать файл».

Никогда не пропускайте статьи.

Подпишитесь, чтобы в воскресенье утром получать электронное письмо со ссылками и резюме семи статей, опубликованных на этой неделе.
(Я никогда не продам вашу электронную почту. Откажитесь от подписки в любое время.)

← Следующая статья

Предыдущая статья →

Менеджер JetShowPlan

Самый быстрый и простой способ начать анализ производительности запросов Microsoft Access — это приложение IslaDogs JetShowPlan Manager.

Как выполнить цикл по списку строк в VBA

Ищете быстрый и простой способ просмотреть список строк? Эти 4 строки кода - все, что вам нужно.

Обновление twinBASIC: 20 марта 2022 г.

Основные моменты включают загадочное обновление даты выпуска новой среды IDE и возможное решение twinBASIC для часто откладываемого управления современным браузером Access.

Как проверить, равны (или нет) два значения варианта в VBA

Вы не можете просто использовать операторы равенства (=) или неравенства (<>) для сравнения значений Variant в VBA. Вот более безопасная альтернатива.

Странное поведение Null

Когда два одинаковых значения не равны? Когда они оба Null! Если вы разработчик Microsoft Access, вам необходимо понимать, как (и почему) это работает.

Эта экспериментальная функция может помочь вам избежать ошибки "Не удалось заблокировать файл" при запуске метода OpenDatabase объекта DBEngine.

Майк Вулф

Недавнее исправление системы безопасности Windows сломало механизм блокировки базы данных Microsoft Access.

Одним из сообщений об ошибке, связанных с этой ошибкой, является AccessError(3050), "Не удалось заблокировать файл".

Эта ошибка возникает, когда вы пытаетесь запустить метод OpenDatabase DAO.DBEngine, но ACE (ядро базы данных) не может создать файл блокировки ( .ldb ).

Роль файла блокировки .ldb

Когда вы открываете файл с помощью Windows API (что фактически делает каждое приложение Windows за кулисами), вы можете использовать несколько различных режимов.

Вы можете открыть файл для монопольного использования, то есть никакой другой процесс не сможет читать, записывать или удалять этот файл (например, когда вы открываете базу данных Access и передаете флаг /excl в командной строке). Вы можете открыть файл и позволить другим процессам делать все эти вещи — читать, записывать и даже удалять файл. Это режим по умолчанию при открытии файла в Блокноте. Вы можете открыть файл и разрешить другим процессам читать этот файл, но не редактировать или удалять его. Например, это режим блокировки файлов по умолчанию в Excel.

Однако не существует комбинации этих режимов, обеспечивающей определенный режим доступа к файлам, предпочитаемый ядром базы данных ACE.

И что это за комбинация? По умолчанию механизм базы данных ACE позволяет нескольким пользователям одновременно редактировать содержимое таблиц. Однако, если вы хотите изменить структуру таблиц (или дизайн форм или отчетов или изменить VBA), вам нужно быть единственным пользователем, имеющим доступ к файл базы данных. Так как же Access справляется с этим сценарием, если никакая комбинация режимов общего доступа и доступа не поддерживает его?

Введите файл блокировки доступа.

Как работает файл блокировки

Когда вы открываете файл .accdb или .mdb, или просматриваете таблицу или запрос, связанные с таким файлом, механизм базы данных ACE проверяет, существует ли существующий файл .ldb.

Если такого файла нет, то движок создает его. Если по какой-либо причине не удается создать файл блокировки, механизм возвращается к попытке открыть файл Access в монопольном режиме (для параметра dwShareMode установлено нулевое значение). Если это удается, это означает, что никто другой не может вносить изменения в файл, пока он открыт у вас, включая редактирование содержимого таблиц. но, по крайней мере, вы смогли открыть его.

При использовании метода OpenDatabase объекта DBEngine подобное поведение не является встроенным.

Вызывающее ошибки поведение последнего исправления безопасности

Читая между строк различные отчеты об ошибках, которые я видел за последние несколько дней, кажется, что корнем текущей ошибки является механизм блокировки файлов .ldb механизма базы данных ACE.

Похоже, недавнее исправление для системы безопасности предотвратило создание ядром базы данных файла .ldb в определенных ситуациях. Мне пока не ясно, что это за ситуации и какова природа уязвимости безопасности. У меня есть непрекращающийся страх, что команда безопасности и группа доступа в Microsoft не в ладах по этому поводу.

Боюсь, служба безопасности скажет: "К сожалению, вы просто не можете продолжать создавать этот файл .ldb каким бы то ни было образом, если условия A, B и C соблюдены". встретились."

На что команда Access отвечает: "Вы представляете какое-нибудь представление, сколько критически важных бизнес-приложений это ломает? Вы просите нас изменить один из основополагающих аспектов механизма базы данных ACE работает. Это не то, что вы просто добавляете в исправление."

Сейчас это жутко похоже на гигантскую ошибку почти трехлетней давности, которая до сих пор не исправлена. Будем надеяться, что это не чудовищная ошибка версии 2.0.

Частичный обходной путь

Шейн Грофф из группы разработчиков Access предложил частичное решение этой ошибки, связанное с методом DBEngine.OpenDatabase (распространено из списка рассылки Microsoft NDA с ​​разрешения Шейна):

Причина, по которой вы получаете сообщение об ошибке при использовании DBEngine.OpenDatabase, заключается в том, что в Access есть логика, которая говорит, что если он не может открыть блокирующий файл, нужно вернуться к простому открытию файла для монопольного использования (вот почему люди получение ошибки, когда второй пользователь пытается открыть базу данных).

Эта логика не является частью команды OpenDatabase, поэтому обходной путь заключается в реализации логики, и если она завершается с ошибкой 3050, установите параметр Option (DBEngine.OpenDatabase("t:\foo.accdb", TRUE)) для явного запроса эксклюзивной блокировки, и в этом случае Ace не будет пытаться использовать файл блокировки, и вы не получите сообщение об ошибке.< /p>

Функция временной замены для DbEngine.OpenDatabase

Основываясь на электронном письме Шейна, я создал функцию, которая будет воспроизводить поведение msaccess.exe из VBA. К сожалению, я не смог воспроизвести ошибку в своей системе, поэтому у меня нет возможности убедиться, что эта функция действительно работает. Но, судя по объяснению Шейна, так и должно быть (с учетом ограничений в отношении однопользовательского доступа к файлу).

Пример кода приведен ниже. Если вы получаете эту ошибку и приведенный ниже код работает для вас, сообщите мне об этом в комментариях ниже. Спасибо!

Эпилог

Поскольку я выдвинул теорию о возможной внутренней борьбе в Microsoft в той же статье, в которой цитировал члена команды Access из списка адресов электронной почты NDA (подписанного соглашения о неразглашении), я хотел, чтобы было абсолютно ясно, что моя теория неверна. никоим образом не основано ни на чем, что я прочитал в этом списке рассылки.

Я просто предполагаю, что у группы безопасности Microsoft совершенно другой набор приоритетов, чем у одной из их команд разработчиков. Если вы когда-либо работали в какой-либо организации со специальной группой безопасности, вы должны знать, что это не какой-то большой скачок логики. Скорее, это просто типичное проявление компромисса между безопасностью и удобством почти во всех сферах нашей жизни.

Шейн проделывает фантастическую работу, предоставляя обновления для Access MVP. Я никогда не видел, чтобы он написал хоть одно пренебрежительное слово о Microsoft или о ком-либо из своих коллег. Если бы я навлек на Шейна неприятности, мне пришлось бы чертовски расплачиваться с другими MVP Access.

Кстати, Шейн, еще раз спасибо, что разрешили опубликовать выдержки из вашего письма!

Статьи, на которые ссылаются

Если вы начали получать сообщение об ошибке «Файл используется» или «Не удалось заблокировать файл» в декабре 2021 года, возможно, вы стали жертвой ошибки Access. Вот как это исправить.

Читайте также: