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

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
dsabitov
Посетитель
Сообщения: 44
Зарегистрирован: 02 Апрель 2011, 12:30

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

Сообщение dsabitov »

Добрый день.
Прошу не судить строго за мой вопрос.

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

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

SET(db)
LOOP UNTIL EOF(db)
	NEXT(db); IF ERRORCODE()<>0 THEN BREAK.
END
Вот.. читаю себе и читаю.. Но, для каждой прочитанной записи из db мне нужно достать связанную запись из этого же файла, и в зависимости от полученного значения обновить какой-нибудь атрибут в прочитанной в цикле записи.
Реализуемо ли это без сохранения POINTER(db)?
Может быть с помощью классов?
kreator
✯ Ветеран ✯
Сообщения: 5189
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

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

Сообщение kreator »

Самое простое сделать Alias, и всё. Кстати, какая база?
We are hard at work… for you. :)
dsabitov
Посетитель
Сообщения: 44
Зарегистрирован: 02 Апрель 2011, 12:30

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

Сообщение dsabitov »

База TopSpeed
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8090
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 29 раз
Поблагодарили: 98 раз

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

Сообщение Игорь Столяров »

Попробуй вот так:

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

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
Make Clarion Great Again ! 😎
dsabitov
Посетитель
Сообщения: 44
Зарегистрирован: 02 Апрель 2011, 12:30

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

Сообщение dsabitov »

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

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

Q1	QUEUE
F1		STRING(20)
	END
	! Q2 точно такая же очередь, что и Q1
Q2	QUEUE(Q1)
	END
Можно ли что-то подобное сделать со структурой FILE?
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1412
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 12 раз
Поблагодарили: 2 раза
Контактная информация:

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

Сообщение RaFaeL »

Файл отдельно объявляется с полным отдельным описанием, а путь тот же
Это если руками. А в словаре alias и он сам сгенерит описание по образцу
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8090
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 29 раз
Поблагодарили: 98 раз

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

Сообщение Игорь Столяров »

RaFaeL писал(а): А в словаре alias и он сам сгенерит описание по образцу
Полностью согласен. И тогда можно не заморачиваться с восстановлением позиции при обработке в цикле.
Алиасы просто жрут память на буфер .... и в принципе иногда можно обходится без них, как я показал в примере.
Make Clarion Great Again ! 😎
dsabitov
Посетитель
Сообщения: 44
Зарегистрирован: 02 Апрель 2011, 12:30

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

Сообщение dsabitov »

Ясно... а атрибут TYPE для структуры FILE можно использовать только в Clarion#... Жаль..
(Clarion 10)
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

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

Сообщение Yufil »

У меня SaveFile просто грохалась, проверять надо..

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

SavePos String(1024) 

Loop 
    .... 
    ! Сохраняем позицию по ключу 
    SavePos = Position(Key)
    .... 
    !Делаем  что хотим 
    ... 
    ! Восстанавливаем позицию и ползём дальше 
    Reset(key,SavePos) 
    Next(File) 
End 
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8090
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 29 раз
Поблагодарили: 98 раз

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

Сообщение Игорь Столяров »

Yufil писал(а): У меня SaveFile просто грохалась, проверять надо..
Пример взят из боевой программы (драйвер TopSpeed, Btrieve). Работает как часы ... C63 - C10
Make Clarion Great Again ! 😎
dsabitov
Посетитель
Сообщения: 44
Зарегистрирован: 02 Апрель 2011, 12:30

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

Сообщение dsabitov »

Так... у меня возникла маленькая путаница... В чем отличие POINTER(Key) от POSITION(key)?
Прошу прощения... внимательно прочитал HELP. POSITION подходит к любому драйверу, POINTER не к любому...
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

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

Сообщение Yufil »

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