Обработка пакетом файлов - update

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
gopstop2007
Полимат
Сообщения: 1862
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 32 раза
Поблагодарили: 10 раз

Обработка пакетом файлов - update

Сообщение gopstop2007 »

С праздниками всех. Делал пакетную обработку - viewtopic.php?p=41889#p41889
Пробую сделать код более универсальным, если запись уже есть при добавлении, то нужно записать в нее измениния.
Например:

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

        SET(pFM.File)
        Loop while pFM.Next() = Level:Benign 
            CLEAR(pFM2.File)						! CLEAR(my:RECORD)
            pFm2.File{PROP:Record} = pFm.File{PROP:Record}		! pFM:RECORD = pFM:RECORD
            pFM2.Insert()
            IF ERRORCODE()
		! ============ нужно получить, стать на запись для записи в нее изменений =====
		!   аналог кода, примерно так
		! =========================================================================
		   FirstFild_Target = FirstFild_Source		! ????
		   GET(FileTarget, FileTargetKey)		! ????
		   IF ~ERRORCODE() 
		   	PUT(FileTarget)
		   END
		! =========================================================================
            END    
        END

Вопрос, кто знает как получить GET, Key при пакетной обработке?
Спасибо за внимание.
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
kreator
✯ Ветеран ✯
Сообщения: 5272
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 27 раз

Обработка пакетом файлов - update

Сообщение kreator »

А у Вас не SQL разве?
We are hard at work… for you. :)
gopstop2007
Полимат
Сообщения: 1862
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 32 раза
Поблагодарили: 10 раз

Обработка пакетом файлов - update

Сообщение gopstop2007 »

kreator писал(а): 13 Январь 2026, 20:22 А у Вас не SQL разве?
И не только ) Временные файлы храню в TPS и IMDD
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
Admin
Администратор
Сообщения: 4036
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 65 раз
Поблагодарили: 46 раз
Контактная информация:

Обработка пакетом файлов - update

Сообщение Admin »

gopstop2007 писал(а): 13 Январь 2026, 16:23 Вопрос, кто знает как получить GET, Key при пакетной обработке?
Если в пакетной обработке (по ссылке) ты добавляешь записи в FileTarget с помощью APPEND (что такое pFM2.Insert() я х.з.) то как ты их собрался искать по GET(File, Key)? Ключ то не валидный до BUILD
Мне кажется тут тема про "крестик и трусы" :)
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
gopstop2007
Полимат
Сообщения: 1862
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 32 раза
Поблагодарили: 10 раз

Обработка пакетом файлов - update

Сообщение gopstop2007 »

Admin писал(а): 14 Январь 2026, 2:20
gopstop2007 писал(а): 13 Январь 2026, 16:23 Вопрос, кто знает как получить GET, Key при пакетной обработке?
Если в пакетной обработке (по ссылке) ты добавляешь записи в FileTarget с помощью APPEND (что такое pFM2.Insert() я х.з.) то как ты их собрался искать по GET(File, Key)? Ключ то не валидный до BUILD
Мне кажется тут тема про "крестик и трусы" :)
pFM2.Insert() это - Access:MyFile.Insert() , неважно может быть и Add(pFM2) - Add(MyFile), Append не использую. Нужно добавить запись, если она есть стать на нее и изменить ее.
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
kreator
✯ Ветеран ✯
Сообщения: 5272
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 27 раз

Обработка пакетом файлов - update

Сообщение kreator »

Ладно, пусть не SQL (там всё просто, есть оператор "insert or update"). Надо сначала сделать get. Если нет ошибки, то изменить запись. Eсли ошибка, то добавить. В чём проблема? Уникального ключа нет?
We are hard at work… for you. :)
gopstop2007
Полимат
Сообщения: 1862
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 32 раза
Поблагодарили: 10 раз

Обработка пакетом файлов - update

Сообщение gopstop2007 »

Результат, того , что получилось на данном этапе, где то ошибка в коде при получении ключа (KeyRef) GET , прошу помощи

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

Load_MemToTpsFile     PROCEDURE  (FileManager pFMm_,FileManager pFMt_) 

KeyRef      &KEY
sourceRec   &GROUP
targetRec   &GROUP
sourceField ANY
targetField STRING(30)

    CODE
    
        sourceRec &= pFMm_.File{PROP:Record}
        targetRec &= pFMt_.File{PROP:Record}
        
        sourceField &= WHAT(sourceRec,1)
        targetField = WHO(targetRec,1)
        KeyRef &= pFMt_.File{PROP:Key,1}                

        STREAM(pFMt_.File)        
        SET(pFMm_.File)
        Loop while pFMm_.Next() = Level:Benign     
            CLEAR(targetRec)
            ! ================== проблема - не видит GET , мне кажется проблема с KeyRef ===================
            targetField = sourceField
            GET(pFMt_.File, KeyRef)
            IF ERRORCODE()    
                targetRec = sourceRec
                ADD(pFMt_.File)
            ELSE
                targetRec = sourceRec
                PUT(pFMt_.File)
            END    
        END
        FLUSH(pFMt_.File)
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5700
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 20 раз
Поблагодарили: 82 раза

Обработка пакетом файлов - update

Сообщение finsoftrz »

Я думаю, что самый безопасный способ это разделить задачу на 2 этапа. На первом проходим по исходному файлу, проверяем наличие записи в целевом. Если находим, то делаем put. Если не находим, то сохраняем идентификатор в кьюшке. На втором этапе проходим по всем строкам кьюшки и добавляем записи в целевой файл. Если драйвер tps, то надо использовать logout, если inmemory, то logout не нужен. STREAM это вроде атавизм давно, использовался для dat файлов.
C6/C12, ШВС, tps/btrieve.
kreator
✯ Ветеран ✯
Сообщения: 5272
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 27 раз

Обработка пакетом файлов - update

Сообщение kreator »

Не буду категоричен, но думается проблема в prop:Key. Судя по справке, это некая ссылка на индекс. А оператору get определённо нужно наименование ключа. Т.е. неплохо бы применить к этой ссылке оператор who. Но это скорее всего тоже не прокатит.
А нельзя впрямую указать поля, ключи и т.д.? Всё равно структуру файлов/таблиц подбираете специально, а не всё подряд пытаетесь автоматизировать.
Я видел такую реализацию. В словаре описан один файл. А при пакетной обработке присваивается каждый раз новое имя, открывается, обрабатывается, закрывается, всё.
We are hard at work… for you. :)
Ответить