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

Откуда: Кинешма
Сообщений: 232
Подскажите пожалуйста, корректно ли такое решение проблемы:
UPDATE bookord SET bsfip_oncome_date=CTOD("31/12/2006") WHERE rn in(sele rn from c_bookord)

c_bookord - курсор, содержащий RN-ы, выбранные из другой таблицы.
Нужно заполнить в таблице bookord поле bsfip_oncome_date

Или лучше организовывать конструкцию SCAN - ENDSCAN ?

VFP 8.0

Заранее спасибо.
16 окт 06, 12:50    [3265149]     Ответить | Цитировать Сообщить модератору
 Re: Конструкция Update  [new]
Aleksey-K
Member

Откуда: Москва
Сообщений: 3116
Конструкция у вас верна, но, мне кажется, что через JOIN должно работать быстрее (при наличии индексов по rn в таблицах):

UPDATE bookord SET bsfip_oncome_date={^2006.12.31}
INNER JOIN c_bookord ON bookord.rn = c_bookord.rn
С уважением, Алексей
16 окт 06, 14:00    [3265754]     Ответить | Цитировать Сообщить модератору
 Re: Конструкция Update  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Я не уверен, что такая конструкция будет работать в VFP8.

Если есть индекс в таблице c_bookord по полю rn, то можно попробовать так:

USE c_bookord IN 0

UPDATE bookord SET bsfip_oncome_date={^31-12-2006}  ;
WHERE SEEK(bookord.rn,"c_bookord","rn")

* Или
select bookord
REPLACE bsfip_oncome_date WITH {^31-12-2006} ;
FOR SEEK(bookord.rn,"c_bookord","rn")

Здесь я предполагаю, что в таблице c_bookord есть индекс по полю rn, который так и называется rn
16 окт 06, 14:17    [3265925]     Ответить | Цитировать Сообщить модератору
 Re: Конструкция Update  [new]
_Mikle_
Member

Откуда: Кинешма
Сообщений: 232
Дело в том, что в курсоре c_bookord не более 1000 записей. Индекс не создавался, программа и так работает быстро, меня больше волнует правильность конечного результата.
16 окт 06, 14:31    [3266061]     Ответить | Цитировать Сообщить модератору
 Re: Конструкция Update  [new]
_Mikle_
Member

Откуда: Кинешма
Сообщений: 232
Данный кусок кода повторяется для нескольких таблиц, и хотелось как-то упростить читабельность кода, SCAN - ENDSCAN этому явно не способствует :-)
16 окт 06, 14:34    [3266078]     Ответить | Цитировать Сообщить модератору
 Re: Конструкция Update  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
_Mikle_
Дело в том, что в курсоре c_bookord не более 1000 записей. Индекс не создавался, программа и так работает быстро, меня больше волнует правильность конечного результата.

А какие есть сомнения на этот счет?

Сейчас "под рукой" нет VFP8, не могу проверить будет ли такая конструкция работать вообще. Но если она работает, то "на словах" означает следующее:

Присвоить в таблице bookord полю bsfip_oncome_date значение {^2006.12.31} для тех записей, значение поля rn которых равно значению поля rn хотя бы в одной записи таблицы c_bookord

Именно это и надо сделать?
16 окт 06, 14:48    [3266153]     Ответить | Цитировать Сообщить модератору
 Re: Конструкция Update  [new]
_Mikle_
Member

Откуда: Кинешма
Сообщений: 232
да, спасибо всем за участие, тема закрыта.
16 окт 06, 16:27    [3266902]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить