Прошу не судить строго за мой вопрос.
Что если я читаю записи из файла:
Код: Выделить всё
SET(db)
LOOP UNTIL EOF(db)
	NEXT(db); IF ERRORCODE()<>0 THEN BREAK.
END
Реализуемо ли это без сохранения POINTER(db)?
Может быть с помощью классов?
Модератор: Дед Пахом
Код: Выделить всё
SET(db)
LOOP UNTIL EOF(db)
	NEXT(db); IF ERRORCODE()<>0 THEN BREAK.
END
Код: Выделить всё
Loc:SaveState  ushort
  Code
  
  Set(MyFile)
  Loop until Access:MyFile.Next()
     Loc:SaveState = Access:MyFile.SaveFile()
     
     Clear(MyFile.Record)
     MyFile.ID = ...  ! Считываем произвольную запись в файле
     If ~Access:MyFile.Fetch(MyFile.ByID) 
        ... ! Получаем данные, вносим изменения 
        If Access:MyFile.UpDate() then Break. ! Если были изменения сохраняем
     end
     
     Access:MyFile.RestoreFile(Loc:SaveState)
     
     ! и дальше обрабатываем данные в обычном порядке Loop until Access:MyFile.Next()
  end
Код: Выделить всё
Q1	QUEUE
F1		STRING(20)
	END
	! Q2 точно такая же очередь, что и Q1
Q2	QUEUE(Q1)
	END
Полностью согласен. И тогда можно не заморачиваться с восстановлением позиции при обработке в цикле.
Код: Выделить всё
SavePos String(1024) 
Loop 
    .... 
    ! Сохраняем позицию по ключу 
    SavePos = Position(Key)
    .... 
    !Делаем  что хотим 
    ... 
    ! Восстанавливаем позицию и ползём дальше 
    Reset(key,SavePos) 
    Next(File) 
End 
Пример взят из боевой программы (драйвер TopSpeed, Btrieve). Работает как часы ... C63 - C10
Там есть проблема в MS SQL на строке RESTORESTATE(....) , если в таблице есть Блобы.