Как создать группу на основе *group?

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Как создать группу на основе *group?

Сообщение RaFaeL »

Есть процедура, куда передается группа по адресу (*group), это Record файла (разных файлов)
Нужно внутри процедуры эту запись локально сохранять, чтобы потом восстанавливать
Как объявить? LIKE в такое не умеет
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Как создать группу на основе *group?

Сообщение Дед Пахом »

Если не брать в расчёт DynaLib (которая вроде бы так умеет), то я вижу только такой вариант: сохранять всё в queue

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

q  queue
fname  string(20)   !- имя поля в переданной группе
fvalue ANY            !- значение поля
затем пройти по группе через WHO/WHAT и сохранить в очереди.
С уважением, ДП
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Как создать группу на основе *group?

Сообщение RaFaeL »

DynaLib у меня есть полная, ее можно брать в расчет
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Как создать группу на основе *group?

Сообщение Дед Пахом »

У меня нет, но уверен, что DynaLib это может, она, имхо, для этого и написана
С уважением, ДП
Аватара пользователя
vic7tar
Ветеран
Сообщения: 365
Зарегистрирован: 09 Февраль 2017, 20:12

Как создать группу на основе *group?

Сообщение vic7tar »

А если просто делать слепок памяти с адреса группы?
C10, Win10x64
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Как создать группу на основе *group?

Сообщение Yufil »

Вроде запись группы легко превращается в строку. И наоборот...
Не проскочит что-нибудь вроде?

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

Gr  &Group 
SaveGroup  Any 

   SaveGroup = Gr & '' 
   Gr = SaveGroup 
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Как создать группу на основе *group?

Сообщение kreator »

Если это Record файла, не вариант воспользоваться какими-нибудь методами класса FileManager? SaveBuffer, RestoreBuffer?
We are hard at work… for you. :)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7325
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Как создать группу на основе *group?

Сообщение Игорь Столяров »

RaFaeL писал(а): 27 Декабрь 2018, 23:50Нужно внутри процедуры эту запись локально сохранять
Здесь ещё вопрос, как запись сохраняется. Например, если содержимое Record не важно - то можно передать Record как String
и, например, в процедуре записывать / восстанавливать как бинарный слепок (BLOB).

У нас например так делается корзина удалённых записей. Т.е. различные виды удаляемых записей пишутся в общий
файл как BLOB поле, с указанием вида записи. А при восстановлении - бинарный BLOB просто переписывается обратно в нужный Record.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Как создать группу на основе *group?

Сообщение Дед Пахом »

Можно прототип процедуры сделать Proc(STRING), а не Proc(GROUP), тогда группа как строка передастся.
С уважением, ДП
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Как создать группу на основе *group?

Сообщение Дед Пахом »

А ещё можно группу в xml или json сериализовать, а потом обратно.
С уважением, ДП
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Как создать группу на основе *group?

Сообщение RaFaeL »

Игорь Столяров писал(а): 28 Декабрь 2018, 11:43Здесь ещё вопрос, как запись сохраняется. Например, если содержимое Record не важно - то можно передать Record как String
Суть проблемы следующая
Есть форма Update (их много, ну допустим 50 штук разных по разным файлам)
В каждой есть условно список доп параметров. На списке на любое действие пользователя вызывается процедура source c кучей параметров, в т.ч. условно FIL:Record
Внутри этого source делается много чего, могут открываться разные другие формы, обрабатываться записи и т.п., в т.ч. по файлу, с update которого вызывается source. И соответственно иногда получаем ситуацию, когда буфер записи слетает и после работы source в основной форме теряются изменения, внесенные пользователем. Поэтому перед работой source надо запись сохранять, а после - восстанавливать. Так вот чтобы не лазить в 50 форм логично сделать это все внутри source так как record туда и так уже передается для других нужд. Отсюда и возник вопрос
Вроде запись группы легко превращается в строку. И наоборот...
Не проскочит что-нибудь вроде?
Про ANY надо посмотреть варианты, спасибо, не догадался
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7325
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Как создать группу на основе *group?

Сообщение Игорь Столяров »

RaFaeL писал(а): 28 Декабрь 2018, 13:34логично сделать это все внутри source так как record туда и так уже передается для других нужд
Т.е. выход из Sourse всегда в том же месте, где был вход Прекрасно ! :)
- Получаем размер Size(*Group) и создаём под неё String такой длины.
- Сохраняем String = Group
- Работаем …
- Восстанавливаем Group = String, уничтожем String, .
- Всё. Выход из Source. :)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4555
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Как создать группу на основе *group?

Сообщение finsoftrz »

Я предпочитаю подобные фоновые расчеты делать через алиасы. Просто и безопасно...
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4555
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Как создать группу на основе *group?

Сообщение finsoftrz »

Игорь Столяров писал(а): 28 Декабрь 2018, 11:43
RaFaeL писал(а): 27 Декабрь 2018, 23:50Нужно внутри процедуры эту запись локально сохранять
Здесь ещё вопрос, как запись сохраняется. Например, если содержимое Record не важно - то можно передать Record как String
и, например, в процедуре записывать / восстанавливать как бинарный слепок (BLOB).

У нас например так делается корзина удалённых записей. Т.е. различные виды удаляемых записей пишутся в общий
файл как BLOB поле, с указанием вида записи. А при восстановлении - бинарный BLOB просто переписывается обратно в нужный Record.
А почему именно BLOB, а не STRING?
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7325
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Как создать группу на основе *group?

Сообщение Игорь Столяров »

finsoftrz писал(а): 28 Декабрь 2018, 18:03А почему именно BLOB, а не STRING?
А потому, что размер сохраняемой RECORD заранее не известен. Поэтому BLOB (или MEMO для Btrieve).
За теми кто отстал - не возвращаться. (С) Кодекс
Ответить