Страница 1 из 1
					
				Работа с файлами
				Добавлено: 03 Октябрь 2012, 17:38
				 pilotav
				Добрый день, коллеги.
Вопрос конечно глупый, но я что-то не понимаю, что в приведенном коде не правильно. Clarion 2
Файл, с которым работаю dat, получен из dbf путем конвертации родным кларионовским конвертером. В нем 4 записи. при этом в приведенном коде проходит только один цикл, т.е. вычитывается только первая запись и все.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
   MEMBER ('GLadmin')
EXPORT_DBF  PROCEDURE
cdbf   FILE, PRE(C1),NAME('..\cvetdbf.dat')
Record RECORD
KOD    REAL
NAME   STRING(10)
S_NAME STRING(20)
       . .
 code
      OPEN(cdbf)
      SHARE(GL_CVET)
      LOCK(GL_CVET)	
      SET(cdbf)
      LOOP UNTIL EOF(cdbf)
	NEXT(cdbf)
       CLEAR(CVT:Record )
       CVT:KOD = C1:KOD
       CVT:NAME = C1:NAME
       CVT:S_NAME = C1:S_NAME
       ADD(GL_CVET)
      END
      UNLOCK(GL_CVET)
++++++++++++++++
Спасибо
Андрей
			 
			
					
				Re: Работа с файлами
				Добавлено: 04 Октябрь 2012, 10:48
				 BOB
				Считывается все , посмотри в GL_CVET ключи на уникальность и вставь после ADD(GL_CVET) типа  if errorcode() message(error()) end
			 
			
					
				Re: Работа с файлами
				Добавлено: 08 Октябрь 2012, 11:47
				 pilotav
				Как проверить индексы на уникальность?
Пробовал так - перед запускаом приложения - удалил файлы для Ключей GL_CVET. Соответственно они были срозданы заново.
Ситуация таже.
А как влияют ключи GL_CVET на чтение из файла "источника"
Спасибо
Андрей
			 
			
					
				Re: Работа с файлами
				Добавлено: 08 Октябрь 2012, 12:00
				 BOB
				А как влияют ключи GL_CVET на чтение из файла "источника"
Да никак , у вас читаются скорее всего все строки , записываются не все . Чтобы это выяснить поставте после ADD(GL_CVET) строку  if errorcode() message(error()) end если есть ошибки записи вы их увидите, заодно и посчитаете сколько строк считывается , на четыре записи у вас будет три ошибки  .
			 
			
					
				Re: Работа с файлами
				Добавлено: 08 Октябрь 2012, 14:14
				 pilotav
				Следующий код,
      OPEN(cdbf)
      run('echo rn= ' & RECORDS(cdbf))
      SET(cdbf)
       NEXT(cdbf)
       run('echo r=' & C1:KOD)
       run('echo r=' & C1:NAME)
       run('echo r=' & C1:S_NAME)
       run('echo ' & EOF(cdbf))
   if errorcode()
       run('echo error')
   .
       NEXT(cdbf)
       run('echo r=' & C1:KOD)
       run('echo r=' & C1:NAME)
       run('echo r=' & C1:S_NAME)
       run('echo ' & EOF(cdbf))
       NEXT(cdbf)
       run('echo r=' & C1:KOD)
       run('echo r=' & C1:NAME)
       run('echo r=' & C1:S_NAME)
       run('echo ' & EOF(cdbf))
       NEXT(cdbf)
       run('echo r=' & C1:KOD)
       run('echo r=' & C1:NAME)
       run('echo r=' & C1:S_NAME)
       run('echo ' & EOF(cdbf))
       NEXT(cdbf)
       run('echo r=' & C1:KOD)
       run('echo r=' & C1:NAME)
       run('echo r=' & C1:S_NAME)
       run('echo ' & EOF(cdbf))
++++++++++++++++++++
Дает следующий результат
rn= 4
r=1
r=AAAA
r=AAAAA
1
r=1
r=AAAA
r=AAAAA
1
r=1
r=AAAA
r=AAAAA
1
r=1
r=AAAA
r=AAAAA
1
r=1
r=AAAA
r=AAAAA
1
Т.е. получается, что навигации по файлу нет. Количество записей возвращается правильно - 4 штуки, но вот NEXT() свое не отрабатывает.
Я всетаки думаю, что проблемма в индексе для файла cdbf. Как его можно программно создать?
Потому, что если я объявлю файл с описанием индекса, соответственно получаю ошибку - "Incorrect record declaration" - потому, что в полученном dat файле нет описаниея индекса.
Спасибо
Андрей
			 
			
					
				Re: Работа с файлами
				Добавлено: 08 Октябрь 2012, 15:18
				 samo_let
				Попробуй так: 
OPEN(cdbf)
IF ErrorCode() Then Stop(Error()).
Clear(C1:Record)
SET(cdbf)
LOOP
   NEXT(cdbf)
   If ErrorCode() 
     Stop('Next Err='& Error())
     Break
  End
  stop(C1:KOD)
END
Что получаешь?
			 
			
					
				Re: Работа с файлами
				Добавлено: 08 Октябрь 2012, 15:50
				 pilotav
				c небольшой косметикой работает.
Спасибо двойное - за код и за понимание как работает debuger.
Сейчас попробую это применит.
			 
			
					
				Re: Работа с файлами
				Добавлено: 08 Октябрь 2012, 16:16
				 pilotav
				Работает. Спасибо
Только вот спортивный интерес - что ж не правильно было в начальном коде?
			 
			
					
				Re: Работа с файлами
				Добавлено: 08 Октябрь 2012, 17:21
				 samo_let
				ХЗ - думаю, что SET устанавливал произвольно начальную позицию от которой производились NEXT-ы
Вполне м.б. на последней записи стоял. Clear(Record) скорее всего помог...
И лучше UNTIL EOF не использовать - быстрее будет работать, если как я написал - проверять после NEXT на ошибку.