powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / МНОГОПОЛЬЗОВАТЕЛЬСКИЕ ПРИЛОЖЕНИЯ И КУРСОР АДАПТЕР
6 сообщений из 6, страница 1 из 1
МНОГОПОЛЬЗОВАТЕЛЬСКИЕ ПРИЛОЖЕНИЯ И КУРСОР АДАПТЕР
    #32580324
sar99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВСЕМ ДОБРЫЙ ДЕНЬ!
ЕСТЬ ПРОБЛЕММА ПРИ МНОГОПОЛЬЗОВАТЕЛЬСКОЙ РАБОТЕ C INTERBASE
(И НАВЕРНОЕ С ДРУГИМИ БАЗАМИ!!!)
C ПРИМЕНЕНИЕМ АДАПТЕРА КУРСОРА.
КОГДА В VFP6 РАБОТАЕШЬ С ПРОВАИДЕРОМ ПРИ КОРРЕКТИРОВКЕ
ЗАПИСИ ОДНИМ ПОЛЬЗОВАТЕЛЕМ, ДРУГОЙ (ЕСЛИ ОН ЗАГРУЗИЛ
RECORDSET ДО ИЗМЕНЕНИЯ ПЕРВЫМ ПОЛЬЗОВАТЕЛЕМ) МОЖЕТ
ПРОСТО ОПРЕДЕЛИТЬ ЧТО ЗАПИСЬ УЖЕ ОТКОРРЕКТИРОВАНА:

VERR=0
ON ERROR VERR=1
RECORDSET.UPDATE
ON ERROR
IF VERR=1
* СООБЩЕНИЕ
RECORDSET.REQUERY
ENDIF

ЕСЛИ ЖЕ ВТОРОЙ КЛИЕНТ ЗАГРУЗИЛ RECORDSET С ИСПОЛЬЗОВАНИЕМ
КУРСОРА АДАПТЕРА ТО СИСТЕМА СПОКОЙНО ОБНОВЛЯЕТ ЕГО.
КОНЕЧНО МОЖНО ПЕРЕД КАЖДЫМ ОБНОВЛЕНИЕМ ДЕЛАТЬ
REFRESH , НО ЭТО ГЛУПОСТЬ!
КАК ВТОРОМУ КЛИЕНТУ ПЕРЕХВАТИТЬ СОСТОЯНИЕ
(В АДО ЕСТЬ ХОРОШИЙ МЕТОД RESYNC - В КУРСОРЕ АДАПТОРЕ НЕТ)
...
Рейтинг: 0 / 0
МНОГОПОЛЬЗОВАТЕЛЬСКИЕ ПРИЛОЖЕНИЯ И КУРСОР АДАПТЕР
    #32583222
sar99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПОСМОТРЕЛ HELP БОЛЕЕ ВНИМАТЕЛЬНО!

КУРСОР АДАПТЕР АВТОМАТИЧЕСКИ ДЛЯ КУРСОРА
УСТАНАВЛИВАЕТ ОПТИМИСТИЧЕСКУЮ БУФЕРИЗАЦИЮ СТРОК

НАВЕРНОЕ ДЕЛО В ТОМ ЧТО НАДО ПОСЛЕ REPL
ИСПОЛЬЗОВАТЬ
VERR=0
ON ERROR VERR=1
=TABLEUPDATE(.T.,.F.)
IF VERR=1
*СООБЩЕНИЕ О ТОМ ЧТО ЗАПИСЬ ИЗМЕНЕНА ДРУГИМ ПОЛЬЗОВАТЕЛЕМ
=TABLEREVERT()
ENDIF
...
Рейтинг: 0 / 0
МНОГОПОЛЬЗОВАТЕЛЬСКИЕ ПРИЛОЖЕНИЯ И КУРСОР АДАПТЕР
    #32583399
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Команда TableUpdate() не генерит сообщение об ошибке. Она просто возвращает значение .F. Чтобы уточнить причину отказа в обновлении надо использовать функцию AERROR() примерно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
IF TableUpdate()=.F.
	LOCAL laError( 1 , 1 ), lcMessageText 
	=AERROR(laErrors)
	lcMessageText = 'Произошла ошибка № '+LTRIM(STR(laError[ 1 , 5 ]))+chr( 13 )+;
			RTRIM(SubStr(laError[ 1 , 3 ],RAT("]",laError[ 1 , 3 ])+ 1 ))+chr( 13 )+;
			'Обратитесь к администратору сервера или разработчику программы.'
	MessageBox(m.lcMessageText, 0 + 48 ,'Ошибка обновления')
ENDIF

В зависимости от вида ошибки и реакции пользователя либо делаешь повторный TableUpdate(), либо откатываешь изменения TableRevert(), либо даешь возможность пользователю внести изменения в некорректные данные.
...
Рейтинг: 0 / 0
МНОГОПОЛЬЗОВАТЕЛЬСКИЕ ПРИЛОЖЕНИЯ И КУРСОР АДАПТЕР
    #32583467
sar99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
БОЛЬШОЕ СПАСИБО ЗА ПОСКАЗКУ - ПОПРОБУЮ ДОМА
(НА РЕАЛЬНОЙ БАЗЕ ЗАРЕКСЯ!)
ОДНАКО В HELP НАЧИНАЯ С VFP 3.0 ПИШУТ,
ЧТО ПРИ ВТОРОМ ПАРАМЕТРЕ .F. ПОПЫТКА ОБНОВЛЕНИЯ
ЗАПИСИ РАНЕЕ ОТКОРРЕКТИРОВАННОЙ ДРУГИМ ПОЛЬЗОВАТЕЛЕМ
ГЕНЕРИРУЕТ ОШИБКУ VFP (ВНЕ ЗАВИСИМОСТИ ОТ ТОГО
БУФЕРИЗИРУЕТСЯ СТРОКА ИЛИ ТАБЛИЦА)
...
Рейтинг: 0 / 0
МНОГОПОЛЬЗОВАТЕЛЬСКИЕ ПРИЛОЖЕНИЯ И КУРСОР АДАПТЕР
    #32583579
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Help не всегда соответствует реальному положению вещей. Такие моменты надо проверять на практике. Возможно, в VFP3 действительно генерилась ошибка, но в VFP6 (и более поздних) никакой ошибки не возникает.

Ошибка будет только при попытке применить TableUpdate() на НЕ буфферизированных данных.
...
Рейтинг: 0 / 0
МНОГОПОЛЬЗОВАТЕЛЬСКИЕ ПРИЛОЖЕНИЯ И КУРСОР АДАПТЕР
    #32583597
sar99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПРОВЕРИЛ (ДАЖЕ БЕЗ КУРСОРА АДАПТЕРА!)
ВЫ ПРАВЫ! СПАСИБО.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / МНОГОПОЛЬЗОВАТЕЛЬСКИЕ ПРИЛОЖЕНИЯ И КУРСОР АДАПТЕР
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]