Конвертация из одной таблицы в несколько

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
sachilo
Прохожий
Сообщения: 2
Зарегистрирован: 24 Май 2008, 12:10

Конвертация из одной таблицы в несколько

Сообщение sachilo »

Возникла такая необходимость перегонять из однового формата в другой в Clarione слаб, но вот что смог проделать

Имеется таблица CLA2_TABLE1 (clarion 2.1 (*.dat))
И база состоящая из 3 таблиц (clarion 6(*.tps))
CLA6_TABLE1 CLA6_TABLE2 CLA6_TABLE3

CLA2_TABLE1 - префикс M00
__________
|Gos_num |
|MODEL |
|NUMDVIG |
|NUMVIN |
|... |
|VLADEL |
|GOD_R |
|ADRES |


CLA6_TABLE1 (ОСНОВНАЯ) AMTS.TPS префикс AMT
___________
|Kodamts | CLA6_TABLE2 (СПРАВОЧНИК ПО МАРКАМ) MOD
|Gos_num | _________
|KOD_MOD |--->|KODMOD |
|CVET | |NAMEMOD |
|NUMDVIG | ----------
|NUMVIN | CLA6_TABLE3 (СПРАВОЧНИК ПО ЛЮДЯМ)
|NUMVIN | _________
|KOD_VLAD |--->|KODVLAD |
|CVET | |NAMEVLAD|
|... | |GOD_R |
|ADRES |

Стоит задача конвертнуть из CLA2_TABLE1 в 3 таблицы
В Main открыл процедуру Beginning of procedure, After Opening Files и там написал для запуска в дальнейшем из шедуллера

! Смотрим параметры командной строки

if Command('/GO') ! Будем конвертить старую базу

convertAMT

Return
end

Далее создал процедуру convertAMT (Process)
Выбрал GetNextRecord ROUNTINE, Next succeds

! пытаемся конвертнуть M00 в AMTC и
! ставим условие районы
IF M00:RAION = 40 or M00:RAION = 41 or M00:RAION = 42 or M00:RAION = 43 or M00:RAION = 44 THEN



! смотрим есть ли в базе
AMT:GOSZNAK = M00:GOS_NUM
SET(AMTC,AMT:GOSZNAK)
IF (ERROR()) THEN
SET(AMTC,AMT:BYKODAMTC)
GET(AMTC,AMT:BYKODAMTC)
PREVIOUS(AMTC) ! встаем на послед запись
! . ! чтобы получить новый код
MYMAXIMUM = AMT:KODAMTC + 1 (автомат доб код)
AMT:KODAMTC = MYMAXIMUM
!AMT:KODAMTC
! AMT:KODAMTC = MAXIMUM(AMT:BYKODAMTC)+1
! вставляем в справочник модель
MOD:NAMEMODEL = M00:MARKA
! GET(MODEL,MOD:NAMEMODEL)
SET(MODEL,MOD:NAMEMODEL)
IF ERROR() THEN
! тут тоже надо как то увеличить код модели
MOD:NAMEMODEL = M00:MARKA
append(MODEL)
AMT:KODMOD = MOD:KODMOD
ELSE AMT:KODMOD = MOD:KODMOD .
! ВСЕ ВСТАВИЛИ ИЛИ НАШЛИ МОДЕЛЬ В СПРАВОЧНИКЕ
AMT:GOSZNAK = M00:GOS_NUM
AMT:KOD_VIN = M00:VIN
AMT:GODVIPUSKA = M00:GOD_V
AMT:NUMBERMOTORA = M00:NUM_DVIG
AMT:NUMBERSHASSI = M00:NUM_CH
AMT:NUMBERKUZOVA = M00:NUM_KUZ
! ПОЛУЧАЕМ ЦВЕТ
CVE:KOD = M00:KOD_CVT
GET(CVET_P,CVE:KLKOD)
IF ERROR() THEN AMT:COLOR = '' ELSE AMT:COLOR = CVE:STR .
!AMT:SVIDETELSTVO ! GROUP
AMT:KODREGIONA = '43'
AMT:SERNO = M00:SER_SV
AMT:NUMBER = M00:NUM_SV
!AMT:PTS ! GROUP
AMT:PTSSERNO = clip(M00:REG_TP)&SUB(M00:NUM_TP,1,2)
AMT:PTSNUMBER = SUB(M00:NUM_TP,3,6)
!??? Здесь как тотакже надо добавить владельца
AMT:KODGAI = M00:RAION
!append(AMTC)
add(AMTC)
.
.

Эта конструкция не пашет :cry:
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Re: Конвертация из одной таблицы в несколько

Сообщение Admin »

sachilo писал(а):! смотрим есть ли в базе
AMT:GOSZNAK = M00:GOS_NUM
SET(AMTC,AMT:GOSZNAK)
IF (ERROR()) THEN
ну вот сходу ошибка... SET не читает запись из файла ... и проверять тут ошибку безсмысленно.
я так понимаю Clarion вообще не знаешь?
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
sachilo
Прохожий
Сообщения: 2
Зарегистрирован: 24 Май 2008, 12:10

Re: Конвертация из одной таблицы в несколько

Сообщение sachilo »

да тут поторопился :(
программил очень давно на clarione 2 щас уже почти ничего непомню
Аватара пользователя
morkovin
Ветеран
Сообщения: 909
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

Re: Конвертация из одной таблицы в несколько

Сообщение morkovin »

Привет!
Возникла такая необходимость перегонять из одного формата в другой в Clarione слаб, но вот что смог проделать
Какие шаблоны используешь - ABC или Legacy?
Имеется таблица CLA2_TABLE1 (clarion 2.1 (*.dat))
И база состоящая из 3 таблиц (clarion 6(*.tps))
CLA6_TABLE1 CLA6_TABLE2 CLA6_TABLE3
CLA2_TABLE1 - префикс M00
...skip
Может проще приложить TXD-файл ?
...skip
Выбрал GetNextRecord ROUNTINE, Next succeds
Я обычно нажимаю иконку Show Legacy Embedd и выбираю пункт Activity For Each Record
А дальше чтт-то типа:

LKD1:IDLK= KLK1:IDLK
IF Access:LkDiplom.Fetch(LKD1:BY_IDLK)=Level:Benign THEN ! есть такая запись- обновим
!здесь присваиваем значения
...
IF Access:LkDiplom.Update()=Level:Notify THEN ! попытаемся обновить эту запись
Message('Ошибка обновления записи в таблице LkDiplom','Зло!')
END
ELSE ! нет такой записи - добавим новую
!здесь присваиваем значения
...
IF Access:LkDiplom.Insert() <> Level:Benign THEN ! попытаемся добавить эту запись
Message('Ошибка добавления записи в таблицу LkDiplom','Зло!')
END
END

Кстати, оператор Access:xxxxx.Insert() автоматически обрабатывает автоинкрементные ключи,
т.е. не надо делать
MYMAXIMUM = AMT:KODAMTC + 1 (автомат доб код)
AMT:KODAMTC = MYMAXIMUM
WBR, morkovin
Ответить