Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / TableRevert у курсорадаптера возвращает 1, а не 0. / 4 сообщений из 4, страница 1 из 1
07.03.2016, 17:35
    #39187258
Sergej_S
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TableRevert у курсорадаптера возвращает 1, а не 0.
Приветствую бывших коллег! Давно не брал я в руки шашку, но пришлось вспомнить, сижу, получаю удовольствие [без сарказма].

Вопрос такой: вот выжимка кода, я почему-то думал, что после команды 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
07.03.2016, 18:04
    #39187268
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TableRevert у курсорадаптера возвращает 1, а не 0.
Посмотри на проблему с другой стороны. Есть разница между "ничего не ввели" и "ввели тоже самое что было".
Код: sql
1.
REPLACE f1 WITH OLDVAL('f1')


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

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

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


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