Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как Вы решаете проблему "Row changed between retrieve and update"? / 21 сообщений из 21, страница 1 из 1
05.05.2004, 12:34
    #32507232
ZiZu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Вы решаете проблему "Row changed between retrieve and update"?
Всем привет!
Первый раз пишу проект с использованием PFC.
Так вот столкнулся с пресловутой проблемой при Update - "Row changed between retrieve and update". Включена поддрежка отладки PFC setDebug (TRUE), поэтому рисуется окошко, что нет переопределенного сообытия pfc_dwdberror . Вопрос такой: в каком объекте это событие должно быть реализовано (пробовал в DW, в окне parent'e DW, не подхватывается нигде) и как собственно разруливать эту ситацию, т.е. что нужно при этом событии делать. Если есть где почитать про это, ткните носом плиз. :)
...
Рейтинг: 0 / 0
05.05.2004, 13:24
    #32507366
Deosfen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Вы решаете проблему "Row changed between retrieve and update"?
н-да ... интересно увидеть ответ, может с того раза, что я задавал такой же вопрос, есть другие варианты ответов.
to ZiZu: у меня это ошибка возникает, в случаях, когда я использую stored procedure, для сохранения записи, у тебя в каком случае?
...
Рейтинг: 0 / 0
05.05.2004, 15:10
    #32507546
Как Вы решаете проблему "Row changed between retrieve and update"?
Выбираю в Update propierties - Where clause = "Key columns" при Key Modification = "Use update". Тем самым забиваем на редактирование одной записи с разных клиентов, зато никаких "Row changed.." :-))
...
Рейтинг: 0 / 0
05.05.2004, 15:18
    #32507562
Как Вы решаете проблему "Row changed between retrieve and update"?
Сорри, вопрос плохо прочел... Беру слова взад...
...
Рейтинг: 0 / 0
05.05.2004, 15:36
    #32507589
ZiZu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Вы решаете проблему "Row changed between retrieve and update"?
У меня сохранение без хранимых процедур, но ошибка возникает только в том случае, когда Update Propierties стоит по всем полям выборки, если оставить только по ключевому полю, то все нормально. Только остается одна проблема, если во время редактирования запись кто-то удалил. Опять та же ошибка, но меня интересует как все таки PFC предлагает решать эту проблему, где нужно создавать event'ы и что в них писать?
...
Рейтинг: 0 / 0
05.05.2004, 16:40
    #32507744
guest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Вы решаете проблему "Row changed between retrieve and update"?
>ZiZu
Уважаемый/ая ZiZu!
Может быть Вы определитесь с вопросами?
Предположительно, их два:
1. Когда, почему возникает сообщение "Row changed between retrieve and update"
2. Где и как обрабатывать error messages от DBMS в PB с использованием PFC
...
Рейтинг: 0 / 0
05.05.2004, 17:32
    #32507845
ЗоринАндрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Вы решаете проблему "Row changed between retrieve and update"?
Zizu. когда пользователи наперегонки не глядя затирают изменения друг друга - это нормально?
ИМХО, есть два метода работы.
Зачитывать запись сразу с блокировкой (всяческие updlock, rowlock для MSSQL). Либо использовать все (или только измененные) поля, либо timastamp.
Все остальное, в том числе и Key Only - поверхностный, небрежный, непрофессиональный подход.
Прежде чем задаваться вопросом "где и что мне вписать", следует почитать про пессимистические и оптимистические блокировки и для себя определить какой именно стратегии придерживаться.

Если вернуться к теме - ошибку "Row changed..." обрабатываем как обычную ошибку БД, т.е. сообщаем пользователю что произошло, но затем перечитываем запись из базы - пусть юзер смотрит на то что действительно теперь есть в БД и решает вводить ему свои изменения заново или что-то еще.
Не думаю что это сложно закодировать или в PFC есть какие-то особенности с этим связанные. Обычная реализация pfc_dberror где-то на уровне ancestor'а для форм.

З.Ы. pfc_dwdberror это не событие, а сообщение которого не может найти PFC.
Обычно оно находится в таблице messages. Судя по всему не настроен нормально Error Service.
...
Рейтинг: 0 / 0
05.05.2004, 19:14
    #32508067
ZiZu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Вы решаете проблему "Row changed between retrieve and update"?
2Зорин Андрей
>> когда пользователи наперегонки не глядя затирают изменения друг друга - это нормально?
по-моему это не нормально, вот я и пытаюсь сделать по нормальному перекрыть событие pfc_dbdwerror и спросить у пользователя, что делать дальше. Теперь про блокировки, я читал/знаю, что такое уровни изоляции данных и блокировки (надеюсь, что знаю неплохо, только у меня не MSSQL, а ASA, что в нашем случае почти одно и тоже), так вот подход, когда пользователь нажимает кнопку "Сохранить" и ждет когда же заблокированную другим запись (даже row-level) кто-нибудь освободит тоже считаю непрофессиональным, поверхностным подходом.
По сути Ваш З.Ы. и оказался самым полезным, спасибо
>> Обычно оно находится в таблице messages. Судя по всему не настроен нормально Error Service.
Попробую найти что-нибудь про это...
...
Рейтинг: 0 / 0
05.05.2004, 19:32
    #32508100
ZiZu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Вы решаете проблему "Row changed between retrieve and update"?
2Guest
1. Когда возникает ошибка "Row changed between retrieve and update" я знаю и не спрашивал.
2. "Где и как обрабатывать error messages от DBMS в PB с использованием PFC"
Ну насколько я понимаю, эта ошибка не приходит от DBMS, ее генерирует сам PB, когда не может найти при Update запись которую он Retrieve'ил.

P.S. Что бы с этим "Уважаемый/ая ZiZu!" не было непоняток вклеил в профайл фотку
...
Рейтинг: 0 / 0
05.05.2004, 19:43
    #32508109
ZiZu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Вы решаете проблему "Row changed between retrieve and update"?
2ЗоринАндрей
Андрей, почему Вы считаете, что pfc_dwdberror это сообщение, а не событие. У меня в PB все функции которые начинаются с pfc_ находятся на вкладке "Event List". Event, насколько я понимаю английский - событие.
Хотя когда делается вызов object. EVENT EventName , то действительно получается посылаем сообщение (message). Меня-то интересует именно реализация события. Но это так - мелочи, спасибо еще раз, буду искать как настраивать Error Service
...
Рейтинг: 0 / 0
06.05.2004, 12:51
    #32508924
guest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Вы решаете проблему "Row changed between retrieve and update"?
2ZiZu

class: pfc_u_dw
event: pfc_u_dw.dberror
....
// Display the message immediately.
...
else
of_MessageBox (" pfc_dberror ",
gnv_app.iapp_object.DisplayName, ls_message, StopSign!, Ok!, 1)
end if
...

следовательно "pfc_dwdberror" это ID сообщения а не имя события.
...
Рейтинг: 0 / 0
06.05.2004, 13:31
    #32509027
ZiZu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Вы решаете проблему "Row changed between retrieve and update"?
2 Guest
Хорошо, понятно
Спасибо, я понял где это происходит
...
Рейтинг: 0 / 0
14.05.2004, 17:04
    #32518681
Как Вы решаете проблему "Row changed between retrieve and update"?
Такая ошибка возникает в следующем случае ( Pb8.0.4 + WinXP + OLE DB на MSSql2000 ):
УДАЛЯЮ запись из таблицы, на которую повешен триггер на удаление записей из связанных таблиц. В триггере писано просто
delete from <table> where <sid> in (select <nid> from deleted)
и еще на пару таблиц.
Так вот, PB даёт эту ошибку, если в одной из связанных таблиц не оказалось удаляемых строк. И всё откатывает. Проверка, например:
if exists ( select from <table> where <sid> in (select <nid> from deleted) )
delete from <table> where <sid> in (select <nid> from deleted)
это сообщение ликвидирует.
Может, просто OLE драйвер настроить как-то надо (всё по умолчанию)?
При нативском драйвере MSS всё Ok - никаких проверок не надо.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
22.08.2005, 15:07
    #33228104
savosin_sergey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Вы решаете проблему "Row changed between retrieve and update"?
действительно, если добавить проверку в триггер на наличие строк в detail-таблице, то всё заработало (пропала эта ошибка -- "Row changed between retrieve and update")
...
Рейтинг: 0 / 0
23.08.2005, 10:20
    #33229288
Andrew Nagorny
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Вы решаете проблему "Row changed between retrieve and update"?
>( Pb8.0.4 + WinXP + OLE DB на MSSql2000 ):

в начале триггера нужно поставить
set nocount on

Билдер проверяет @@rowcount,а триггер сбивает его.
...
Рейтинг: 0 / 0
23.08.2005, 11:27
    #33229499
savosin_sergey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Вы решаете проблему "Row changed between retrieve and update"?
2 Andrew Nagorny: спасибо, что-то я не знаю, что set nocount on|off влияет на @@rowcount !

не хочется "слазить" с oledb-провайдера. хотя подмечены ещё пара глюков:
1. не подключаются справочники, у которых первичный ключ имеет тип данных, отличный от внешнего ключа в "главной" таблице ("главная"=к которой подключён справочник). например, numeric(19) и bigint -- приводят к ошибке. В mssql-провайдере такой ошибки нет, эти же справочники нормально подключаются

2. разное поведение (для oledb и mssql - провайдеров) хранимых поцедур при выполнении отчётов (т.е. в теле отчёта вызывается ХП со временной таблицей, потом всякие select'ы с ней работают)

3. пошёл слух ;-) , что несколько одновременных соединений с БД приводят к "вылету" приложения. Чего нет в mssql-провайдере
...
Рейтинг: 0 / 0
27.09.2005, 07:37
    #33289796
Tea-pot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Вы решаете проблему "Row changed between retrieve and update"?
maybe this can help

http://www.sybase.com/detail?id=1036938


"
5.1.2 Update fails with Rows to Disk retrieve option
On the Specify Update Properties dialog box for a DataWindow object, if the Key and Updateable Columns radio button is selected in the Where Clause for Update/Delete group box, DataWindow update fails when the retrieve option is set to Rows to Disk. The error returned is Row changed between retrieve and update. To work around this issue, change the setting in the Where Clause for Update/Delete group box to Key Columns . [CR 341514]

"
...
Рейтинг: 0 / 0
27.09.2005, 11:31
    #33290236
savosin_sergey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Вы решаете проблему "Row changed between retrieve and update"?
не, никаких "Rows to Disk retrieve option" не было включено. всё дело в set nocount on + oledb provider. Кстати, выяснилось, что если на msSql2000 поставить, например, service pack 3, то и с провайдером "MSS Microsoft SQL Server" работает быстро (а без SP3, почему-то, загрузка данных в DW происходит медленно на этом провайдере)
...
Рейтинг: 0 / 0
27.09.2005, 13:14
    #33290653
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Вы решаете проблему "Row changed between retrieve and update"?
Кстати маленькое замечание на счет "забития" на изолированность при update по ключу. Если стоит любое другое условие, например key and upadtetable columns ни одно из значений не должно содержать null иначе данное сообщение неизбежно
...
Рейтинг: 0 / 0
27.09.2005, 16:40
    #33291435
ЗоринАндрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Вы решаете проблему "Row changed between retrieve and update"?
Я не знаю что Вы делаете неправильно, но это очевидная чушь.
PB нормально генерирует для NULL значений операторы вида
UPDATE <table> value = 1 WHERE key_id = 1 AND value IS NULL
и
UPDATE <table> value = NULL WHERE key_id = 1 AND value = 1
которые выполняются без ошибок.
...
Рейтинг: 0 / 0
28.09.2005, 14:30
    #33293357
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Вы решаете проблему "Row changed between retrieve and update"?
UPDATE <table> value = 1 WHERE key_id = 1 AND value IS NULL

Каюсь, в 9-ке не проверял но затыки были уже не раз в предыдущих версиях.
Так что верю на слово...
Хотя для снятия проблем и ускорения проще все-таки использовать мое предложение
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как Вы решаете проблему "Row changed between retrieve and update"? / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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