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

Clarion, Clarion 7

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

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

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

Сообщение RaFaeL » 27 Декабрь 2018, 23:50

Есть процедура, куда передается группа по адресу (*group), это Record файла (разных файлов)
Нужно внутри процедуры эту запись локально сохранять, чтобы потом восстанавливать
Как объявить? LIKE в такое не умеет

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2194
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

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

Сообщение Дед Пахом » 28 Декабрь 2018, 0:30

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

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

q  queue
fname  string(20)   !- имя поля в переданной группе
fvalue ANY            !- значение поля
затем пройти по группе через WHO/WHAT и сохранить в очереди.
С уважением, ДП

Аватара пользователя
RaFaeL
Ветеран
Сообщения: 835
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

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

Сообщение RaFaeL » 28 Декабрь 2018, 0:39

DynaLib у меня есть полная, ее можно брать в расчет

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2194
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

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

Сообщение Дед Пахом » 28 Декабрь 2018, 1:13

У меня нет, но уверен, что DynaLib это может, она, имхо, для этого и написана
С уважением, ДП

Аватара пользователя
vic7tar
Активист
Сообщения: 153
Зарегистрирован: 09 Февраль 2017, 20:12

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

Сообщение vic7tar » 28 Декабрь 2018, 3:36

А если просто делать слепок памяти с адреса группы?
C10, Win10x64

Yufil
Ветеран движения
Сообщения: 1075
Зарегистрирован: 16 Май 2006, 13:34
Контактная информация:

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

Сообщение Yufil » 28 Декабрь 2018, 9:26

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

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

Gr  &Group 
SaveGroup  Any 

   SaveGroup = Gr & '' 
   Gr = SaveGroup 

kreator
Ветеран
Сообщения: 3107
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

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

Сообщение kreator » 28 Декабрь 2018, 10:56

Если это Record файла, не вариант воспользоваться какими-нибудь методами класса FileManager? SaveBuffer, RestoreBuffer?
We are hard at work… for you. :)

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3874
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

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

Сообщение Игорь Столяров » 28 Декабрь 2018, 11:43

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

У нас например так делается корзина удалённых записей. Т.е. различные виды удаляемых записей пишутся в общий
файл как BLOB поле, с указанием вида записи. А при восстановлении - бинарный BLOB просто переписывается обратно в нужный Record.
«V» значит Вендетта !

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2194
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

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

Сообщение Дед Пахом » 28 Декабрь 2018, 11:46

Можно прототип процедуры сделать Proc(STRING), а не Proc(GROUP), тогда группа как строка передастся.
С уважением, ДП

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2194
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

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

Сообщение Дед Пахом » 28 Декабрь 2018, 12:21

А ещё можно группу в xml или json сериализовать, а потом обратно.
С уважением, ДП

Аватара пользователя
RaFaeL
Ветеран
Сообщения: 835
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

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

Сообщение RaFaeL » 28 Декабрь 2018, 13:34

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

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3874
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

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

Сообщение Игорь Столяров » 28 Декабрь 2018, 17:55

RaFaeL писал(а):
28 Декабрь 2018, 13:34
логично сделать это все внутри source так как record туда и так уже передается для других нужд
Т.е. выход из Sourse всегда в том же месте, где был вход Прекрасно ! :)
- Получаем размер Size(*Group) и создаём под неё String такой длины.
- Сохраняем String = Group
- Работаем …
- Восстанавливаем Group = String, уничтожем String, .
- Всё. Выход из Source. :)
«V» значит Вендетта !

Аватара пользователя
finsoftrz
Ветеран
Сообщения: 1030
Зарегистрирован: 06 Ноябрь 2014, 12:48

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

Сообщение finsoftrz » 28 Декабрь 2018, 18:01

Я предпочитаю подобные фоновые расчеты делать через алиасы. Просто и безопасно...
Рязань решает.

Аватара пользователя
finsoftrz
Ветеран
Сообщения: 1030
Зарегистрирован: 06 Ноябрь 2014, 12:48

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

Сообщение finsoftrz » 28 Декабрь 2018, 18:03

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

У нас например так делается корзина удалённых записей. Т.е. различные виды удаляемых записей пишутся в общий
файл как BLOB поле, с указанием вида записи. А при восстановлении - бинарный BLOB просто переписывается обратно в нужный Record.
А почему именно BLOB, а не STRING?
Рязань решает.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3874
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

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

Сообщение Игорь Столяров » 28 Декабрь 2018, 18:11

finsoftrz писал(а):
28 Декабрь 2018, 18:03
А почему именно BLOB, а не STRING?
А потому, что размер сохраняемой RECORD заранее не известен. Поэтому BLOB (или MEMO для Btrieve).
«V» значит Вендетта !

Ответить