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

Как работать с таблицей Handcoded?

Добавлено: 23 Июль 2010, 14:04
Evgeny2006
Версия 6.0 0915
Имеется БД 'TopSpeed' состоящая из 3-х файлов (на ней я учусь). С помощью AppGen сгенерирована программа для заполнения и обновления данных. Понадобилось написать вручную программу, которая выбирает данные из двух таблиц и формирует новую таблицу. С чем столкнулся. Первая таблица нормально работает, а вторая, связанная с ней, хотя и обрабатывается отдельно, показывает, что в ней нет записей. Но записи есть. Похоже, что как-то надо открывать БД, но не могу найти. Подскажите,пожалуйста, как это делается.
Мой e-mail: e.baranov2006@gmail.com

Заранее благодарен.

Re: Как работать с таблицей Handcoded?

Добавлено: 23 Июль 2010, 15:08
StillZero
вопрос задан некорректно...
куски кода бы помогли указать...
6.0 не лучший вариант, переходи на 6.3

Re: Как работать с таблицей Handcoded?

Добавлено: 23 Июль 2010, 17:11
Evgeny2006
Большое спасибо за быструю реакцию.
У меня две версии Clarion: 6.0 0915 и 7.0.0 5768. То что смог скачать. Сам чувствую, что обе версии с глюками, но других нет.
Теперь куски кода. Я, честно говоря, не знаю нужно их зиповать. На форуме появился от безисходности. Ранее в форумах не участвовал. Так даю, что есть. Файлы TLs, Coridors, Region созданы в Dictionary. Файл TLView - новый. в который я и хочу поместить данные из TLs и Coridors. Поскольку нарвался на не понимание со стороны проги, сделал вырезки и создал тестовый файл. Ох, что-то много пишу. Итак текст проги.

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

    PROGRAM
    INCLUDE('Keycodes.CLW')
    INCLUDE('Errors.CLW')

    MAP
Main            PROCEDURE
BrowseFormView  PROCEDURE
    END


Coridors   FILE,DRIVER('TopSpeed'),PRE(COR)
!corTLkey  KEY(COR:numTL),DUP,NOCASE
Rec2       RECORD
numCor      LONG
numTL       LONG
nameCor     STRING(40)
region      STRING(20)
lenCor      LONG
widCor      LONG
           END  
          END        

TLView     FILE,DRIVER('TopSpeed'),PRE(TLV),CREATE  
!TLVTLkey  KEY(TLV:numCor),NOCASE,OPT
Rec3       RECORD
numCor      LONG
numTL       LONG
nameCor     STRING(40)
region      STRING(20)
napr        SHORT
cepn        BYTE
lenCor      LONG
widCor      LONG
           END  
          END        


    CODE
    Main  

!-----------------------------------------------------
Main   PROCEDURE
AppFrame APPLICATION('Формирование VIEW'),AT(,,280,200),SYSTEM,RESIZE,MAX
      MENUBAR
       MENU('&File'),USE(?File)
         ITEM('Создать View'),USE(?FileFormView)
         ITEM,SEPARATOR
         ITEM('E&xit'),USE(?FileExit),STD(STD:Close)
       END
      END
     END

    CODE
    OPEN(AppFrame)
    ACCEPT
     CASE ACCEPTED()
     OF ?FileFormView
      START(BrowseFormView,55000)
     END
   END

BrowseFormView PROCEDURE
varnapr SHORT
varcepn BYTE
   CODE

   OPEN(Coridors)
   RecCors# = RECORDS(Coridors)
   MESSAGE('Число записей in Coridors = ' & RecCors#)

   CLOSE(Coridors)
   return

Re: Как работать с таблицей Handcoded?

Добавлено: 23 Июль 2010, 20:17
Дед Пахом
В качестве гипотезы: попробуйте добавить атрибут THREAD к объявлению файлов (хотя бы коридоров).

PS
неплохо бы ещё и проверять файловые операторы на ошибки (ERRORCODE()), и второе - Вы уверены, что файл Coridors.tps в текущей папке имеет записи?

Re: Как работать с таблицей Handcoded?

Добавлено: 23 Июль 2010, 21:18
Evgeny2006
THREAD добавил для Coridors. Результат тот же.

Coridors FILE,DRIVER('TopSpeed'),PRE(COR),THREAD
Я согласен с необходимостью проверок на ошибки. Но в данном примере я определяю только количество записей в файле. И когда я обнаружил ноль записей, я забыл про необходимость проверки. Записи же есть.
Вышел из Clarion. Запустил exe файл. Результат тот же.
В этой же папке находится файл Coridors. Проверил его содержимое. Он содержит 3 записи.
К сожалению не знаю, как вставить сюда изображение файла, в котором содержатся записи. Я сделал Print Screen, а полученную картинку вставил с помощью Paint.
Я все-же подозреваю, что поскольку Coridors строился с помощью Dictionary, то имеется какая-то связь с файлом .dct.
Я разнес файлы по разным папкам, но все без успеха.
Почему у меня такие подозрения. Есть БД, содержащая отдельные файлы, которые связаны с ней. То что я переместил сам файл в другую папку, файл по большому счету не является независимым. Должен быть такой подход- открыть БД, открыть файл. Но как открывать БД, я и не могу найти. Может в Clarion другой подход?
Если бы Вы дали e-mail. то я бы Вам отправил по почте эти файлы. Они всего-то 5 кб.
Мой e-mail: e.baranov2006@gmail.com

Искренне ваш

Re: Как работать с таблицей Handcoded?

Добавлено: 23 Июль 2010, 22:09
Дед Пахом
Я не могу понять, что значит открывать БД. Нет, могу, но в случае TPS это не имеет смысла - все файлы/таблицы независимы, нет никакой БД в смысле единого целого.

Можете выслать мне для проверки Ваши таблицы (почта в моём профайле), но у нас тут жара под 40 оборотов, делать ничего не хочется.

Re: Как работать с таблицей Handcoded?

Добавлено: 23 Июль 2010, 23:20
Evgeny2006
Относительно БД. Я вообщем-то выходец из FoxPro. поэтому такое мышление.
Вы оказались правы насчет необходимости осуществлять проверку на ошибки.
Вставил проверку. Прога ругается, что "Инвалидное определение записи". Сверил построчно.
Все один к одному. Единственное сомнение: поле region определялось с учетом Validity Check.
Также нет четкого понимания где хранятся ключи. Прикладываю файлы.
Жара в Питере послабее, но на дачу ехать не хочу, т.к. там еще жарче, а дома есть кондиционер.

Re: Как работать с таблицей Handcoded?

Добавлено: 24 Июль 2010, 11:58
Evgeny2006
Я не зря бубнил все время про БД. К сожалению я новичок в Clarion и не все успел прочитать.
Более того, зная об ООП в языке, я оставлял эти темы на потом.
Вчера вечером в продолжение открытия файлов ручками, я обнаружил, что требуется специальное открытие файлов.
Этот кусок кода генерится самой системой. Можно, конечно, его скопировать и на его основе попытаться доделать свою задачку. Это я и буду делать.
В свете изложенного я составил тестовую прогу , в которой выделил из Dictionary только один файл. Заполнил несколько записей и Что. Опять не работает. Хотя в первом тесте праймери файл открывался, а вторичный нет. В последнем тесте и праймери перестал открываться.
Винить ООП смысла нет, а вот авторы системы делают все, чтобы в нее нельзя было влезть с боку.
Задача, которую я пытаюсь решить заключается в следующем.
Имеется несколько связанных файлов и мне надо без генератора отчета подбить разные итоги или составить разные итоговые таблицы для просмотра. Вроде бы подходит VIEW, но представление в Clarion плохенькое.
Вот и вынужден переходить на работу ручками.

Re: Как работать с таблицей Handcoded?

Добавлено: 24 Июль 2010, 15:04
Дед Пахом
У Вас неверно были задекларированы (а сейчас просто закомментированы) ключи. Чтобы их правильно описать, откройте TopScan-ом нужную таблицу, в меню File > File Layout... будет вся структура этой таблицы. Её можно скопировать в код. Всё работает, я проверял.

Re: Как работать с таблицей Handcoded?

Добавлено: 24 Июль 2010, 17:06
Evgeny2006
Большое спасибо!!!!
К моменту получения Вашего сообщения, я стал просматривать (открывать) файл разными программами и обнаружил у себя программу "TopSpeed Database Scaner". Эта программа свободно открывает мой файл. Правда там появляется еще одно поле- Номер Записи, только по английски. Я пытался изменить размер своей записи, но прога все время ругается. Полез в Bin-директорий и нашел Help файл на этот сканер. Там приведены опции, в том числе анализа файла и его сохранения (печати). Скопировал в прогу и перепроверил все описание данных, вставляя построчно каждое описание.
Все, заработало.
Все равно, огромное СПАСИБО.
А то я уж ненароком заподозрил разработчиков Clarion.