powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / В каком случае может ошибаться GetNextModified(0) ?
7 сообщений из 7, страница 1 из 1
В каком случае может ошибаться GetNextModified(0) ?
    #33656134
strizh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть SPT-курсор с режимом буферизации 5.
В какой-то момент делаем его сохранение.
Читаем GetNextModified(0) - получаем не 0, вызываем TableUpdate(.t.) - на сервер никакие операторы не посылаются, однако функция возвращает .t..
Прошел отладчиком по всей цепочке от открытия курсора до сохранения и закрытия - нет ничего, что бы писАло в курсор.
Кто-то сталкивался с таким ?
(VFP 6 + PostgreSQL ODBC)
...
Рейтинг: 0 / 0
В каком случае может ошибаться GetNextModified(0) ?
    #33656197
strizh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл сказать. Все-таки между открытием и сохранением есть replace на одно поле, но этого поля нет в списке обновляемых полей курсора, и это не ключевое поле.
...
Рейтинг: 0 / 0
В каком случае может ошибаться GetNextModified(0) ?
    #33656361
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для функции GetNextModify() не имеет никакого значения включено поле в список обновляемых полей или нет. Эта функция проверяет факт изменения буфера.

Команда REPLACE изменяет буфер. TableUpdate() - сбрасывает буфер. Но поскольку измененное поле не включено в список обновляемых полей, то на сервер ничего не посылается. Просто сбрасывается буфер.
...
Рейтинг: 0 / 0
В каком случае может ошибаться GetNextModified(0) ?
    #33656706
strizh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, Владимир !
Я нечто похожее и предполагал. Получается, штатными средствами VFP такую ситуацию не выловишь (у меня кроме пустого tableupdate еще и юзеру сообщения выдаются, посылается на сервер пустая пара begin-commit) ? Т.е. работать только через свое слежение за изменениями в курсоре ? Влом как-то ...
...
Рейтинг: 0 / 0
В каком случае может ошибаться GetNextModified(0) ?
    #33657067
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроме функции GetNextModified() есть еще функция GetFldState(). Эта функция определяет какое именно поле было изменено в одной текущей записи. Если использовать параметр -1, то получишь символьную строку вида

1111112111

Здесь каждый символ - это флаг изменения конкретного поля. В порядке физического следования полей. Первый символ - флаг изменения метки на удаление. То, что возвращает Deleted().

1 - Запись существовала раньше. Изменений в данном поле нет
2 - Запись существовала раньше. Было изменение в данном поле
3 - Запись ранее не существовала. Новая запись. Изменений в данном поле нет
4 - Запись ранее не существовала. Новая запись. После создания были внесены изменения в данное поле

Кроме того, если ты уверен, что по команде REPLACE изменяется только то поле, которое не входит в список обновляемых полей, то кто мешает сразу после REPLACE дать команду TableUpdate()?

Код: plaintext
1.
2.
REPLACE MyField WITH "Новое значение"
=TableUpdate(.F.,.T.)

Сразу сбросишь буфер и GetNextModified() ничего не найдет.
...
Рейтинг: 0 / 0
В каком случае может ошибаться GetNextModified(0) ?
    #33657174
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi strizh!

Ну так ты не через Tablepdate(.T.) работай, а через TableUpdate(.F.) + цикл
по GetNextModified() + внутри цикла проверяй - есль ли изменения в НУЖНЫХ
полях (т.е. в обновляемых) через GETFLDSTATE() - если есть, то ругайся и
сохраняй, если нет - то просто сохраняй (это будет пустая, фиктивная
команда) - можно также TableRevert() использовать - если вслед за
"сохранением" идёт перезапрос и очередное "вычисление и REPLACE
необновляемого поля".

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
В каком случае может ошибаться GetNextModified(0) ?
    #33657946
strizh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, Владимир, Игорь !
Обе идеи хороши - применю в разных местах.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / В каком случае может ошибаться GetNextModified(0) ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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