powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Row changed between retrieve and update. ODBC. mySQL
19 сообщений из 19, страница 1 из 1
Row changed between retrieve and update. ODBC. mySQL
    #32312929
VovikPB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Собственно работаю через mySQL ODBC 3.51 - возможно корявость отсюда

Суть в следующем.
Делаю retrieve 1 записи, меняю, делаю update.
Проблема возникает когда делаю dw.SetItem() при этом не изменяя данных. Для наглядности пример:
Ритривится appications.cli_id ( = 235)
Делаю dw.SetItem(1, 'cli_id', 444) - все ок
Если делаю dw.SetItem(1, 'cli_id', 235) (то-есть тот-же) то пишет:

"Row changed between retrieve and update.
No changes made to database
UPDATE applications SET CLI_ID = ? WHERE ID = ?"

можно конечно вставить проверку на неравенство, как щас и сделал, но как по-грамотному?
...
Рейтинг: 0 / 0
Row changed between retrieve and update. ODBC. mySQL
    #32313107
andy753
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Суть проблемы ясна?
Дело вот в чем. Ошибка возникает в ситуации, когда у тебя есть 2 или более DW, работающих с одними и теми же данными (например, редактирующие одну и ту же запись). Так вот при попытке сохранить данные из этих DW - у тебя и возникает эта ошибка. Причем все это происходит в рамках одного коннекта и скорее всего в рамках одной транзакции, то есть, если разводишь эти DW по разным коннектам - этой ошибка не будет, сохраниться последние изменения.

Как отрабатывать: 2 способа
- либо корректно отрабатывать, т.е. сохранять изменения, делать ретрив, вносить изменения, делать апдейт - то есть то что и рекомендует
- вносить изменения только из одного контрола, в твоем случае - общий список

Ну а в целом - корявость твоего способа чувствуется... ты бы подумал, мож концептуально что-то переделаешь.
...
Рейтинг: 0 / 0
Row changed between retrieve and update. ODBC. mySQL
    #32313325
Фотография Ikar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 andy753: Ага, и не забывать commit ставить апосля retrieve и update ...
---
С уважением, IKAR
программист-разработчик
PowerBuilder
ikarhomecenter@narod.ru
IkarHomeCenter
...
Рейтинг: 0 / 0
Row changed between retrieve and update. ODBC. mySQL
    #32313398
andy753
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
само собой :)
...
Рейтинг: 0 / 0
Row changed between retrieve and update. ODBC. mySQL
    #32313840
Фотография Ikar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 andy753: Смех-смехом, а я об этом узнал, когда уже пару лет писал на РВ... И, скажем так, сильно удивился и необходимости онного, и результатам...

---
С уважением, IKAR
программист-разработчик
PowerBuilder
ikarhomecenter@narod.ru
IkarHomeCenter
...
Рейтинг: 0 / 0
Row changed between retrieve and update. ODBC. mySQL
    #32313952
andy753
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:)) я с этим сжился уже... так как мои юзера очена любили по неделе проги не выключать. Соо-но блокировки быстро заставили в этом разобраться :))
...
Рейтинг: 0 / 0
Row changed between retrieve and update. ODBC. mySQL
    #32314099
VovikPB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно проблему не поняли

автор писал:Дело вот в чем. Ошибка возникает в ситуации, когда у тебя есть 2 или более DW, работающих с одними и теми же данными (например, редактирующие одну и ту же запись). Так вот при попытке сохранить данные из этих DW - у тебя и возникает эта ошибка. Причем все это происходит в рамках одного коннекта и скорее всего в рамках одной транзакции, то есть, если разводишь эти DW по разным коннектам - этой ошибка не будет, сохраниться последние изменения.

Ситуация, описанная выше очевидна, но!
Есть только 1 DW редактирующая эту запись.
Все ОК работает на оракле (т.е. код-то нормальный, портирую на mySQL по ряду причин)


автор писал:- либо корректно отрабатывать, т.е. сохранять изменения, делать ретрив, вносить изменения, делать апдейт - то есть то что и рекомендует

так и делается

автор писал:вносить изменения только из одного контрола

и это тоже так

объясняю по порядку еще раз:
retrieve 1 записи в dw_edit.Retrieve(al_id)
делаю dw_edit.SetItem()
делаю dw_edit.AcceptText()
делаю dw_edit.Update()
делаю COMMIT; если успешно
никак больше эта запись одновременно не редактируется
...
Рейтинг: 0 / 0
Row changed between retrieve and update. ODBC. mySQL
    #32314156
cbusel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще то сия ошибка означает только то, что update проапдейтил не одну запись (sqlca.sqlnrows <> 1). Может MySql настолько умный, что отбрасывает подобные апдейты?
...
Рейтинг: 0 / 0
Row changed between retrieve and update. ODBC. mySQL
    #32314176
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cbusel
Сие есть ерунда автор писал:Вообще то сия ошибка означает только то, что update проапдейтил не одну запись

Ошибка эта означает, что WHERE CLAUSE, которую сгенерил datawindow НЕ НАШЛА ряд, который updatать пытались...

VovikPB , каков datatype cli_id в БД, и каков в datawindow ?

И кстати, вот это:
автор писал:делаю dw_edit.SetItem()
делаю dw_edit.AcceptText()
делаю dw_edit.Update()
Зачем там dw_edit.AcceptText() ? Убери.
...
Рейтинг: 0 / 0
Row changed between retrieve and update. ODBC. mySQL
    #32314201
cbusel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Филипп
автор писал:Зачем там dw_edit.AcceptText() ? Убери.
Нельзя ли привести пример, когда AcceptText вредил?

Нельзя ли узнать как PB определяет, что
автор писал:
что WHERE CLAUSE, которую сгенерил datawindow НЕ НАШЛА ряд, который updatать пытались...
...
Рейтинг: 0 / 0
Row changed between retrieve and update. ODBC. mySQL
    #32314290
Фотография Ikar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 andy753:
andy753 писал:так как мои юзера очена любили по неделе проги не выключать.
Ну, эт крутовато! А вставить ченить навроде обязательного "Закрытие дня/смены"?
---
С уважением, IKAR
программист-разработчик
PowerBuilder
ikarhomecenter@narod.ru
IkarHomeCenter
...
Рейтинг: 0 / 0
Row changed between retrieve and update. ODBC. mySQL
    #32314362
andy753
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
А вставить ченить навроде обязательного  "Закрытие дня/смены" ? 


А зачем? Не проще сделать приложение устойчивым? Или мы теперь все уподобимся дяде Биллу?
...
Рейтинг: 0 / 0
Row changed between retrieve and update. ODBC. mySQL
    #32314375
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор писал:Филипп:Cие есть ерунда
cbusel: Вообще то сия ошибка означает только то, что update проапдейтил не одну запись
Филипп:Ошибка эта означает, что WHERE CLAUSE, которую сгенерил datawindow НЕ НАШЛА ряд, который updatать пытались...

Оба правы. проапдейтил не одну запись и не проапдейтил ни одной это одно и то же.

VovikPB:
А что у нас там в Update properties -> where clause?
Может имеет смысл делать Update(False, False) и потом только после успешного Update ResetUpdate?

andy753 + Ikar:
мы вам не мешаем? ;-)


Зорин А.

"I love deadlines. I like the whooshing sound they make as they fly by."
-- Douglas Adams
...
Рейтинг: 0 / 0
Row changed between retrieve and update. ODBC. mySQL
    #32314730
VovikPB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор писал:Зачем там dw_edit.AcceptText() ? Убери.
А затем, если юзверь меняет что-то в датавинде а потом сразу мышкой на кнопку "Сохранить" жмакает, чтобы это "что-то" сохранилось

автор писал:When a user moves from item to item in a DataWindow control, the control validates and accepts data the user has edited. When a user modifies a DataWindow item then immediately changes focus to another control in the window, the DataWindow control does not accept the modified data—the data remains in the edit control. Use the AcceptText function in this situation to ensure that the DataWindow object contains the data the user edited.

А что у нас там в Update properties -> where clause?[/quot]
Update properties простые:
Where clause...: Key columns
Unique Key Column(s): id
Key modifications: Use Delete then Insert автор писал:

[quot автор]VovikPB, каков datatype cli_id в БД, и каков в datawindow?
cli_id - bigint(20)
datawindow - freeform
...
Рейтинг: 0 / 0
Row changed between retrieve and update. ODBC. mySQL
    #32314783
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какой UPDATE генерирует DW?
т.е. ставим в DBParm : DisableBind=1 и смотрим sqlsyntax в sqlpreview Event.
надо выяснить почему Update не находит запись - какой параметр подставляется в where id = ?
...
Рейтинг: 0 / 0
Row changed between retrieve and update. ODBC. mySQL
    #32315287
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вот это автор писал:А затем, если юзверь меняет что-то в датавинде а потом сразу мышкой на кнопку "Сохранить" жмакает, чтобы это "что-то" сохранилось не для смеха написано, то тогда должно быть так:
Код: plaintext
1.
2.
IF dw_edit.AcceptText() <>  1  THEN RETURN
dw_edit.SetItem() 
dw_edit.Update() 
...
Рейтинг: 0 / 0
Row changed between retrieve and update. ODBC. mySQL
    #32315294
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор писал:Оба правы. проапдейтил не одну запись и не проапдейтил ни одной это одно и то же - это заявление есть глупость.
Если получаешь сей мессадж Row changed between retrieve and update , значит речь идёт об одном и ТОЛЬКО одном ряду.
...
Рейтинг: 0 / 0
Row changed between retrieve and update. ODBC. mySQL
    #32315925
cbusel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор писал: update проапдейтил не одну запись (sqlca.sqlnrows <> 1)
Я опять был неправ. По видимому булдырь проверяет только sqldbcode.
...
Рейтинг: 0 / 0
Row changed between retrieve and update. ODBC. mySQL
    #32354564
Vovik@PB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Описанная выше ошибка пропала при выставлении в настройках ODBC драйвера галочки напротив пункта Return matching rows (которая по умолчанию девственно чиста). Интересно будут ли побочные эффекты?
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Row changed between retrieve and update. ODBC. mySQL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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