Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Отловить средствами РВ ситуацию "Row changed beetween... / 13 сообщений из 13, страница 1 из 1
21.11.2005, 11:51
    #33389528
urvas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отловить средствами РВ ситуацию "Row changed beetween...
retrieve and update" можно ли?
Т.е. не допускать появления окна с сообщенем о данной ошибке (но знать о ней), а самостоятельно обработать сложившуюся ситуацию?
...
Рейтинг: 0 / 0
21.11.2005, 12:28
    #33389678
ЗоринАндрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отловить средствами РВ ситуацию "Row changed beetween...
ловить код ошибки -3 в dberror event. для подавления стандартного сообщения - там же - "return 1"
...
Рейтинг: 0 / 0
21.11.2005, 12:45
    #33389750
urvas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отловить средствами РВ ситуацию "Row changed beetween...
Спасибо!
...
Рейтинг: 0 / 0
21.11.2005, 13:49
    #33390001
sboyko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отловить средствами РВ ситуацию "Row changed beetween...
уважаемые коллеги!
может кто знает какое-нибудь исследование в литературе, журналах, и-нете по поводу борьбы с подобной ситуацией - "Row changed beetween.... Только ОДИН способ проскользнул в форуме - типа показать старые и новые данные. Наверно любые 2 аналогичных окна с ДВ можно показать с помощью несложного сервиса - но как сделать это унифицированно для всех ДВ? И если форматированием, подкрашиванием полей в ДВ занимаемся пререгулярно, то этот важнейший вопрос, висит в воздухе как замок эльфов-такой же огромный и как висит непонятно! 20% всех вопросов касается этой ошибки - и мне кажется что у большинства метод борьбы один-писать только с ключом.
Может ГУРУ поделятся опытом и знаниями?!
станислав
...
Рейтинг: 0 / 0
21.11.2005, 18:46
    #33390925
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отловить средствами РВ ситуацию "Row changed beetween...
Ровно 10 лет назад я работал на одной банковской системе, где именно так и делалось - показывалось унифицированное окно с двумя версиями ОДНОГО ДВ, с подсвеченными/подкрашенными полями в которых concurrency problems.
А что стоит написать унифицированный сервис, который будет это делать?
...
Рейтинг: 0 / 0
22.11.2005, 11:46
    #33391905
sboyko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отловить средствами РВ ситуацию "Row changed beetween...
Филипп
А что стоит написать унифицированный сервис, который будет это делать?
Не спорю - и так можно сделать. Но ведь это всего лишь один вариант обработки, как сейчас любят говорить-безальтернативный! Ведь все книги по базам данных обсуждают вопрос работы ТОЛЬКО с одной записью - и столько проблем. Документация по базам - например та же ASA - формулирует все эти проблемы на "уровнях сериализации" и опять же - либо на уровне строки либо на уровне таблицы.
Мой вопрос в том -как имея таблицу на 1000 строк(условно)в памяти, которая загружена в 8 утра и закрыта в 18.00 - обеспечить непротиворечивую работу нескольких человек с одной и тоже таблицей. Подразумевается что средствами ПБ и условно ASA. И желательно, чтобы люди(пользователи) не были огорошены в последний момент тем, что им надо что то сравнивать, много думать и почти всегда решать вопрос об изменениях в свою пользу!

Вот я и спрашиваю о какой то информации на эту тему, что то вроде рекомендации, исследования, статьи или просто хороший совет, ссылку.
станислав
...
Рейтинг: 0 / 0
22.11.2005, 12:04
    #33391991
urvas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отловить средствами РВ ситуацию "Row changed beetween...
Перед началом работы с записью (её редактированием) я её ReselectRow(), что позволяет видеть пользователю данные на момент начала редактирования записи.
...
Рейтинг: 0 / 0
22.11.2005, 15:13
    #33392696
ЗоринАндрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отловить средствами РВ ситуацию "Row changed beetween...
sboykoМой вопрос в том -как имея таблицу на 1000 строк(условно)в памяти, которая загружена в 8 утра и закрыта в 18.00 - обеспечить непротиворечивую работу нескольких человек с одной и тоже таблицей.
Кэшированные данные надо подгружать иногда.
У нас сделано так - перед тем как показать юзеру dw с кэшированными данными - проверяем время обновления таблицы и сравниваем с тем что зафиксировали когда читали данные в кэш последний раз. Время обновления хранится в отделной таблице ( по строчке на каждую таблицу ) и поддерживается триггерами.

Насчет обработки Row changed - конфликты бывают редко так что мудрить не надо - перечитываем из БД и говорим - неповезло тебе - вбивай заново.

Для особо критичных случаев ( ~1% ) делаем пессимистическую блокировку ( SELECT ... FROM ... with (updlock, rowlock)
которая по таймауту снимается обычным ROLLBACK с выдачей сообщения пользователю об истекшем времени.
Юзера относятся с пониманием если им говоришь - вот тут действуем быстро - зашел, исправил, вышел.
...
Рейтинг: 0 / 0
22.11.2005, 15:15
    #33392700
ЗоринАндрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отловить средствами РВ ситуацию "Row changed beetween...
urvasПеред началом работы с записью (её редактированием) я её ReselectRow(), что позволяет видеть пользователю данные на момент начала редактирования записи.

У нас все dw на процедурах так что воспользоваться ReselectRow не получится :-(
...
Рейтинг: 0 / 0
22.11.2005, 16:34
    #33393012
rcryo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отловить средствами РВ ситуацию "Row changed beetween...
авторМой вопрос в том -как имея таблицу на 1000 строк(условно)в памяти, которая загружена в 8 утра и закрыта в 18.00 - обеспечить непротиворечивую работу нескольких человек с одной и тоже таблицей

сделать редактирование в форме
авторУ нас все dw на процедурах
делать не ReselectRow а ретрив DW с определенным параметром - ключем строки. Хр.процедура, получая в параметрах только с ключ, возвращает только одну строку с текущими значениями. Естественно устаревшую строку надо пред этим удалить из DW, а полученную вставить на её место.
...
Рейтинг: 0 / 0
23.11.2005, 15:48
    #33395076
Badger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отловить средствами РВ ситуацию "Row changed beetween...
ЗоринАндрей urvasПеред началом работы с записью (её редактированием) я её ReselectRow(), что позволяет видеть пользователю данные на момент начала редактирования записи.У нас все dw на процедурах так что воспользоваться ReselectRow не получится :-( У меня тоже все DW и на процедурах, но делаю именно так.Изменившееся строка отдельно получается в DataStore перезаписывается ручками в DW. Ну а сами изменения (были-ли они), дергаю по таймеру через свою функцию...

rcryo Естественно устаревшую строку надо пред этим удалить из DW, а полученную вставить на её место. и удалять не обязательно, а записать на то же место, вот например как я это делаю:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
long		ll_row
long		ll_count
long		ll_column
char		ls_find[ 30 ]

dw_1.SetRedraw (false)

/* Ищем полученную строку */
if al_f_move >  0  then
	ls_find = 'f_move = ' + String (al_f_move) 
	ll_row = dw_1.Find ( ls_find,  1 , dw_1.RowCount ())
end if

if ll_row =  0  then
	ll_row = dw_1.EVENT pfc_addrow ()
end if

/* Получение одной строки */
ll_count = ids_modify.Retrieve( al_f_move )

if ll_count =  1  and  ll_row >  0  then
	/* Определим количество столбцов */
	ll_count = Long( dw_1.Describe( 'DataWindow.Column.Count' ) )
	
	/* Прописываем новые данные */
	for ll_column =  1  to ll_count
		dw_1.Object.data [ ll_row, ll_column ] = ids_modify.Object.data [  1 , ll_column ]
	next

	/* сбрасываем флаг модификации */
	dw_1.SetItemStatus( ll_row,  0 , Primary!, NotModified!	)
	
end if

dw_1.SetRedraw (true)
...
Рейтинг: 0 / 0
24.11.2005, 11:34
    #33396661
sboyko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отловить средствами РВ ситуацию "Row changed beetween...
Согласен! Все что вы пишите здесь - абсолютно правильно, но это наша работа руками. Но ведь ДВ в дополнение к нашим знаниям о ней ведет еще свою внутреннюю жизнь, которая не всегда ясна. Так при update строки снова reselect - хотя вроде никто и не просит!
Есть еще другая мысль, вроде бы не связанная с темой. Оказывается, что все производители большого софта имеют 40-50% от ОБОРОТА в организации учебы. То есть - очень много в доке просто не пишется - только рассказывается на курсах.
И мне кажется - не могу настаивать - что ДОЛЖНА ДВ как то САМОСТОЯТЕЛЬНО общаться с данными - то есть делать reselect и манипуляции с псевдоблокировками строк самостоятельно. Например, такие вещи видны в Аксессе, MS SQL Enterprise manager в режима просмотра данных - то есть чистое грид ДВ на экране - видна связка между строкой в памяти и на диске и 2 людям, которые пытаются делать это одновременно- встать на одну строчку, выдается сообщение, что мол занято. Ясно, что ДВ и лучше и мощнее, но где все это спрятано, а ведь спрятано должно быть порядка 40%?
с уважением
станислав
...
Рейтинг: 0 / 0
24.11.2005, 11:58
    #33396777
ytrewq
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отловить средствами РВ ситуацию "Row changed beetween...
sboykoИ мне кажется - не могу настаивать - что ДОЛЖНА ДВ как то САМОСТОЯТЕЛЬНО общаться с данными - то есть делать reselect и манипуляции с псевдоблокировками строк самостоятельно. Например, такие вещи видны в Аксессе, MS SQL Enterprise manager в режима просмотра данных - то есть чистое грид ДВ на экране - видна связка между строкой в памяти и на диске и 2 людям, которые пытаются делать это одновременно- встать на одну строчку, выдается сообщение, что мол занято
PB работает с разными СУБД, поэтому то, что делает Аксесс, MS SQL Enterprise со своими "родными" хранилищами данных, реализовывать внутри PB, на мой взгляд, не имеет смысла.
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Отловить средствами РВ ситуацию "Row changed beetween... / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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