:: Visual Foxpro, Foxpro for DOS
не срабатывает RecordRefresh на курсорадаптере
AlexSSS
Автор

Сообщений: 6113
Откуда: Tallinn, Estonia
Дата регистрации: 19.09.2005
добрый день

сегодня столкнулся с тем, что не срабатывает RecordRefresh на курсорадаптере
в базе в таблице периодически происходят изменения, которые на конкретной записи я обновляю через recordrefresh

таким образом refresh не срабатывает
local oCa as CursorAdapter
oCa = thisform.ogrid_ca
oCa.recordrefresh

а вот так срабатывает
local oCa as CursorAdapter
oCa = thisform.ogrid_ca
= TABLEREVERT(.T., '_grid')
oCa.recordrefresh

куда копать?
мне нужно, чтобы независимо от буферизации и возможных изменений данные по CursorRefresh обновлялись с сервера
Ratings: 0 negative/0 positive
Re: не срабатывает RecordRefresh на курсорадаптере
PaulWist

Сообщений: 14601
Дата регистрации: 01.04.2004
Ты какие данные пытаешься отрефрешить Native или SQLServer?

Что возвращает:
?oCa.recordrefresh


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)




Исправлено 1 раз(а). Последнее : PaulWist, 24.10.17 13:35
Ratings: 0 negative/0 positive
Re: не срабатывает RecordRefresh на курсорадаптере
AlexSSS
Автор

Сообщений: 6113
Откуда: Tallinn, Estonia
Дата регистрации: 19.09.2005
sql server

oCa.recordrefresh возвращает 1, поэтому отсутствие обновления для меня стало неожиданостью
профайлером смотрел запрос на сервере - он возвращает корректные данные, но в локальной таблице они не обновляются

случайно заметил, что revert исправляет ситуацию



Исправлено 1 раз(а). Последнее : AlexSSS, 24.10.17 13:50
Ratings: 0 negative/0 positive
Re: не срабатывает RecordRefresh на курсорадаптере
PaulWist

Сообщений: 14601
Дата регистрации: 01.04.2004
Тогда смотри профайлером какую команду СА.RecordRefresh отправляет на сервер в обоих случаях.


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: не срабатывает RecordRefresh на курсорадаптере
AlexSSS
Автор

Сообщений: 6113
Откуда: Tallinn, Estonia
Дата регистрации: 19.09.2005
пока дополнял прошлое сообщение, ты уже ответил ;)

сейчас перепроверю, но скорее всего TABLEREVERT работает только с локальной таблицей и на сервер ничего не отправляет
Ratings: 0 negative/0 positive
Re: не срабатывает RecordRefresh на курсорадаптере
AlexSSS
Автор

Сообщений: 6113
Откуда: Tallinn, Estonia
Дата регистрации: 19.09.2005
в обоих случаях запросы на сервер абсолютно одинаковые (смотрел профайлер)
revert наверняка работает только на локальном компе



Исправлено 1 раз(а). Последнее : AlexSSS, 24.10.17 14:02
Ratings: 0 negative/0 positive
Re: не срабатывает RecordRefresh на курсорадаптере
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Цитата:
The RecordRefresh method refreshes the current field values for the target records. Use the CURVAL( ) Function to determine current field values.
Если запись изменена локально (GETFLDSTATE(-1) покажет так это или нет), то "отображаться" (т.е. возвращаться при обращении к курсор.поле) будут именно "локальные" данные, а не "свежачок с сервера". Этот самый свежачок доступен через функцию CURVAL("курсор.поле"). Ну или после "отмены" как собственно данные в курсор.поле
Реверт, конечно, ничего на сервер не шлёт, но он влияет на "соотношение" между OLDVAL/CURVAL/собственно_обращение_к_полю.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: не срабатывает RecordRefresh на курсорадаптере
AlexSSS
Автор

Сообщений: 6113
Откуда: Tallinn, Estonia
Дата регистрации: 19.09.2005
в таблице несколько десятков полей
перед редактированием записи я хочу скачать самые свежие данные по записи с сервера

и мне для этого надо проверять GETFLDSTATE(-1) на всех полях?
Ratings: 0 negative/0 positive
Re: не срабатывает RecordRefresh на курсорадаптере
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
GETFLDSTATE(-1) возвращает в виде строки статус для всех полей записи (включая признак удаления).
P.S. Ну а сами скачанные "свежие данные" гарантированно видны только через CURVAL(). "Напрямую" они видимы (т.е. произойдёт изменение отображаемых данных) только если запись НЕ изменялась, т.е. GETFLDSTATE(-1) вернёт строку из одних лишь единиц.


------------------
WBR, Igor




Исправлено 1 раз(а). Последнее : Igor Korolyov, 24.10.17 14:57
Ratings: 0 negative/0 positive
Re: не срабатывает RecordRefresh на курсорадаптере
AlexSSS
Автор

Сообщений: 6113
Откуда: Tallinn, Estonia
Дата регистрации: 19.09.2005
Игорь, спасибо огромное за помощь
GETFLDSTATE(-1) - теперь буду знать, раньше им никогда не пользовался ;)

заодно разобрался откуда в локальном курсоре у меня происходят изменения, про которые я не знал ;)
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 26 Владимир Максимов  (Гостей: 25)

© 2000-2024 Fox Club 
Яндекс.Метрика