Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Row changed between retrieve and update. ODBC. mySQL / 19 сообщений из 19, страница 1 из 1
03.11.2003, 03:07
    #32312929
VovikPB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Row changed between retrieve and update. ODBC. mySQL
Собственно работаю через 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
03.11.2003, 10:13
    #32313107
andy753
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Row changed between retrieve and update. ODBC. mySQL
Суть проблемы ясна?
Дело вот в чем. Ошибка возникает в ситуации, когда у тебя есть 2 или более DW, работающих с одними и теми же данными (например, редактирующие одну и ту же запись). Так вот при попытке сохранить данные из этих DW - у тебя и возникает эта ошибка. Причем все это происходит в рамках одного коннекта и скорее всего в рамках одной транзакции, то есть, если разводишь эти DW по разным коннектам - этой ошибка не будет, сохраниться последние изменения.

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

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

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

автор писал:Дело вот в чем. Ошибка возникает в ситуации, когда у тебя есть 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
03.11.2003, 21:12
    #32314156
cbusel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Row changed between retrieve and update. ODBC. mySQL
Вообще то сия ошибка означает только то, что update проапдейтил не одну запись (sqlca.sqlnrows <> 1). Может MySql настолько умный, что отбрасывает подобные апдейты?
...
Рейтинг: 0 / 0
03.11.2003, 22:01
    #32314176
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Row changed between retrieve and update. ODBC. mySQL
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
03.11.2003, 22:44
    #32314201
cbusel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Row changed between retrieve and update. ODBC. mySQL
2Филипп
автор писал:Зачем там dw_edit.AcceptText() ? Убери.
Нельзя ли привести пример, когда AcceptText вредил?

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


А зачем? Не проще сделать приложение устойчивым? Или мы теперь все уподобимся дяде Биллу?
...
Рейтинг: 0 / 0
04.11.2003, 10:02
    #32314375
ЗоринАндрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Row changed between retrieve and update. ODBC. mySQL
автор писал:Филипп: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
04.11.2003, 13:35
    #32314730
VovikPB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Row changed between retrieve and update. ODBC. mySQL
автор писал:Зачем там 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
04.11.2003, 14:03
    #32314783
ЗоринАндрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Row changed between retrieve and update. ODBC. mySQL
Какой UPDATE генерирует DW?
т.е. ставим в DBParm : DisableBind=1 и смотрим sqlsyntax в sqlpreview Event.
надо выяснить почему Update не находит запись - какой параметр подставляется в where id = ?
...
Рейтинг: 0 / 0
04.11.2003, 18:35
    #32315287
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Row changed between retrieve and update. ODBC. mySQL
Если вот это автор писал:А затем, если юзверь меняет что-то в датавинде а потом сразу мышкой на кнопку "Сохранить" жмакает, чтобы это "что-то" сохранилось не для смеха написано, то тогда должно быть так:
Код: plaintext
1.
2.
IF dw_edit.AcceptText() <>  1  THEN RETURN
dw_edit.SetItem() 
dw_edit.Update() 
...
Рейтинг: 0 / 0
04.11.2003, 18:40
    #32315294
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Row changed between retrieve and update. ODBC. mySQL
автор писал:Оба правы. проапдейтил не одну запись и не проапдейтил ни одной это одно и то же - это заявление есть глупость.
Если получаешь сей мессадж Row changed between retrieve and update , значит речь идёт об одном и ТОЛЬКО одном ряду.
...
Рейтинг: 0 / 0
05.11.2003, 12:15
    #32315925
cbusel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Row changed between retrieve and update. ODBC. mySQL
автор писал: update проапдейтил не одну запись (sqlca.sqlnrows <> 1)
Я опять был неправ. По видимому булдырь проверяет только sqldbcode.
...
Рейтинг: 0 / 0
16.12.2003, 21:16
    #32354564
Vovik@PB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Row changed between retrieve and update. ODBC. mySQL
Описанная выше ошибка пропала при выставлении в настройках ODBC драйвера галочки напротив пункта Return matching rows (которая по умолчанию девственно чиста). Интересно будут ли побочные эффекты?
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Row changed between retrieve and update. ODBC. mySQL / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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