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

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4559
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

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

Сообщение finsoftrz »

Глянул у себя в системе логирования, там MEMO. Вспомнил, что это для ускорения поиска. MEMO можно не считывать, если поиск ведется по другим критериям, кроме контекста (период изменений, подпись пользователя и т.п.). Если скорость поиска не критична, то можно и STRING, он все равно в tps поджимается. Вопрос, собственно, в чем смысл именно BLOB, может, я чего не знаю?
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4559
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

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

Сообщение finsoftrz »

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

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

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

finsoftrz писал(а): 28 Декабрь 2018, 18:24можно продекларировать в структуре STRING разумного размера
Можно продекларировать. Но только это сразу вводить искусственное ограничение, которое надо помнить.
В данном случае хранятся бинарные данные неопределённой длины - под них существует тип данных BLOB (MEMO, BINARY)
В физическом файле строки-то конечно подрезаются при хранении, но !

1. Хранимые данные - не строки, а бинарный набор.
В них может быть всё что угодно, в т.ч. и управляющие символы вроде <0> и т.д.

2. В памяти всё равно буфер будет объявляться под полную строку. Да и BROWSE по такому списку будет тупить.
А из BLOB (MEMO) просто выполняется выборка только при выполнении операции восстановления и всё. :)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4559
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

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

Сообщение finsoftrz »

Если правильно понял смысл темы, то сохранять может потребоваться не только одну запись. Например, если мы редактируем строку накладной и вызываем для выбора какой-то справочник по ссылке, то в нем могут быть затронуты как буфер записи строки, так и буфер записи заголовка накладной. Поэтому надо сохранять и восстанавливать оба буфера. Я это делаю шаблонами при вызове справочника.
classif.jpg
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4559
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

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

Сообщение finsoftrz »

Игорь Столяров писал(а): 28 Декабрь 2018, 18:51
finsoftrz писал(а): 28 Декабрь 2018, 18:24можно продекларировать в структуре STRING разумного размера
Можно продекларировать. Но только это сразу вводить искусственное ограничение, которое надо помнить.
В данном случае хранятся бинарные данные неопределённой длины - под них существует тип данных BLOB (MEMO, BINARY)
В физическом файле строки-то конечно подрезаются при хранении, но !

1. Хранимые данные - не строки, а бинарный набор.
В них может быть всё что угодно, в т.ч. и управляющие символы вроде <0> и т.д.

2. В памяти всё равно буфер будет объявляться под полную строку. Да и BROWSE по такому списку будет тупить.
А из BLOB (MEMO) просто выполняется выборка только при выполнении операции восстановления и всё. :)
Видимо, от задачи зависит...
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4559
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

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

Сообщение finsoftrz »

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

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

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

finsoftrz писал(а): 28 Декабрь 2018, 19:07В прикладных только STRING
Я рискну сложить два+два и предположить, что Вы вообще используете только базовые типы данных (String, Byte, Long, Real)
Потому, что меняете файловый драйвер БД на лету, а учитывать особенности типов данных каждого драйвера - не умеете. ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4559
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

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

Сообщение finsoftrz »

Предположение правильное. Привычка со времен Clarion 2.1 для dos. Никогда не чувствовал потребности в каких-то специальных типах данных. Зато иметь одно приложение, которое умеет работать без пересборки и с tps, и c btrieve - это ОЧЕНЬ круто. Реализация идеи Баррингтона о сменяемых драйверах в первозданной красоте. Но это уже к рассматриваемой теме отношения не имеет...
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7327
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

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

finsoftrz писал(а): 28 Декабрь 2018, 19:20Реализация идеи Баррингтона о сменяемых драйверах в первозданной красоте.
Эх, если бы последователи довели великие идеи отца-основателя до конечно реализации ! Но нет.
Изобретение подписки всё испортило. Ведь теперь можно просто собирать гроши и ничего не делать. ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4559
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

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

Сообщение finsoftrz »

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

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

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

finsoftrz писал(а): 28 Декабрь 2018, 19:44Удивительно, что кларион вообще еще существует
Изначально хорошо продуманная структура и реализация. То же самое, как и у FoxPro. Очень живучие приложения на C трансляторе.
Посмотрите, эпизодически кто-нибудь выходит из леса и спрашивает, как прикрутить что-то к Clarion 5.5, а на C63 я и сам ещё работаю. :)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

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

Сообщение RaFaeL »

Игорь Столяров писал(а): 28 Декабрь 2018, 17:55
RaFaeL писал(а): 28 Декабрь 2018, 13:34логично сделать это все внутри source так как record туда и так уже передается для других нужд
Т.е. выход из Sourse всегда в том же месте, где был вход Прекрасно ! :)
- Получаем размер Size(*Group) и создаём под неё String такой длины.
- Сохраняем String = Group
- Работаем …
- Восстанавливаем Group = String, уничтожем String, .
- Всё. Выход из Source. :)
В принципе, так и сделал, завел просто строку максимально возможной длины записи (у нас это 8192), в нее сохраняю, затем восстанавливаю как str[1:size(rec)]
finsoftrz писал(а): 28 Декабрь 2018, 18:01Я предпочитаю подобные фоновые расчеты делать через алиасы. Просто и безопасно...
Фоновые расчеты да, но здесь иногда нужно справочник открывать того же объекта, что и изменяемая запись, алиас не пойдет. Во-вторых, в С63 есть ограничение на размер секции данных для компиляции в 640 кб, мы в него давно уперлись, а алиас объявляется как отдельное описание таблицы, поэтому если можно обойтись без него то лучше без него
Аватара пользователя
vic7tar
Ветеран
Сообщения: 365
Зарегистрирован: 09 Февраль 2017, 20:12

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

Сообщение vic7tar »

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

        ag &= new( string(len(grp)) )
        poke(ADDRESS(ag), grp)
        clear(grp)
        poke(ADDRESS(grp), ag)
нормально работает.
C10, Win10x64
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4559
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

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

Сообщение finsoftrz »

RaFaeL писал(а): 28 Декабрь 2018, 20:20 Фоновые расчеты да, но здесь иногда нужно справочник открывать того же объекта, что и изменяемая запись, алиас не пойдет. Во-вторых, в С63 есть ограничение на размер секции данных для компиляции в 640 кб, мы в него давно уперлись, а алиас объявляется как отдельное описание таблицы, поэтому если можно обойтись без него то лучше без него
А сколько у Вас таблиц, полей, ключей в проекте? У меня проблем пока с этим не возникало, хотя основной проект достаточно большой. Вот такая статистика, без учета алиасов.
stat.jpg
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

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

Сообщение RaFaeL »

finsoftrz писал(а): 28 Декабрь 2018, 20:44А сколько у Вас таблиц, полей, ключей в проекте? У меня проблем пока с этим не возникало, хотя основной проект достаточно большой. Вот такая статистика, без учета алиасов.
А у вас есть "основная dll" c генерацией описаний всех таблиц?

Статистику такую не могу предоставить, так как нечем посчитать )
Просто таблиц в базе (физических) насчитал 216
Последний раз редактировалось RaFaeL 28 Декабрь 2018, 20:55, всего редактировалось 1 раз.
Ответить