Никак не могу отловить ошибку 108.File is in use by another user. (Файл используется другим пользователем) | |
---|---|
ZenTigra Автор Сообщений: 514 Дата регистрации: 03.12.2004 |
Никак не могу отловить ошибку 108.File is in use by another user. (Файл используется другим пользователем)
Она возникает при открытии таблицы. Ошибка не частая, за год максимум два раза была, но и это нехорошо... Программа работает в сети, и 100% какой то пользователь блокирует заголовок этой таблицы, пересмотрел код на наличие Транзакций-ничего криминального не нашел. В программе запись из этой таблицы редактируется напрямую, без буферизации, при открытии на редактирование происходит ее блокировка командой LOCK() и по идее все.. Ни буферизация. ни транзакций для этой записи нет (не нужно) Пересмотреть весь код, включить логирование, нереально (так как ошибка не очень частая), посоветуете, какие команды могут блокировать таблицу, буду искать поиском, может что и накопаю... |
Re: Никак не могу отловить ошибку 108.File is in use by another user. (Файл используется другим пользователем) | |
---|---|
medstrах Сообщений: 1810 Дата регистрации: 10.06.2019 |
Я думал, что Дзэнтигра - это тетка
Жаль |
Re: Никак не могу отловить ошибку 108.File is in use by another user. (Файл используется другим пользователем) | |
---|---|
ZenTigra Автор Сообщений: 514 Дата регистрации: 03.12.2004 |
Это простой офисный работник, который временами балуется VFP (для облегчения работы), а еще очень любить мотоциклы и самолеты, но на второе не хватает денег
А ник из лохматых 2000, и здесь поменять его уже нельзя, думал еще и аватарку сменить, на красивую блондинку, но все руки не доходят... Исправлено 1 раз(а). Последнее : ZenTigra, 21.06.19 10:03 |
Re: Никак не могу отловить ошибку 108.File is in use by another user. (Файл используется другим пользователем) | |
---|---|
medstrах Сообщений: 1810 Дата регистрации: 10.06.2019 |
Ладно, не оправдывайся, просто вычеркиваем тебя из списка кандидатов на чорную софу
|
Re: Никак не могу отловить ошибку 108.File is in use by another user. (Файл используется другим пользователем) | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
> В программе запись из этой таблицы редактируется напрямую, без буферизации, при открытии на редактирование происходит ее блокировка командой LOCK() и по идее все..
UNLOCK после редактирования делается? Таблица открывается в каком режиме (SHARED, EXCLUSIVE, какие общие SET-настройки) ? |
Re: Никак не могу отловить ошибку 108.File is in use by another user. (Файл используется другим пользователем) | |
---|---|
Taran Сообщений: 13626 Откуда: Красноярск Дата регистрации: 16.01.2008 |
Раньше аналогичные вопросы возникали пару раз за год.
Антивирус. |
Re: Никак не могу отловить ошибку 108.File is in use by another user. (Файл используется другим пользователем) | |
---|---|
ZenTigra Автор Сообщений: 514 Дата регистрации: 03.12.2004 |
У меня тоже такое подозрение было, на жаль файла - отчета о предыдущей ошибке не сохранил, но кажись тогда была другая таблица...
|
Re: Никак не могу отловить ошибку 108.File is in use by another user. (Файл используется другим пользователем) | |
---|---|
ZenTigra Автор Сообщений: 514 Дата регистрации: 03.12.2004 |
Таблицы открываются SHARED UNLOCK -делается при закрытии формы редактирования Вот часть настроек
PS.В программу пытались зайти как минимум полторы минуты, через 10мин, когда я подошел уже все работало... Исправлено 1 раз(а). Последнее : ZenTigra, 21.06.19 10:52 |
Re: Никак не могу отловить ошибку 108.File is in use by another user. (Файл используется другим пользователем) | |
---|---|
medstrах Сообщений: 1810 Дата регистрации: 10.06.2019 |
А SET GOMOEXILE где?
|
Re: Никак не могу отловить ошибку 108.File is in use by another user. (Файл используется другим пользователем) | |
---|---|
ZenTigra Автор Сообщений: 514 Дата регистрации: 03.12.2004 |
Порылся по архивам, и нашел такую же ошибку, но совсем в другого пользователя, и в другом месте программы и иной командой, но с той же таблицей.
|
Re: Никак не могу отловить ошибку 108.File is in use by another user. (Файл используется другим пользователем) | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Вполне логично что если делается ручной LOCK, потом юзер ковыряется в носу рассматривая форму редактрирования, и через часок соизволит её закрыть - при чём и выполнится UNLOCK, конфликты связанные с блокировками просто таки неизбежны.
В нормальной многопользовательской системе НЕ используют ручных блокировок (есть редкие исключения, и они НЕ связаны с формами ввода данных) - блокироваться запись (или залоловок таблицы для операций вставки) должна на микросекунды - и только в момент когда идёт запись данных (а не ввод инфы в поля на форме). А конфликты у других пользователей разрешаются настройкой SET REPROCESS - т.е. повторными попытками выполнить операцию не удавшуюся из за блокировки. ------------------ WBR, Igor |
Re: Никак не могу отловить ошибку 108.File is in use by another user. (Файл используется другим пользователем) | |
---|---|
ZenTigra Автор Сообщений: 514 Дата регистрации: 03.12.2004 |
Ну наставьте меня на путь истинный. Приведу упрощенную задачу (СИЛЬНО УПРОЩЕННУЮ!) [attachment 31197 FoxPro4.png] Есть 4 таблицы table1 которая имеет связь с table1a table2 которая имеет связь с table2a в свою очередь таблица table2a связана с table1a Поля key - это уникальные ключи date - дата документа text - описание name - наименование товара quantity - количество товара price - цена товара suma - сума за товар/сумма по всей накладной balance - остаток товара (table1a.quantity-table2a.quantity), для быстрой выборки остатка товара Так вот, пользователь открывает на редактирование таблицу table2 (или создает новую запись), по идее никто не должен в этот момент также открыть на редактирование эту накладную (просмотр доступен), КАК в этом случае запретить другим пользователям редактировать эту накладную, или докажите мне, что необходимо в такой ситуации РАЗРЕШАТЬ нескольким пользователям редактировать эту накладную. Я не говорю про блокировку записей в таблице товаров table1a и table2a, она кратковременна и только в момент записи (+ есть проверка, на возможность изменения данных) Естественно для блокировки записи в table2 я использую команду
PS.Даже открыв несколько накладных (и блокируя записи), параллельно делая в них изменения, я не смог с генерировать ошибку 108.File is in use by another user. (Файл используется другим пользователем). Я немножко не так спросил открывая этот пост, вопрос нужно было сформировать так: Какие команды блокируют таблицу кроме BEGIN TRANSACTION и =CURSORSETPROP("Buffering",4.. (поиском в программе я постараюсь их найти, и решить целесообразность их использования) Исправлено 1 раз(а). Последнее : ZenTigra, 25.06.19 10:34 |
Re: Никак не могу отловить ошибку 108.File is in use by another user. (Файл используется другим пользователем) | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
А может забить на поиск строки программы, которая зазря блокирует или не разблокирует, а обернуть команду USE (или какая другая) в TRY..ENDTRY, и сделать повтор, через каждую секунду, раз 10, или 100, с вывеской сообщения, с возможностью отказаться от ожидания открытия, с записью датывремени в лог чтобы потом посмотреть...
|
Re: Никак не могу отловить ошибку 108.File is in use by another user. (Файл используется другим пользователем) | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Думаю что это не имеет смысла. И так доживёте... Зачем запрещать? Не вижу смысла тратить время на объяснение банальных вещей. Запись это не туалет, чтобы пока кто-то один там сидит больше никто не мог войти В том что запись блокируется на всё время пока открыта накладная. А это время никак не ограничено - т.е. по сути она может быть заблокирована хоть на год. Если ОЧЕНЬ надо по бизнес-требованиям ограничивать доступ к записям "уже открытым пользователем А", то это реализуют при помощи явных полей-флагов, в самом тупом случае просто логическое поле "занято", в более продвинутых способах - набором полей типа "юзер_заблокировавший_запись, дата_блокировки" можно ещё расширять их перчень. Т.е. открываем форму - прописываем в запись эти флаги - закрываем форму - очищаем флаги. Ну и плюс администратор/менеджер имеет возможность вручную "разблокировать" запись, если к примеру программа поломалась, или пользователь, подлец этакий, ушёл в отпуск не закрыв форму. 108 ошибка возникает при блокировке всего файла целиком (а не отдельной записи), или же заголовка файла, при том что к примеру команда открытия USE (или любое неявное открытие таблицы) тоже блокирует заголовок, пытаясь проверить соответствие числа записей в dbf счётчику в его заголовке. Самое простое - заблокировать ОДНУ (любую) запись в одной сессии (хоть явным lock, хоть неявно при пессимистической буферизации открыть в бровз-окне и изменить любое поле, не покидая потом изменённую запись) и попробовать в другой сессии исполнить REPLACE неважно_что FOR любое_условие_даже_то_под_которое_не_подходит_ни_одна_запись - получим именно 108 ошибку. Раздел хелпа Locking Data Хотя там далеко не всё подробно описано, и надо вдумчиво читать связанные разделы... ------------------ WBR, Igor |
Re: Никак не могу отловить ошибку 108.File is in use by another user. (Файл используется другим пользователем) | |
---|---|
ZenTigra Автор Сообщений: 514 Дата регистрации: 03.12.2004 |
А, говорили что и так доживу, а помогаете Спасибо, всем за помощь. Я нашел проблему, это команда FLOCK() (когда то написал, и забыл про это), теперь ломаю голову, как ее в этом месте не использовать. Задача, необходимо заблокировать ВСЕМ пользователям возможность добавлять и редактировать записи в одной таблице, Для этого я использовал команду FLOCK(), но я не подумал, про то, что при этом запрещается и открытие этой таблицы. Исправлено 3 раз(а). Последнее : ZenTigra, 04.07.19 15:49 |
Re: Никак не могу отловить ошибку 108.File is in use by another user. (Файл используется другим пользователем) | |
---|---|
Аспид Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Совершенно без понятия, как работают блокировки в фоксе.
MS SQL. Надо не дать доступ к записи. (из программы, фактически ничего не блокируется.) Есть список работающих юзеров. Есть таблица, куда пишется кто, что и когда заблокировал. В MS легко определяется, подсоединен ли еще этот юзер, если данный сеанс отвалился, значит запись свободна, иначе, выдаю сообщение, тому кто пытается ее открыть, "Занято тем то, тогда то". Вкратце так. Кажется проще, в таблице прописывать в спец поле, кто и когда занял, но тут проблема с отвалившимися... Как их убивать? |
Re: Никак не могу отловить ошибку 108.File is in use by another user. (Файл используется другим пользователем) | |
---|---|
PaulWist Сообщений: 14625 Дата регистрации: 01.04.2004 |
Доморощенный set_applock, про который знает только твое приложение.
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Никак не могу отловить ошибку 108.File is in use by another user. (Файл используется другим пользователем) | |
---|---|
Rifat Сообщений: 32 Дата регистрации: 06.02.2012 |
Извечная проблема многопользовательского доступа к таблицам в БД вполне успешно решается в фоксе буферизацией и транзакциями. В очень длительном проекте решения клиент-серверного приложения никогда не использовал всякие LOCK, всегда работает правило - кто последний, тот и прав.
|
Re: Никак не могу отловить ошибку 108.File is in use by another user. (Файл используется другим пользователем) | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Назачем? Тупое требование... Не запрещается. Читать про SET TABLEVALIDATE. ------------------ WBR, Igor |
Re: Никак не могу отловить ошибку 108.File is in use by another user. (Файл используется другим пользователем) | |
---|---|
ZenTigra Автор Сообщений: 514 Дата регистрации: 03.12.2004 |
В конце смены, происходит закрытие дня, и ни какие уговоры, чтоб не пытались добавлять/редактировать записи в этот момент, не действуют. А так радикально, заблокировать всем...
Если ты была девочка, я б тебя расцеловал А так, только большое спасибо! PS.Думаю SET TABLEVALIDATE TO 4 - спасет меня |
© 2000-2024 Fox Club  |