|
|
|
В каком случае может ошибаться GetNextModified(0) ?
|
|||
|---|---|---|---|
|
#18+
Есть SPT-курсор с режимом буферизации 5. В какой-то момент делаем его сохранение. Читаем GetNextModified(0) - получаем не 0, вызываем TableUpdate(.t.) - на сервер никакие операторы не посылаются, однако функция возвращает .t.. Прошел отладчиком по всей цепочке от открытия курсора до сохранения и закрытия - нет ничего, что бы писАло в курсор. Кто-то сталкивался с таким ? (VFP 6 + PostgreSQL ODBC) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2006, 15:09 |
|
||
|
В каком случае может ошибаться GetNextModified(0) ?
|
|||
|---|---|---|---|
|
#18+
Забыл сказать. Все-таки между открытием и сохранением есть replace на одно поле, но этого поля нет в списке обновляемых полей курсора, и это не ключевое поле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2006, 15:29 |
|
||
|
В каком случае может ошибаться GetNextModified(0) ?
|
|||
|---|---|---|---|
|
#18+
Для функции GetNextModify() не имеет никакого значения включено поле в список обновляемых полей или нет. Эта функция проверяет факт изменения буфера. Команда REPLACE изменяет буфер. TableUpdate() - сбрасывает буфер. Но поскольку измененное поле не включено в список обновляемых полей, то на сервер ничего не посылается. Просто сбрасывается буфер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2006, 16:03 |
|
||
|
В каком случае может ошибаться GetNextModified(0) ?
|
|||
|---|---|---|---|
|
#18+
Спасибо, Владимир ! Я нечто похожее и предполагал. Получается, штатными средствами VFP такую ситуацию не выловишь (у меня кроме пустого tableupdate еще и юзеру сообщения выдаются, посылается на сервер пустая пара begin-commit) ? Т.е. работать только через свое слежение за изменениями в курсоре ? Влом как-то ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2006, 17:52 |
|
||
|
В каком случае может ошибаться GetNextModified(0) ?
|
|||
|---|---|---|---|
|
#18+
Кроме функции GetNextModified() есть еще функция GetFldState(). Эта функция определяет какое именно поле было изменено в одной текущей записи. Если использовать параметр -1, то получишь символьную строку вида 1111112111 Здесь каждый символ - это флаг изменения конкретного поля. В порядке физического следования полей. Первый символ - флаг изменения метки на удаление. То, что возвращает Deleted(). 1 - Запись существовала раньше. Изменений в данном поле нет 2 - Запись существовала раньше. Было изменение в данном поле 3 - Запись ранее не существовала. Новая запись. Изменений в данном поле нет 4 - Запись ранее не существовала. Новая запись. После создания были внесены изменения в данное поле Кроме того, если ты уверен, что по команде REPLACE изменяется только то поле, которое не входит в список обновляемых полей, то кто мешает сразу после REPLACE дать команду TableUpdate()? Код: plaintext 1. 2. Сразу сбросишь буфер и GetNextModified() ничего не найдет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2006, 21:43 |
|
||
|
В каком случае может ошибаться GetNextModified(0) ?
|
|||
|---|---|---|---|
|
#18+
Hi strizh! Ну так ты не через Tablepdate(.T.) работай, а через TableUpdate(.F.) + цикл по GetNextModified() + внутри цикла проверяй - есль ли изменения в НУЖНЫХ полях (т.е. в обновляемых) через GETFLDSTATE() - если есть, то ругайся и сохраняй, если нет - то просто сохраняй (это будет пустая, фиктивная команда) - можно также TableRevert() использовать - если вслед за "сохранением" идёт перезапрос и очередное "вычисление и REPLACE необновляемого поля". Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2006, 00:34 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33656706&tid=1591930]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
176ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
29ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 445ms |

| 0 / 0 |
