Прошу не судить строго за мой вопрос.
Что если я читаю записи из файла:
Код: Выделить всё
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(....) , если в таблице есть Блобы.