Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 как нештатными средствами изменить значение oldval для поля в курсоре ?  [new]
strizh
Member

Откуда: Киев
Сообщений: 937
Есть SPT-курсор. В нем надо для одного из полей принудительно изменять значения oldval для одного из полей, чтобы tableupdate его подхватывала (я долго шел к этой необходимости, поверьте - надо). Как это сделать ?
Если я делаю
select mtable
replace mfield with newval
setfldstate("mfield",1,"mtable")
то все равно oldval("mfield","mtable") возвращает старое значение. А как это правильно сделать ?
27 дек 04, 13:29    [1211604]     Ответить | Цитировать Сообщить модератору
 Re: как нештатными средствами изменить значение oldval для поля в курсоре ?  [new]
Hel!Riser
Member

Откуда: Нижний Новгород
Сообщений: 972
дык сразу после реплейса заапдейть таблицу и фсего делоф
27 дек 04, 14:04    [1211816]     Ответить | Цитировать Сообщить модератору
 Re: как нештатными средствами изменить значение oldval для поля в курсоре ?  [new]
strizh
Member

Откуда: Киев
Сообщений: 937
To Hel!Riser:
Это понятно, но это приводит к передаче на сервер мусорных операторов типа update mtable set mfield = null. А оно надо ?
27 дек 04, 15:17    [1212183]     Ответить | Цитировать Сообщить модератору
 Re: как нештатными средствами изменить значение oldval для поля в курсоре ?  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Для одного поля это сделать невозможно. Минимальной неделимой единицей буфера является запись.

Так что, либо смирись с "мусорными" UPDATE, либо откатывай буфер одной (текущей) записи по TableRevert(.F.).

Кроме того, собсвенно сброс буфера можно делать не одной командой TableUpdate(), а также по одной записи за раз в цикле по GetNextModified()

Ну, и наконец, можешь ручками формировать команду для сервера на основе сожержимого буфера и посылать ее черех SQLExec().
27 дек 04, 21:25    [1213267]     Ответить | Цитировать Сообщить модератору
 Re: как нештатными средствами изменить значение oldval для поля в курсоре ?  [new]
Igor Korolyov
Member

Откуда: Гомель, Беларусь
Сообщений: 2512

Hi strizh!

В общем случае для этого надо разобрать внутренние структуры фокса - как он
организует буфер, как его заполняет и т.п. - ну и потом через АПИ функции
работы с памятью менять содержимое буфера. Только не жди советов - я сильно
сомневаюсь что подобной информацией владеет хоть кто-то, кроме собственно
разработчиков движка фокса (а они не дадут, ибо это явно закрытая
информация), что данные структуры не меняются от версии к версии, что
реализация подобного "вмешательства" в дела фокса не отразится пагубно на
стабильности работы, и что вообще это будет сделать проще чем ПОЛНОСТЬЮ
переписать твою программу, отказавшись от авто-обновлений (которые и делает
фокс на основе OLDVAL, текущего значения полей в соответствии с WhereType) в
пользу "ручных" команд. Если фокс свежий - используй CursorAdapter - там
можно явно прописывать команды для обновления данных (указывая то что тебе
надо, а не только OLDVAL()).

Posted via ActualForum NNTP Server 1.1

29 дек 04, 00:42    [1216742]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить