Sdscompany.ru

Компьютерный журнал
4 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

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

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

база — MS Access на сервере,
с ней работают проект на VB Studio (ASPX) и программа на delphi
delphi блокирует базу и использование базы совместно не получается, aspx говорит что файл занят
как это разрулить?

из delphi — ADOConnection1
Provider=MSDASQL.1;Persist Security Info=False;Data Source=daf1;Extended Properties=»DSN=daf;DBQ=C:MyWebFormd1.mdb;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;»

из VB — OdbcConnection1
MaxBufferSize=2048;FIL=MS Access;DSN=monit;PageTimeout=5;UID=admin;DriverId=25

ADOConnection.Mode ставлю cmShareDenyNone все равно пишет
ERROR [IM006] [Microsoft][Диспетчер драйверов ODBC] Ошибка SQLSetConnectAttr драйвера
ERROR [HY000] [Microsoft][Драйвер ODBC Microsoft Access] Невозможно использовать «(нет данных)»; файл уже используется.

те похоже Delphi устанавливает монопольный доступ
как его отменить?
подскажите, не встречался с таким
спасибо


sniknik © ( 2008-05-14 17:13 ) [1]

> ADOConnection.Mode ставлю cmShareDenyNone
сюда лезть следует в последнюю очередь, а лучше вообще не трогать

readonly/монопольность может быть прописан в DSN, может сам файл базы запрещено редактировать, а может нет возможности в папке с базой файл блокировок создать.
это надо сначала проверять.

> те похоже Delphi устанавливает монопольный доступ
только если так написано (специально/случайно), сам по себе никогда.


MishaLuk ( 2008-05-14 17:21 ) [2]

может нет возможности в папке с базой файл блокировок создать.

как так может быть?
пока не работает прогр на Delphi есть возможность, а когда работает нет?
вы хотите сказать что проект на aspx не может создать свой файл блокировок потому что его создала прога на Delphi?

вообще этот случай типичен или нет?
те в принципе все должно работать вместе ?
спасибо


sniknik © ( 2008-05-14 17:47 ) [3]

> как так может быть?
по разному может быть. что конкретно в твоем случае происходит ты не написал.

> те в принципе все должно работать вместе ?
и в принципе и без принципов, если написано без блокирования (по умолчанию так), и админ чегонибудь не то не запретил, то без проблем работает вместе (2, 3..5 коннектов, больше не рекомендуется, хотя может и больше (у меня както изза дурости менеджеров на аксесной базе 46 пользователей работало. недолго, как узнали поменяли на mssql)).


Palladin © ( 2008-05-14 17:48 ) [4]


> у меня както изза дурости менеджеров на аксесной базе 46
> пользователей работало

фигасе 🙂 и как? jet держал?


sniknik © ( 2008-05-14 19:33 ) [5]

не жаловались. 😉
конкретики не знаю, т.к. «у меня» это не совсем точно, точнее с моей программой у клиентов, узнали чисто случайно, гдето через пару месяцев они захотели добавить клиентов (место лицензируется) до 48-ми, и вот уже эта заявка попала ко мне.
сейчас кстати у них уже где то 80 мест, но уже с mssql-ем естественно.


sniknik © ( 2008-05-14 19:40 ) [6]

> эта заявка попала ко мне.
блин. опять не совсем точно. я не занимаюсь отгрузкой программ, просто я про это узнал, новый работник внедрения не знал как пришивается ключь на лицензии, и пришел почемуто ко мне за помощью. остальные вроде на выездах были. случайно в общем.


MishaLuk ( 2008-05-16 11:41 ) [7]

уже переписал все под Microsoft.Jet.OLEDB
и все равно
невозможно выполнение aspx страницы при запущенной программе на дельфи (обращаются к одной БД)

соединяюсь из VB (страница aspx) с БД через Microsoft.Jet.OLEDB соединение
Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database Locking Mode=1;Data Source=»C:MyWebFormd1.mdb»;Mode=Share Deny Write;Jet OLEDB:Engine Type=5;Provider=»Microsoft.Jet.OLEDB.4.0″;Jet OLEDB:System database=;Jet OLEDB_SFP=False;persist security info=False;Extended Properties=;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Create System Database=False;Jet OLEDB:Don»t Copy Locale on Compact=False;User ID=Admin;Jet OLEDB:Global Bulk Transactions=1

программа на дельфи
в дельфи строка подключения
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:MyWebFormd1.mdb;Mode=ReadWrite;Persist Security Info=False

невозможно выполнение aspx страницы при запущенной программе на дельфи
результат работы aspx страницы

Exception Details: System.Data.OleDb.OleDbException: Невозможно использовать «»; файл уже используется.
(хотя 2 копии программы на дельфи работают с одной БД , запщены одновременно)
как это решить?


Anatoly Podgoretsky © ( 2008-05-16 12:07 ) [8]

> MishaLuk (16.05.2008 11:41:07) [7]

Так у тебя в VB запрещено, и при чем тут тогда Дельфи


sniknik © ( 2008-05-16 12:38 ) [9]

> как это решить?
строку подключения в VB сделай такую же ка в дельфи.


sniknik © ( 2008-05-16 12:41 ) [10]

вернее вот так, в дельфи тоже поменяй
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:MyWebFormd1.mdb;Persist Security Info=False


MishaLuk ( 2008-05-16 12:48 ) [11]

поменял и в дельфи и в VB
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:MyWebFormd1.mdb;Persist Security Info=False

все равно при работающей дельфи aspx страница выдает
Exception Details: System.Data.OleDb.OleDbException: Невозможно использовать «»; файл уже используется.
дельфи закрываю и aspx работает 🙁


sniknik © ( 2008-05-16 13:02 ) [12]

> aspx работает 🙁
под каким юзером? у него есть права на папку с базой, он может менять файл блокировок?

запусти 2 копии своей страницы, без проги на делфи, вторая что выдает?


Anatoly Podgoretsky © ( 2008-05-16 13:12 ) [13]

Это часть сообещения таких баз конечно нет.


MishaLuk ( 2008-05-16 14:08 ) [14]


> запусти 2 копии своей страницы, без проги на делфи, вторая
> что выдает?

работают вместе две страницы нормально

> под каким юзером? у него есть права на папку с базой, он
> может менять файл блокировок?

пока это крутиться все на локальной машине под администратором компа +domain admins


> Это часть сообещения таких баз конечно нет.

извините мне кажеться если бы не было то не писала бы файл уже используется
и как дельфи может убивать БД?
спасибо


sniknik © ( 2008-05-16 14:44 ) [15]

> и как дельфи может убивать БД?
никак.
см. [1]
> только если так написано (специально/случайно), сам по себе никогда.


sniknik © ( 2008-05-16 14:54 ) [16]

> извините мне кажеться если бы не было то не писала бы файл уже используется
разобраться почему «» вместо имени файла нужно обязательно.


MishaLuk ( 2008-05-16 15:07 ) [17]

фантастика
перенес с компа где разрабатываю на комп где будет все эскплуатироваться
и все работает (дельфи с aspx)
разница- другие настройки доступа на папку и настройки IIS?

подскажите пожалуйста где можно толково прочитать про общий доступ и безопасность
очень это нервы мотает , меняю, а смысла до конца не понимаю
спасибо большое


MishaLuk ( 2008-05-16 15:28 ) [18]

надо было на паку с базой дать «все» полный доступ в «безопасность»

где про это почитать??
потому что встречал что даешь «все» полный доступ и перестает прога работать

WebComme.ru

[Ссылка] 80004005 «Источник данных не найден, и не указан драйвер, используемый по умолчанию»
[Ссылка] 80004005 «Не удается использовать «(нет данных)»; файл уже используется»
[Ссылка] 80004005 «Неудача при входе в систему()»
[Ссылка] 80004005 «В операции должен использоваться обновляемый запрос»
[Ссылка] 80040e07 «Несоответствие типов данных в выражении условий»
[Ссылка] 80040e10 «Слишком мало параметров»
[Ссылка] 80040e10 «Неправильное поле COUNT»
[Ссылка] 80040e14 «Синтаксическая ошибка в инструкции INSERT INTO»
[Ссылка] 80040e21 «Ошибка ODBC при вставке или обновлении»
[Ссылка] 800a0bcd «BOF или EOF имеют значение True»

Дополнительные сведения об ошибках 80004005 см. в статье «Руководство по устранению неполадок в случае появления ошибки 80004005 при работе со страницами ASP и компонентами MDAC» на веб-сайте корпорации Майкрософт по адресу: http://support.microsoft.com/kb/306518/ru .

Читать еще:  No access to the channel

[Ссылка] 80004005 «Источник данных не найден, и не указан драйвер, используемый по умолчанию»

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

80004005 — Ошибка SQLSetConnectAttr драйвера

80004005 — Общий сбой. Не удается открыть раздел реестра «DriverId»

Далее перечислены возможные причины и способы решения.

Странице не удается найти имя DSN. Убедитесь, что DSN было создано и на веб-сервере, и на локальном компьютере.

Возможно, имя DSN задано как DSN пользователя, а не DSN системы. Удалите DSN пользователя и создайте вместо него DSN системы.

Если используется приложение Microsoft Access, файл базы данных (MDB-файл) может быть заблокирован. Причина блокирования может заключаться в том, что DSN с другим именем уже использует базу данных. Откройте проводник, в папке, в которой расположен файл базы данных (MDB-файл), найдите файл блокировки (LDB-файл) и удалите его. Если другое имя DSN указывает на один и тот же файл базы данных, удалите это имя, чтобы избежать ошибок в дальнейшем. Перезагрузите компьютер после внесения изменений.

[Ссылка] 80004005 «Не удается использовать «(нет данных)»; файл уже используется»

Эта ошибка возникает при использовании базы данных Microsoft Access и попытке просмотра динамической страницы в веб-браузере или интерактивном представлении. Еще один вариант текста этого сообщения об ошибке: «80004005 — Обработчик баз данных Microsoft Jet не может открыть файл (нет данных)».

Возможная причина — неправильно установлены разрешения. Далее перечислены несколько конкретных причин и способов решения.

Возможно, учетная запись, используемая сервером IIS (как правило, это учетная запись IUSR), не имеет нужных разрешений Windows для доступа к файловой базе данных или папке, содержащей эту базу данных. Проверьте разрешения учетной записи IIS (IUSR) в диспетчере пользователей.

Пользователь может не иметь разрешения на создание или удаление временных файлов. Проверьте разрешения для файла и папки. Убедитесь в наличии разрешения на создание или удаление временных файлов. Временные файлы обычно создаются в той же папке, в которой содержится база данных, но они также могут создаваться и в других папках, например «/Winnt».

В Windows 2000 может потребоваться изменить значение времени ожидания для DSN базы данных Access. Чтобы изменить это значение, выберите команды «Пуск» > «Настройка» > «Панель управления» > «Администрирование» > «Источники данных» (ODBC). Откройте вкладку «Система», выделите правильное имя DSN и нажмите кнопку «Настройка». Нажмите кнопку «Параметры» и в поле «Время ожидания страницы» введите значение 5000 .

Если проблемы так и не удалось решить, см. следующие статьи базы знаний Майкрософт:

PRB: «Microsoft Access Database Connectivity Fails in Active Server Pages» по адресу: http://support.microsoft.com/default.aspx?scid=kb;en-us;Q253604 .

[Ссылка] 80004005 «Неудача при входе в систему()»

Эта ошибка возникает при использовании сервера Microsoft SQL Server и попытке просмотра динамической страницы в веб-браузере или интерактивном представлении.

Эта ошибка создается сервером SQL Server, если он не принимает либо не распознает учетную запись или введенный пароль (если используется стандартная защита), или же если учетная запись Windows не соответствует учетной записи SQL (если используется встроенная система безопасности).

Далее перечислены возможные решения.

Если используется стандартная защита, причиной ошибки может быть неправильные имя учетной записи и пароль. Попробуйте воспользоваться учетной записью и паролем системного администратора (UID= «sa» без пароля), которые должны были быть определены в строке подключения. (Имена DSN не хранят имена и пароли пользователей.)

Если используется встроенная система безопасности, проверьте учетную запись Windows, обращающуюся к странице, и найдите соответствующую ей учетную запись SQL (при наличии).

Сервер SQL Server не допускает использование нижних подчеркиваний в именах учетных записей SQL. Если вручную сопоставить учетную запись Windows «IUSR_имя_компьютера» учетной записи SQL с таким же именем, эта учетная запись не будет принята сервером. Учетную запись, в которой использовано нижнее подчеркивание, нужно сопоставлять с именем учетной записи на сервере SQL, в котором нижнее подчеркивание не используется.

[Ссылка] 80004005 «В операции должен использоваться обновляемый запрос»

Данная ошибка возникает, когда событие обновляет набор записей или вставляет в него данные.

Далее перечислены возможные причины и способы решения.

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

Разрешения для самого файла базы данных не включают действующих полных прав на чтение/запись.

Возможно, база данных не расположена в каталоге Inetpub/wwwroot. Для обновления базы данных требуется, чтобы она располагалась в каталоге wwwroot. В противном случае будут доступны только просмотр и поиск данных, но не их обновление.

Набор записей основан на необновляемом запросе. Хорошими примерами необновляемых запросов в базе данных являются соединения. Преобразуйте необновляемые запросы в обновляемые.

Дополнительные сведения об этой ошибке см. в статье базы знаний Майкрософт «PRB: ASP ‘Error The Query Is Not Updateable’ When You Update Table Record» по адресу: http://support.microsoft.com/default.aspx?scid=kb;en-us;Q174640 .

[Ссылка] 80040e07 «Несоответствие типов данных в выражении условий»

Данная ошибка возникает при попытке сервера обработать страницу, содержащую серверное поведение «Вставить запись» или «Обновить запись», которое пытается задать пустую строку («») в качестве значения для столбца «Дата/время» в базе данных Microsoft Access.

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

[Ссылка] 80040e10 «Слишком мало параметров»

Данная ошибка возникает в том случае, если столбец, указанный в запросе SQL, отсутствует в таблице базы данных. Проверьте имена столбцов в таблице базы данных на соответствие столбцам, указанным в запросе SQL. Зачастую причиной этой ошибки является опечатка.

[Ссылка] 80040e10 «Неправильное поле COUNT»

Данная ошибка возникает при просмотре страницы, содержащей серверное поведение «Вставить запись», в веб-браузере и попытке с ее помощью вставить запись в базу данных Microsoft Access.

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

Откройте систему базы данных и удалите вопросительный знак (?). из имен полей, а затем обновите на странице варианты поведения сервера, которые ссылаются на это поле.

[Ссылка] 80040e14 «Синтаксическая ошибка в инструкции INSERT INTO»

Данная ошибка возникает при попытке сервера обработать страницу, содержащую серверное поведение «Вставить запись».

Как правило, эта ошибка появляется вследствие одной или нескольких описанных ниже проблем с именами полей, объектов или переменных в базе данных.

В качестве имени использовано зарезервированное слово. Большинство баз данных имеют набор зарезервированных слов. Например, слово «date» является зарезервированным и, следовательно, не может быть использовано в именах столбцов базы данных.

Читать еще:  Block internet access

В имени использованы специальные символы. Вот несколько примеров специальных символов:

Имя содержит пробел.

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

Чтобы решить проблему, не используйте в именах столбцов базы данных зарезервированные слова, например «date», «name», «select», «select» и «level». Помимо этого, исключите пробелы и специальные символы.

Списки зарезервированных слов для наиболее распространенных систем баз данных см. на следующих веб-страницах.

[Ссылка] 80040e21 «Ошибка ODBC при вставке или обновлении»

Данная ошибка возникает при попытке сервера обработать страницу, содержащую серверное поведение «Обновить запись» или «Вставить запись». Базе данных не удается обработать операцию обновления или вставки, которую пытается выполнить серверное поведение.

Далее перечислены возможные причины и способы решения.

Серверное поведение пытается обновить поле автонумерации в таблице базы данных или вставить запись в это поле. Так как поля автонумерации заполняются автоматически самой системой базы данных, внешние попытки заполнить эти поля значениями приводят к ошибкам.

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

[Ссылка] 800a0bcd «BOF или EOF имеют значение True»

Эта ошибка возникает при попытке просмотра динамической страницы в веб-браузере или интерактивном представлении.

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

Выделите динамическое содержимое на странице.

На панели «Поведение сервера» нажмите кнопку со знаком «Плюс» (+) и выберите пункты «Показать область» > «Показать область, если набор записей не пустой».

Выберите набор записей, из которого берется динамическое содержимое, и нажмите кнопку «ОК».

Повторите шаги 1–3 для каждого элемента динамического содержимого на странице.

Схемы блокировок в Базах Данных

При работе с Базами Данных в многопользовательском режиме возникают ситуации, когда необходимо ограничить число обращающихся пользователей к данным. Это делается для того, чтобы предотвратить одновременное обновление одной и той же записи, при глобальном обновленим данных или при техническом обслуживания самой Базы Данных.

Процессор Баз Данных обеспечивает три уровня блокировок:

  • Блокировка Базы Данных. На этом уровне блокировки к Базе Данных может обращаться только один пользователь. Такой уровень блокировки применяется для глобального изменения или обновления данных или при техническом обслуживании Базы Данных- сжатии;
  • Блокировка Таблицы. На этом уровне блокировки к таблице может обращаться только один пользователь. Такой уровень блокировки применяется в тех случаях, когда необходимо обработать сразу несколько записей таблицы.
  • Блокировка страницы. На этом уровне к заблокированной странице может обращаться только один пользователь. Это самый нижний уровень блокировки.

Блокировка Базы Данных

Блокиривка на уровне Базы Данных осуществляется присвоением свойству Exclusive, при открытии БД, значения True. При использовании вами элемента управления Data, в его свойствах установите Exclusive = True . Если же вы используете объект DAO, то при присвоении значения объекту db установите в True значение второго параметра метода OpenDatabase:

Set db = DBEngine.OpenDatabase(“C:Biblio.mdb”, True)

Когда База Данных заблокирована таким образом, тодругие пользователи не смогут ее открыть. При попытке обращения к заблокированной Базе Данных вы получите сообщение:

“Couldn’t use ‘C:Biblio.mdb’; file already in use.”

“Невозможно использовать ‘C:Biblio.mdb’; файл уже используется”

Одновременно с этим генерируется перехватываемая ошибка – 3045, используя которую вы можете завершить программу, которая обращается к заблокированной Базе Данных, т.к. после возникновения ошибки программа продолжает выполняться, хотя База Данных так и не была открыта.

При использовании элемента управления Data в обработчик события Error вставляется следующий код:

Private Sub Data1_Error(DataErr As Integer, Response As Integer)

If Err = 3045 Then

MsgBox «Доступ к Базе Данных закрыт. Повторите запрос через несколько минут.» & _ ,vbCritical, «Data_Error»

При использовании объекта DAO в той процедуре, где будет стоять код открытия Базы Данных, вставляется обработчик ошибок:

On Error Goto ErrHandler

‘Здесь вставляется код открытия БД и если возникает ошибка – 3045, то она
‘перехватывается и обрабатывается

If Err = 3045 Then

MsgBox «Доступ к Базе Данных закрыт. Повторите запрос черезнесколько минут.» & _ ,vbCritical, «Data_Error»

Блокировка на уровне таблицы применяется при глобальных изменениях в отдельно взятой таблице. После того как вы проведете ваши изменения и закроете эту таблицу, толкко тогда к ней получат доступ другие пользователи. . При использовании вами элемента управления Data, в его свойствах установите Exclusive = False, для того, чтобы пользователи имели доступ к Базе Данных, а свойствu Option присвойте значение 3. Это приведет к томы, что выбранная вами таблица (к примеру Authors) будет открыта с параметрами DenyWrite(1) и DenyRead(2), что запрещает другим пользователям открывать эту таблицу во время действия вашей программы. При попытке обращения к заблокированной таблице вы получите сообщение:

“Couldn’t lock table ‘Authors’;currently in use by user ‘admin’ on machine ‘USER-0000011660’ “

“Невозможно зблокировать таблицу ‘Authors’ , т.к. она используется администратором машины ‘USER-0000011660’ “

Одновременно с этим генерируется перехватываемая ошибка – 3265, используя которую вы можете завершить программу, которая обращается к заблокированной таблице, т.к. после возникновения ошибки программа продолжает выполняться, хотя таблица так и не была открыта. При использовании элемента управления Data в обработчик события Error вставляется следующий код, но предварительно дополняя предыдущий:

Private Sub Data1_Error(DataErr As Integer, Response As Integer)

Select Case Err

MsgBox «Доступ к Базе Данных закрыт. Повторите запрос черезнесколько минут.» & _ ,vbCritical, «Data_Error»

MsgBox «Доступ к таблице закрыт. Повторите запрос через несколько минут.» & _ ,vbCritical, «Data_Error»

Если же вы используете объект DAO, то при присвоении значения объекту db установите в False значение второго параметра метода OpenDatabase:

Set db = DBEngine.OpenDatabase(“C:Biblio.mdb”, False)

а, при присвоении значении объекту Recordset:

Set rs = db.OpenRecordset(“Authors”, dbOpenTable, dbDenyRead + dbDenyWrite)

Для перехвата возникающей ошибки опять ставте код:

On Error Goto ErrHandler

‘Здесь вставляется код открытия таблицы и если возникает ошибка – 3265, то она
‘перехватывается и обрабатывается

If Err = 3265 Then

MsgBox «Доступ к таблице закрыт. Повторите запрос черезнесколько минут.» & _
,vbCritical, «Data_Error»

Здесь указан только обработчик ошибки открытия блокированной таблицы, т.к. Базу Данных вы можете открыть в другой процедуре , в отличае от элемента Data.

Внимание! Если вы откроете приложении Access в то время, когда у вас стоит блокировка таблицы (во время работы вашей программы), то данная таблица открывается без извещения вас диалоговым окном о том, что таблица заблокирована. Но, при всем желании вы не сможете сделать запись или произвести редактирование какой либо записи.

Самым нижнем уровнем блокировки является уровень таблицы. Процессор Microsoft Jet автоматически устанавливает блокировку страницы и не может контролироваться вашей программой. Страница данных может содержатьнесколько записей, размер его равен 26 кб. Блокировка страницы означает блокировкувсех записей, находящейся на этой странице. Если длина записи – 512 байтов, то будет заблокированно 4 записи, а если 50 байтов то 40 записей. Точное число записей нельзя заранее ни определить ни задать, т.к. таблица может содержать удаленные записи (которые удаляются только во время уплотнения). Но, не смотря на это объект Recordset имеет свойство LockEdits, которое позволяетуправлять страничной блокировкой из программы.

Читать еще:  Access транскрипция на русском

Блокировка на уровне таблицы имеетдва режима – пессимистический (LockEdits ю True) и оптимистический (LockEdits = False). По умолчанию устанавливается пессимистическая блокировка.

Пессимистическая блокировка блокирует страницу при вызове методов Edit и AddNew, и остается заблокированной до тех пор пока не будетвыполнен метод Update или CancelUpdate. В течении всего времени ни одна программа не имеет доступа к забликированной странице.

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

Оптимистическая блокировка блокирует страницу только при вызове метода Update. Это означает, что пользователь вызывает методы Edit и AddNew, производит действия с дсанными, и только в момент сохранения обновления процессор Microsoft Jet пытается заблокировать страницу. Если все проходит успешно, то запись попадает в таблицу, но если обнаружится, что эта запись уже была отредактированна, то обновление отменяется и пользователь получаетсообщение о том, что данные были уже кем-то изменены.

Преимущества. Страница блокируется на минимально возвожное время, тен самым уменьшаетсячисло сообщений о блокировках.
Недостатки.
Может привести к ошибкам блокировки при одновременном редактировании записи двумя пользователями, когда они будут проводить обновление.

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


    для элемента Data — Data1.Recordset.LockEdits = True (или False);

для объекта DAO – rs.LockEdits = True (или False);

При работе с пессиместической и оптимистической блокировкой используется вызов Idle. Этот метод приостанавливает выполнение программы на Visual Basic на время обнавления динамических и статических наборов, которые были открыты этой программой. Вызов этого метода гарантирует, что в вашу программу попадут самые последние изменения в наборе данных.

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

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

Вопрос

MS Office 2010 Pro Plus x86. 14.0.66123.5001.

Файл открывается с сетевого диска. Файл ни у кого не открыт, доступ в папку имеет только один пользователь.

Кто нибудь сталкивался с подобным?

Ответы

На файловом сервере стоит kaspersky endpoint 8. Отключать антивирус либо добавлять в доверенною зону не спасает.

По поводу пересоздания файла — отличная мысль! Однако, как можно перенести данные из одного фала в другой, не перенося лишние метаданные? Такой вариант возможен или это маловероятно?

Есть ли смысл использовать libre office для чистоты эксперимента?

в процессе обработки данных файлов через open /libre/ office — вылезла куча косяков. Косяки исправились, файлы стали открываться без ошибок.

  • Изменено NEX Vi 14 декабря 2012 г. 8:53 решено.
  • Помечено в качестве ответа NEX Vi 14 декабря 2012 г. 8:53

Все ответы

Залогиньтесь на сервер, на котором размещена расшаренная папка с данным файлом, и посмотрите кем он открыт. Это можно сделать либо:

1. Через «Computer Managment» -> «Shared Folders» -> «Open files».

2. С помощью команды openfiles в командной строке.

  • Изменено Evgenii Alekseev 12 декабря 2012 г. 10:58
  • Предложено в качестве ответа Iluffka 8 мая 2014 г. 6:55

Залогиньтесь на сервер, на котором размещена расшаренная папка с данным файлом, и посмотрите кем он открыт. Это можно сделать либо:

1. Через «Computer Managment» -> «Shared Folders» -> «Open files».

2. С помощью команды openfiles в командной строке.

Увы, пройденный вариант. В момент ошибки файл ни к кого не открыт, для проверки данного факта был специально настроен аудит штатными виндовыми средствами. Гостевой доступ запрещен. Если бы файл был открыт кем либо из других пользователей, вопрос бы не возник, а был бы организован общий доступ к этому файлу, при необходимости.

MS Access — «file already in use» error on split database

I have a split database in MS Access 2010 on Windows 7.

The back end is on a networked drive in a folder that only some people have write permissions; everyone has read permissions.

Every user has their own copy of the front end stored on their local machine.

Both BE & FE are set to open as shared, not exclusive, for all users.

If a user with read-only permissions tries to get on while another user with read-only permissions is on, they can get on fine.

If a user with read-only permissions tries to get on while a user with write permissions has it open, they get a message saying » file already in use» and they can’t open the database.

If a user with write permissions tries to open the database while a user with read-only permissions has it open, it opens as read-only for this user as well.

Do ALL users of a split database need full access? I really don’t want everyone to be able to make edits. Anything I can do to get this to work?

Создан 18 окт. 12 2012-10-18 16:02:48 maneesha

When you talk about «permissions», are you talking about Windows File/Folder permissions? If yes, I believe everyone will have to have Read and Write permissions to the folder (and it’s files) that stores your database. You need to implement security/permissions a different way or move your data to SQL Server which allows for more control over security/permissions. – HK1 18 окт. 12 2012-10-18 16:23:15

yes, I do mean Windows permissions. – maneesha 18 окт. 12 2012-10-18 16:37:44

1 ответ

The issue has certainly something to do with the fact that the read-only clients can’t manage the .laccdb lock file since they don’t have write permission to the shared folder in which the database file resides.

When the database is opened in shared mode, each client will create or update the lock file.
It’s likely that since read-only clients can’t create the lock file, they fall-back to believing they are in exclusive mode.
Once a full-access client creates the lock file, any subsequent client will attempt to use it, and read-only clients will fail since they can’t update the lock.

Some documentation regarding lock files:Introduction to .ldb files

If you want to solve your issue, you must grant full access to the folder for all clients, but you can restrict access to the .accdb database file itself to the group of clients that are not supposed to be able to modify data in it.

Alternatively, if you are not using Access 2007/2010 features, you can revert to using an older .mdb file as a backend and use their old-style group security features.

Ultimately, if you really want to control access, you may need to roll-you-own security scheme from within the client, forcing users to log-in (or use their the identity of their machine) and update your forms’ data edit properties depending on what that particular user/machine is allowed to do.

Ссылка на основную публикацию
Adblock
detector