:: Архив конференции по VFP до 2005 года
Ошибка 109 или где живет "another user"
matod
Автор

Сообщений: 3062
Откуда: Иркутск
Дата регистрации: 31.10.2001
Этот вопрос уже обсуждался...

forum.foxclub.ru
forum.foxclub.ru
forum.foxclub.ru

тем не менее остается открытым. В моем случае проблема выглядит следующим образом:
форма с полями для редактирования записей в курсоре (представление, 5-я буферизация) и гридом (ReadOnly=.t.) в котором отображаются записи дочерних записей (второе представление с 5-й буферизацией). На форме поле для ввода значения и кнопочка "добавить" позволяющая добавлять записи в это второе представление.
В момент сохранения выполняется примерно след. код:
begin transaction
...
if !tableupdate( 'view1', .f., .f. )
* Обработка ошибки
endif

sele view2
scan all
...
replace fld1 with value1
if !tableupdate('view2', .f., .f. )
* Обработка ошибки
endif
endscan
end transaction
на строке replace выдается ошибка 109 Record is in use by another user. Сперва думал, что это действительно ошибка совместного доступа, но сегодня воспроизвел ошибку на своей машине, где кроме меня других users быть в принципе не может Причем ошибка не стабильная из 10 попыток 3 привели к ошибке, а остальные нет. Делал все практически одинаково.
В одном из обсуждений была выдвинута гипотеза, что это просто глюк (Равиль ). Я склоняюсь к мысли, что так оно и есть, но может кто встречал решение или знает причины? (VFP6SP5)
Ratings: 0 negative/0 positive
Re: Ошибка 109 или где живет "another user"
slacka

Сообщений: 49
Откуда: г.Муром
Дата регистрации: 11.02.2005
У меня было нечто подобное - оказалось связано с тем, что грид блокирует свои записи.
Решение:
Я явно ушел с текущей записи в сязанной таблице SKIPом, а уже потом обрабатывал SCANом.
Но вообще-то у меня был активен RELATION.




------------------
Ratings: 0 negative/0 positive
Re: Ошибка 109 или где живет "another user"
matod
Автор

Сообщений: 3062
Откуда: Иркутск
Дата регистрации: 31.10.2001
Да, были обсуждения про проблемы с Relation, рекомендовалось использовать View, что я и делаю. И grid не в фокусе.
Сейчас сделал шаманство - обрамил код сохранения парой .lockscreen = .t. ... .lockscreen = .f. и вместо tableupdate() для каждой записи сперва прогнал цикл замен, а уж потом tableupdate( 'view2', .t. ). ошибка исчезла ( раз 30 пробовал ). Потом вернул все как было и еще раз 30 попробовал... Тоже нет ошибки... Но уверенности нет никакой, что у клиента все будет работать также гладко.
Сложно ловить то чего не видишь .
Ratings: 0 negative/0 positive
Re: Ошибка 109 или где живет "another user"
PaulWist

Сообщений: 14601
Дата регистрации: 01.04.2004
Более правильнее , надо написать

...
begin transaction
if !tableupdate( .f., .f.,'view1' ) && получаем PK
* Обработка ошибки
ROLLBACK
Return
endif
sele view2
scan all
...
replace fld1 with value1
endscan
if !tableupdate(.T., .f.'view2') && с известным FK обновляем подчиненную таблицу.
* Обработка ошибки
ROLLBACK
Return
endif
end transaction




------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Ошибка 109 или где живет "another user"
matod
Автор

Сообщений: 3062
Откуда: Иркутск
Дата регистрации: 31.10.2001
2PaulWist

Цитата:
Более правильнее , надо написать
;)
дык. Просто у меня в реальном коде вместо комментариев стоит запись в лог, вывод сообщения пользователю, откат транзакции естественно и возврат в вызываемую процедуру. Это я упростил

Но собственно это никак не влияет. Ошибка происходит при replace в курсоре до сброса изменений, я смотрел отладчиком.
Ratings: 0 negative/0 positive


Извините, но у вас нет прав для того, чтобы оставлять сообщения в этом форуме.

On-line: 3 (Гостей: 3)

© 2000-2024 Fox Club 
Яндекс.Метрика