|
После TableUpdate() записи в курсоре помечаются как удалённые
|
|||
---|---|---|---|
#18+
Есть удалённое представление View no05_1 *UpdateType 1 *WhereType 1 *FetchMemo TRUE *ShareConnection TRUE *SendUpdates TRUE *Prepared FALSE *CompareMemo TRUE *FetchAsNeeded FALSE *UseMemoSize 255 *FetchSize -1 *MaxRecords -1 *Tables no05_1 *SQL select c_lg,c_us,date_b,prav_vl,q_ld,proc_lg,type_nr,nrpp,nor_lg,nor_dp,bg_1,bg_2,form_co from no05_1 *ConnectName city2000s01 *SourceType 2 *BatchUpdateCount 1 выполняю след. код open database ... use no05_1 in 0 select no05_1 ? cursorsetprop('buffering',5) && возвр. .Т. repl all bg_1 with 0 ? tableupdate(.T.,.T.) && возвр. .Т. в результате строки курсора, в которых bg_1 равнялось 0 помечаются на удаление, в других значение меняется, записи как удалённые не помечаются ВОПРОС: почему записи помечаются на удаление, что я делаю не правильно ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2009, 16:05 |
|
После TableUpdate() записи в курсоре помечаются как удалённые
|
|||
---|---|---|---|
#18+
Добавлю, что на сервер данные уходят нормально. и после requery() в курсоре видны те зименения которые нужно. Но почему после TableUpdate записи помечаются на удаление не могу найти ответа. Подскажите где искать плз! ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2009, 16:38 |
|
После TableUpdate() записи в курсоре помечаются как удалённые
|
|||
---|---|---|---|
#18+
нашёл что нужно сделать чтобы такого небыло. вместо tableupdate(.t.,.t.) использовать tableupdate(.f.,.t.) или tableupdate(). только пока не совсем чётко представляю почему..... буду разбираться. если использовать tableupdate(.t.) aerror выдаёт ошбку update conflict in cursor.... может кто подскажет где можно найти толковую информацию, чтобы разобраться во всех этих буферизациях? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2009, 17:39 |
|
После TableUpdate() записи в курсоре помечаются как удалённые
|
|||
---|---|---|---|
#18+
TableUpdate() ничего не удаляет. Он всего-лишь сбрасывает изменения из буфера View в таблицу-источник. TableUpdate(.F.) - сбрасывает буфер одной (текущей) записи View TableUpdate(.T.) - сбрасывает буфер всех записей View Сообщение Update Conflict говорит о том, что пока Вы вносили изменения во View какой-то другой пользователь изменил те же самые данные. Причем "другой пользователь" не обязательно "другой человек". Это может быть и другое View, например. Если данные оказались удалены, значит либо их удалил другой пользователь, либо в базе данных сработал триггер при модификации поля. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2009, 21:30 |
|
После TableUpdate() записи в курсоре помечаются как удалённые
|
|||
---|---|---|---|
#18+
Разобрался в чём была причина , но для меня по прежнему загадка что такого делает VFP , что в результате сброса буфера в удалённую таблицу, запись в локальном курсоре становится удалённой . ОЧЕНЬ БЫ ХОТЕЛОСЬ УСЛЫШАТЬ МНЕНИЕ ДРУГИХ УЧАСТНИКОВ ФОРУМА. А ТО ВДРУГ Я ЧТО-НИБУДЬ ОПЯТЬ ПРОГЛЯДЕЛ )))) Итак проводил следующие эксперименты 1 компьютер . На нём запущен MySQL сервер В VFP на этом же компьютере делаю следующее: 1) create database data1 2) создаю соединение в Database disiner 3) добавляю Remote View на таблицу no05_1 4) выставляю нужные настройки В итоге получился вот такой листинг команды LIST DATABASE Код: 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. 36. 37. 38. 39. 40.
Создаю процедуру след. вида: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
далее следующие варианты выполнения: 1) если до выполнения команды REPLACE в поле bg_1 находилась 1 то при использовании команды TABLEUPDATE( .F.,.F. ) выводится следующее: 2 1 0 ок Лог на серваке показывает, что пришла команда Код: plaintext
2) если до выполнения команды REPLACE в поле bg_1 находился 0 то при использовании команды TABLEUPDATE( .F.,.F. ) выводится следующее: 2 0 0 1585 Update conflict !!!!!!!!!!!!!!!!! ТЕМ НЕ МЕНЕЕ лог на серваке показывает, что пришла команда Код: plaintext
3) если до выполнения команды REPLACE в поле bg_1 находилась 1 то при использовании команды TABLEUPDATE( .T.,.T. ) выводится следующее: 2 1 0 ок Лог на серваке показывает, что пришла команда Код: plaintext
4) если до выполнения команды REPLACE в поле bg_1 находился 0 то при использовании команды TABLEUPDATE( .T.,.T. ) выводится следующее: 2 0 0 ок !!!!!!!!!!!!!!!!!!!! Лог на серваке показывает, что пришла команда Код: plaintext
Переключаюсь на программу MySQL query browser Выполняю запрос Код: plaintext
если данные действительно обновились, то выводится "1 row affected", если нет (когда bg_1 уже и так = 0) то выводится "query returned no result". вот тут у меня в голове начинает брезжить что-то похожее на решение проблемы . Открываю администратора источников данных ODBC, смотрю настройки своего источника данных (connector/ODBC 3.51.27 Configure Data Source Name). Среди всех прочих нахожу такую " Return Matching Rows ". Описание для данной настройки следующее: The client can`t handle that MySQL returns the true value of affected rows. If this flag is set, MySQL returns ``found rows" instead. You must have MySQL 3.21.14 or newer to get this work. Ну собственно и ставлю эту галочку. И ВСЁ ЗАРАБОТАЛО КАК НАДО!!!!!! Покрайней мере я очень расчитываю, что ничего не проглядел )))) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2009, 11:27 |
|
|
start [/forum/topic.php?fid=41&msg=36275761&tid=1585911]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
others: | 320ms |
total: | 442ms |
0 / 0 |