2016-01-29 1 views
0

Как я могу искать больше, чем появление совпадений на основе ключевого слова в foxpro? Я хочу изменить поле chosen в таблице dl на T для всех строк, где существует полевое соответствие subdir в таблицах ctw и dl. Этот поиск соответствия будет повторяться для всех строк в пределах ctw. Записи в dl с равными subdir значениями не упорядочиваются последовательно.Ищет несколько случаев выражения

В настоящее время код выходит с конца файла встречается сообщений на линии 17 do while not eof() вложенного цикла после изменения chosen в T для dl записей, которые соответствуют только первому subdir значения ctw.

select 0 
use ctw 

select 0 
use dl 
index on subdir to subdir.idx 

select ctw 

do while .not. eof() 

    select dl 
    seek ctw -> subdir 

    if found() 
     do while not eof() 
      replace chosen with .t. for ctw -> subdir = dl -> subdir 
      skip 
     enddo 
    endif 

    select ctw 
    skip 
enddo 

ответ

0

Ваше кодирование очень старое. Вы получаете сообщение об ошибке, потому что:

заменить ... для ...

пересекает всю таблицу и оставляет указатель записи на дно. Затем выполнение ошибки вызывает ошибку.

Ваш код, также очень трудно читать и следить. Я бы пересмотрел его как:

Update dl Set chosen = .T. Where subdir In (Select subdir From ctw) 
+0

Не учитесь у 90-х годов prgs. 90-е годы были Foxpro 2.x дней, VFP - это другой зверь (как новый и другой язык). Вы также можете использовать такие сайты, как www.foxite.com и www.universalthread.com. Это все еще яркие специальные форумы foxpro. И даже если с 90-х годов код выше не подходит, измените свой источник. –