Страница 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
ИМХО, Дед Пахом описал наилучшее и наиболее правильное решение, так что искать что-то дальше нет смысла.