Страница 1 из 1
					
				Обратиться в цикле к полям записи
				Добавлено: 10 Февраль 2006, 7:05
				 PaNik
				Суть: Сравниваем записи из идентичных по структуре баз. 
Вопрос: Можно ли обратиться к полям записи не по имени, а по каким-либо индексам? Чтобы не перечислять все поля а запустить проверку в цикле. Как количество полей получить нашел, а вот как обратиться и тем более поменять значение - увы... 

 
			
					
				
				Добавлено: 10 Февраль 2006, 9:33
				 Дед Пахом
				Сперва получаешь ссылки на записи этих файлов:
gr1  &GROUP
gr2  &GROUP
  gr1 &= File1{prop:record}
  gr2 &= File2{prop:record}
field1  ANY
field2  ANY
LoopIndex  LONG,AUTO
потом в цикле проходишься по полям
  LoopIndex=1
  LOOP
    field1 &= WHAT(gr1,LoopIndex)
    IF field1 &= NULL
      BREAK
    END
    field2 &= WHAT(gr2,LoopIndex)
    IF field2 &= NULL
      BREAK
    END
    !теперь сравнение содержимого
    IF field1 <> field2
      field2=field1
    END
    !следующее поле
    LoopIndex+=1
  END
  !тут мы оказались, когда прошлись по всем полям одной записи
  !можем обновить один из файлов
  PUT(field2)
			 
			
					
				
				Добавлено: 10 Февраль 2006, 9:53
				 PaNik
				Спасибо! Буду разбираться...
			 
			
					
				
				Добавлено: 10 Февраль 2006, 17:38
				 iBAH
				Пример из хелпа(F1->GET)
Код: Выделить всё
LOOP I#=1 TO RECORDS(SomeFile)
  GET(SomeFile,I#) !по порядку заполнения
  !GET(SomePRE:NameKey,I#) !если хочешь в порядке по ключу
  IF ERRORCODE() THEN STOP(ERROR()).
  !делаешь все что надо 
  !записываешь
  PUT(SomeFile)
END 
 
			
					
				
				Добавлено: 10 Февраль 2006, 19:12
				 PaNik
				iBAH писал(а):Пример из хелпа(F1->GET)
... Мне не по записям, а по полям. Но есть и положительное зерно - глянул в Хелп и натолкнулся на конструкцию GetField.. 

 Может и оттуда нарою...
 
			
					
				
				Добавлено: 16 Февраль 2006, 9:43
				 ru_alex
				ИМХО, Дед Пахом описал наилучшее и наиболее правильное решение, так что искать что-то дальше нет смысла.