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

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

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

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

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

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


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