|
Row changed between retrieve and update. ODBC. mySQL
|
|||
---|---|---|---|
#18+
Собственно работаю через 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 = ?" можно конечно вставить проверку на неравенство, как щас и сделал, но как по-грамотному? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2003, 03:07 |
|
Row changed between retrieve and update. ODBC. mySQL
|
|||
---|---|---|---|
#18+
Суть проблемы ясна? Дело вот в чем. Ошибка возникает в ситуации, когда у тебя есть 2 или более DW, работающих с одними и теми же данными (например, редактирующие одну и ту же запись). Так вот при попытке сохранить данные из этих DW - у тебя и возникает эта ошибка. Причем все это происходит в рамках одного коннекта и скорее всего в рамках одной транзакции, то есть, если разводишь эти DW по разным коннектам - этой ошибка не будет, сохраниться последние изменения. Как отрабатывать: 2 способа - либо корректно отрабатывать, т.е. сохранять изменения, делать ретрив, вносить изменения, делать апдейт - то есть то что и рекомендует - вносить изменения только из одного контрола, в твоем случае - общий список Ну а в целом - корявость твоего способа чувствуется... ты бы подумал, мож концептуально что-то переделаешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2003, 10:13 |
|
Row changed between retrieve and update. ODBC. mySQL
|
|||
---|---|---|---|
#18+
2 andy753: Ага, и не забывать commit ставить апосля retrieve и update ... --- С уважением, IKAR программист-разработчик PowerBuilder ikarhomecenter@narod.ru IkarHomeCenter ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2003, 12:11 |
|
Row changed between retrieve and update. ODBC. mySQL
|
|||
---|---|---|---|
#18+
само собой :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2003, 12:56 |
|
Row changed between retrieve and update. ODBC. mySQL
|
|||
---|---|---|---|
#18+
2 andy753: Смех-смехом, а я об этом узнал, когда уже пару лет писал на РВ... И, скажем так, сильно удивился и необходимости онного, и результатам... --- С уважением, IKAR программист-разработчик PowerBuilder ikarhomecenter@narod.ru IkarHomeCenter ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2003, 16:56 |
|
Row changed between retrieve and update. ODBC. mySQL
|
|||
---|---|---|---|
#18+
:)) я с этим сжился уже... так как мои юзера очена любили по неделе проги не выключать. Соо-но блокировки быстро заставили в этом разобраться :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2003, 17:45 |
|
Row changed between retrieve and update. ODBC. mySQL
|
|||
---|---|---|---|
#18+
Возможно проблему не поняли автор писал:Дело вот в чем. Ошибка возникает в ситуации, когда у тебя есть 2 или более DW, работающих с одними и теми же данными (например, редактирующие одну и ту же запись). Так вот при попытке сохранить данные из этих DW - у тебя и возникает эта ошибка. Причем все это происходит в рамках одного коннекта и скорее всего в рамках одной транзакции, то есть, если разводишь эти DW по разным коннектам - этой ошибка не будет, сохраниться последние изменения. Ситуация, описанная выше очевидна, но! Есть только 1 DW редактирующая эту запись. Все ОК работает на оракле (т.е. код-то нормальный, портирую на mySQL по ряду причин) автор писал:- либо корректно отрабатывать, т.е. сохранять изменения, делать ретрив, вносить изменения, делать апдейт - то есть то что и рекомендует так и делается автор писал:вносить изменения только из одного контрола и это тоже так объясняю по порядку еще раз: retrieve 1 записи в dw_edit.Retrieve(al_id) делаю dw_edit.SetItem() делаю dw_edit.AcceptText() делаю dw_edit.Update() делаю COMMIT; если успешно никак больше эта запись одновременно не редактируется ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2003, 19:45 |
|
Row changed between retrieve and update. ODBC. mySQL
|
|||
---|---|---|---|
#18+
Вообще то сия ошибка означает только то, что update проапдейтил не одну запись (sqlca.sqlnrows <> 1). Может MySql настолько умный, что отбрасывает подобные апдейты? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2003, 21:12 |
|
Row changed between retrieve and update. ODBC. mySQL
|
|||
---|---|---|---|
#18+
cbusel Сие есть ерунда автор писал:Вообще то сия ошибка означает только то, что update проапдейтил не одну запись Ошибка эта означает, что WHERE CLAUSE, которую сгенерил datawindow НЕ НАШЛА ряд, который updatать пытались... VovikPB , каков datatype cli_id в БД, и каков в datawindow ? И кстати, вот это: автор писал:делаю dw_edit.SetItem() делаю dw_edit.AcceptText() делаю dw_edit.Update() Зачем там dw_edit.AcceptText() ? Убери. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2003, 22:01 |
|
Row changed between retrieve and update. ODBC. mySQL
|
|||
---|---|---|---|
#18+
2Филипп автор писал:Зачем там dw_edit.AcceptText() ? Убери. Нельзя ли привести пример, когда AcceptText вредил? Нельзя ли узнать как PB определяет, что автор писал: что WHERE CLAUSE, которую сгенерил datawindow НЕ НАШЛА ряд, который updatать пытались... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2003, 22:44 |
|
Row changed between retrieve and update. ODBC. mySQL
|
|||
---|---|---|---|
#18+
2 andy753: andy753 писал:так как мои юзера очена любили по неделе проги не выключать. Ну, эт крутовато! А вставить ченить навроде обязательного "Закрытие дня/смены"? --- С уважением, IKAR программист-разработчик PowerBuilder ikarhomecenter@narod.ru IkarHomeCenter ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2003, 08:01 |
|
Row changed between retrieve and update. ODBC. mySQL
|
|||
---|---|---|---|
#18+
Код: plaintext
А зачем? Не проще сделать приложение устойчивым? Или мы теперь все уподобимся дяде Биллу? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2003, 09:51 |
|
Row changed between retrieve and update. ODBC. mySQL
|
|||
---|---|---|---|
#18+
автор писал:Филипп: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 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2003, 10:02 |
|
Row changed between retrieve and update. ODBC. mySQL
|
|||
---|---|---|---|
#18+
автор писал:Зачем там 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2003, 13:35 |
|
Row changed between retrieve and update. ODBC. mySQL
|
|||
---|---|---|---|
#18+
Какой UPDATE генерирует DW? т.е. ставим в DBParm : DisableBind=1 и смотрим sqlsyntax в sqlpreview Event. надо выяснить почему Update не находит запись - какой параметр подставляется в where id = ? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2003, 14:03 |
|
Row changed between retrieve and update. ODBC. mySQL
|
|||
---|---|---|---|
#18+
Если вот это автор писал:А затем, если юзверь меняет что-то в датавинде а потом сразу мышкой на кнопку "Сохранить" жмакает, чтобы это "что-то" сохранилось не для смеха написано, то тогда должно быть так: Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2003, 18:35 |
|
Row changed between retrieve and update. ODBC. mySQL
|
|||
---|---|---|---|
#18+
автор писал:Оба правы. проапдейтил не одну запись и не проапдейтил ни одной это одно и то же - это заявление есть глупость. Если получаешь сей мессадж Row changed between retrieve and update , значит речь идёт об одном и ТОЛЬКО одном ряду. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2003, 18:40 |
|
Row changed between retrieve and update. ODBC. mySQL
|
|||
---|---|---|---|
#18+
автор писал: update проапдейтил не одну запись (sqlca.sqlnrows <> 1) Я опять был неправ. По видимому булдырь проверяет только sqldbcode. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2003, 12:15 |
|
Row changed between retrieve and update. ODBC. mySQL
|
|||
---|---|---|---|
#18+
Описанная выше ошибка пропала при выставлении в настройках ODBC драйвера галочки напротив пункта Return matching rows (которая по умолчанию девственно чиста). Интересно будут ли побочные эффекты? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2003, 21:16 |
|
|
start [/forum/topic.php?fid=15&fpage=111&tid=1339372]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 229ms |
total: | 373ms |
0 / 0 |