Страница 1 из 1

Вопрос по работе с файлом

Добавлено: 22 Март 2016, 10:17
dsabitov
Добрый день.
Прошу не судить строго за мой вопрос.

Что если я читаю записи из файла:

Код: Выделить всё

SET(db)
LOOP UNTIL EOF(db)
	NEXT(db); IF ERRORCODE()<>0 THEN BREAK.
END
Вот.. читаю себе и читаю.. Но, для каждой прочитанной записи из db мне нужно достать связанную запись из этого же файла, и в зависимости от полученного значения обновить какой-нибудь атрибут в прочитанной в цикле записи.
Реализуемо ли это без сохранения POINTER(db)?
Может быть с помощью классов?

Вопрос по работе с файлом

Добавлено: 22 Март 2016, 10:28
kreator
Самое простое сделать Alias, и всё. Кстати, какая база?

Вопрос по работе с файлом

Добавлено: 22 Март 2016, 10:29
dsabitov
База TopSpeed

Вопрос по работе с файлом

Добавлено: 22 Март 2016, 11:09
Игорь Столяров
Попробуй вот так:

Код: Выделить всё

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

Вопрос по работе с файлом

Добавлено: 22 Март 2016, 11:35
dsabitov
Игорь, спасибо большое!
Еще вопросик. Как объявить точно такой же файл, но с другим именем?
Допустим для QUEUE:

Код: Выделить всё

Q1	QUEUE
F1		STRING(20)
	END
	! Q2 точно такая же очередь, что и Q1
Q2	QUEUE(Q1)
	END
Можно ли что-то подобное сделать со структурой FILE?

Вопрос по работе с файлом

Добавлено: 22 Март 2016, 11:38
RaFaeL
Файл отдельно объявляется с полным отдельным описанием, а путь тот же
Это если руками. А в словаре alias и он сам сгенерит описание по образцу

Вопрос по работе с файлом

Добавлено: 22 Март 2016, 11:41
Игорь Столяров
RaFaeL писал(а): А в словаре alias и он сам сгенерит описание по образцу
Полностью согласен. И тогда можно не заморачиваться с восстановлением позиции при обработке в цикле.
Алиасы просто жрут память на буфер .... и в принципе иногда можно обходится без них, как я показал в примере.

Вопрос по работе с файлом

Добавлено: 22 Март 2016, 11:42
dsabitov
Ясно... а атрибут TYPE для структуры FILE можно использовать только в Clarion#... Жаль..
(Clarion 10)

Вопрос по работе с файлом

Добавлено: 22 Март 2016, 11:45
Yufil
У меня SaveFile просто грохалась, проверять надо..

Код: Выделить всё

SavePos String(1024) 

Loop 
    .... 
    ! Сохраняем позицию по ключу 
    SavePos = Position(Key)
    .... 
    !Делаем  что хотим 
    ... 
    ! Восстанавливаем позицию и ползём дальше 
    Reset(key,SavePos) 
    Next(File) 
End 

Вопрос по работе с файлом

Добавлено: 22 Март 2016, 11:49
Игорь Столяров
Yufil писал(а): У меня SaveFile просто грохалась, проверять надо..
Пример взят из боевой программы (драйвер TopSpeed, Btrieve). Работает как часы ... C63 - C10

Вопрос по работе с файлом

Добавлено: 22 Март 2016, 11:59
dsabitov
Так... у меня возникла маленькая путаница... В чем отличие POINTER(Key) от POSITION(key)?
Прошу прощения... внимательно прочитал HELP. POSITION подходит к любому драйверу, POINTER не к любому...

Вопрос по работе с файлом

Добавлено: 22 Март 2016, 20:23
Yufil
Игорь Столяров писал(а):
Yufil писал(а): У меня SaveFile просто грохалась, проверять надо..
Пример взят из боевой программы (драйвер TopSpeed, Btrieve). Работает как часы ... C63 - C10
Там есть проблема в MS SQL на строке RESTORESTATE(....) , если в таблице есть Блобы.
А в Topspeed работает- сам кучу раз пользовал.