Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
С праздниками всех. Делал пакетную обработку - 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 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
gopstop2007 писал(а): 13 Январь 2026, 16:23
Вопрос, кто знает как получить GET, Key при пакетной обработке?
Если в пакетной обработке (по ссылке) ты добавляешь записи в FileTarget с помощью APPEND (что такое pFM2.Insert() я х.з.) то как ты их собрался искать по GET(File, Key)? Ключ то не валидный до BUILD
Мне кажется тут тема про "крестик и трусы"
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
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 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Ладно, пусть не SQL (там всё просто, есть оператор "insert or update"). Надо сначала сделать get. Если нет ошибки, то изменить запись. Eсли ошибка, то добавить. В чём проблема? Уникального ключа нет?
Я думаю, что самый безопасный способ это разделить задачу на 2 этапа. На первом проходим по исходному файлу, проверяем наличие записи в целевом. Если находим, то делаем put. Если не находим, то сохраняем идентификатор в кьюшке. На втором этапе проходим по всем строкам кьюшки и добавляем записи в целевой файл. Если драйвер tps, то надо использовать logout, если inmemory, то logout не нужен. STREAM это вроде атавизм давно, использовался для dat файлов.
Не буду категоричен, но думается проблема в prop:Key. Судя по справке, это некая ссылка на индекс. А оператору get определённо нужно наименование ключа. Т.е. неплохо бы применить к этой ссылке оператор who. Но это скорее всего тоже не прокатит.
А нельзя впрямую указать поля, ключи и т.д.? Всё равно структуру файлов/таблиц подбираете специально, а не всё подряд пытаетесь автоматизировать.
Я видел такую реализацию. В словаре описан один файл. А при пакетной обработке присваивается каждый раз новое имя, открывается, обрабатывается, закрывается, всё.