2015-06-11 2 views
0

Я занимаюсь разработкой программы, сделанной в FoxPro.заменить на for в Foxpro

Я ничего не знаю о FoxPro, к счастью, программа проста и более или менее я мог понять все процессы

У меня есть это, в исходном коде

Select 1 
SET RELATION TO GROUP_T+POL INTO BASE2 
REPLACE MARK_T WITH BASE2->STATUS FOR GROUP_T+POL=BASE2->GROUP_T+POL 
REPLACE LAPSE2 WITH BASE2->LAPSE FOR GROUP_T+POL=BASE2->GROUP_T+POL 
REPLACE STATUS2 WITH BASE2->STATUS FOR GROUP_T+POL=BASE2->GROUP_T+POL 
REPLACE DATPAHAS2 WITH BASE2->DATPAHAS FOR GROUP_T+POL=BASE2->GROUP_T+POL 
CLOSE DATABASES 

мне нужно знать, из где переменная LAPSE2 используется позже.

Но я не знаю, как рассчитывается

Что это значит?

REPLACE LAPSE2 WITH BASE2->LAPSE FOR GROUP_T+POL=BASE2->GROUP_T+POL 

Это единственная линия, которая появляется перед использованием позже в состоянии

ответ

2

Во фрагменте, который вы показали, значение каждой LAPSE2 в текущей таблице заменяется значением LAPSE поля первой записи соответствия в BASE2 на основе индекса, установленного в этой таблице.

Предложение FOR ограничивает это для записей, имеющих соответствующие записи в BASE2; несогласованные записи пропускаются (остаются неизменными). Без этого фильтра новое значение для LAPSE2 будет пустым значением ('', .f., 0, ...), когда нет соответствующей записи.

Примечания: а REPLACE без FOR или WHILE затронет только одну запись, так как отсутствие пункта области видимости подразумевает NEXT 1 (другой способ смотреть на него будет то, что FOR рода подразумевает ALL и WHILE рода подразумевают REST).

Оператор SET RELATION в начале фрагмента кода заставляет Fox выполнять поиск в таблице BASE2 с результатом вычисления выражения GROUP_T+POL при изменении указателя записи. Иначе говоря: всякий раз, когда указатель записи перемещается в главной таблице, указатель записи в дочерней таблице (ей) перемещается в первую соответствующую запись (если есть) или в EOF, если совпадений нет.

Следовательно, сочетание SET RELATION с REPLACE ... FOR <key match> похож на

replace LAPSE2 with Base2.LAPSE for seek(GROUP_T + POL, [Base2]) 

Примечание: это утверждение предназначено только для иллюстрации того, что происходит; он никогда не должен использоваться в реальном коде, потому что это чревато проблемами и ошибками.