powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / TableRevert у курсорадаптера возвращает 1, а не 0.
4 сообщений из 4, страница 1 из 1
TableRevert у курсорадаптера возвращает 1, а не 0.
    #39187258
Sergej_S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую бывших коллег! Давно не брал я в руки шашку, но пришлось вспомнить, сижу, получаю удовольствие [без сарказма].

Вопрос такой: вот выжимка кода, я почему-то думал, что после команды REPLACE f1 WITH OLDVAL('f1') фокс будет считать, что поле нe было изменено и TABLEREVERT вернет 0 записей. Ан нет. Т.к. мне архиннужно, чтобы он вернул 0, то пока ничего не придумал кроме как перед вызовом TABLEREVERT выполнить SETFLDSTATE('f1', 1). Це нормальный подход или можно без SETFLDSTATE как-то обойтись?



Код: sql
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.
CREATE TABLE t1 (f1 D NOT NULL)
APPEND BLANK 
REPLACE f1 WITH DATE(1900,1,1)
?f1		&&vidaet: 01.01.1900 

oCA = NEWOBJECT('Cursoradapter')
oCA.DataSourceType = 'NATIVE'
oCA.Alias = 'csr_t1'
oCA.SelectCmd = 'SELECT f1 FROM t1'
oCA.CursorFill()


SELECT csr_t1
?"GETFLDSTATE=" + TRANSFORM( GETFLDSTATE('f1'))  &&vidaet: 1 (=Field has NOT been modified )

REPLACE f1 WITH CTOD('')    
?f1		&&vidaet: {  .  .    } 
?"GETFLDSTATE=" + TRANSFORM( GETFLDSTATE('f1'))  &&vidaet: 2 (=Field HAS been modified )

REPLACE f1 WITH OLDVAL('f1')      && @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
?f1		&&vidaet: 01.01.1900 
?"GETFLDSTATE=" + TRANSFORM( GETFLDSTATE('f1'))  &&vidaet: 2 (=Field HAS been modified )

?TABLEREVERT(.t., 'csr_t1')		&&vidaet: 1 
?f1		&&vidaet: 01.01.1900 

RELEASE oCA 
DROP TABLE t1
...
Рейтинг: 0 / 0
TableRevert у курсорадаптера возвращает 1, а не 0.
    #39187268
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри на проблему с другой стороны. Есть разница между "ничего не ввели" и "ввели тоже самое что было".
Код: sql
1.
REPLACE f1 WITH OLDVAL('f1')


ты сообщаешь что надо заменить текущее значение на исходное для тебя. Но в БД оно могло уже поменяться на что-то третье кем-то другим, но тут ты сообщаешь что третьего не дано.

Если тебе надо откатится к исходным значениям - используй tablerevert()
...
Рейтинг: 0 / 0
TableRevert у курсорадаптера возвращает 1, а не 0.
    #39187412
Sergej_S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЕсли тебе надо откатится к исходным значениям - используй tablerevert() да, я его и использую, просто результат оказался для меня неожданным.
(вся эта кухня у меня работает в контролах по работе с КАД и для дат идет подмена '1900-01-01' на ctod('') )

Dima TНо в БД оно могло уже поменяться на что-то третье кем-то другим
да, это помогло с пониманием, спасибо.
...
Рейтинг: 0 / 0
TableRevert у курсорадаптера возвращает 1, а не 0.
    #39187423
Sergej_Sдля дат идет подмена '1900-01-01' на ctod('') )Похоже, для кого-то дата не может существовать без строкового представления и постоянных конвертаций туда-сюда-обратно...
ctod('') == {}
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / TableRevert у курсорадаптера возвращает 1, а не 0.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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