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

Clarion, Clarion 7

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

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

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

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

Глянул у себя в системе логирования, там MEMO. Вспомнил, что это для ускорения поиска. MEMO можно не считывать, если поиск ведется по другим критериям, кроме контекста (период изменений, подпись пользователя и т.п.). Если скорость поиска не критична, то можно и STRING, он все равно в tps поджимается. Вопрос, собственно, в чем смысл именно BLOB, может, я чего не знаю?
Рязань решает.

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

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

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

То есть, я имею ввиду, что можно продекларировать в структуре STRING разумного размера, покрывающий максимальный размер сохраняемых записей. При этом в базе данных будет сохраняться только заполненная часть, пробелы поджимаются в tps (и не только пробелы).
Рязань решает.

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

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

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

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

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

2. В памяти всё равно буфер будет объявляться под полную строку. Да и BROWSE по такому списку будет тупить.
А из BLOB (MEMO) просто выполняется выборка только при выполнении операции восстановления и всё. :)
«V» значит Вендетта !

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

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

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

Если правильно понял смысл темы, то сохранять может потребоваться не только одну запись. Например, если мы редактируем строку накладной и вызываем для выбора какой-то справочник по ссылке, то в нем могут быть затронуты как буфер записи строки, так и буфер записи заголовка накладной. Поэтому надо сохранять и восстанавливать оба буфера. Я это делаю шаблонами при вызове справочника.
classif.jpg
Рязань решает.

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

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

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

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

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

2. В памяти всё равно буфер будет объявляться под полную строку. Да и BROWSE по такому списку будет тупить.
А из BLOB (MEMO) просто выполняется выборка только при выполнении операции восстановления и всё. :)
Видимо, от задачи зависит...
Рязань решает.

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

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

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

Во всяком случае, в своих проектах я обхожусь без BLOB. MEMO использую иногда, но только в системных таблицах типа лога. В прикладных только STRING.
Рязань решает.

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

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

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

finsoftrz писал(а):
28 Декабрь 2018, 19:07
В прикладных только STRING
Я рискну сложить два+два и предположить, что Вы вообще используете только базовые типы данных (String, Byte, Long, Real)
Потому, что меняете файловый драйвер БД на лету, а учитывать особенности типов данных каждого драйвера - не умеете. ;)
«V» значит Вендетта !

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

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

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

Предположение правильное. Привычка со времен Clarion 2.1 для dos. Никогда не чувствовал потребности в каких-то специальных типах данных. Зато иметь одно приложение, которое умеет работать без пересборки и с tps, и c btrieve - это ОЧЕНЬ круто. Реализация идеи Баррингтона о сменяемых драйверах в первозданной красоте. Но это уже к рассматриваемой теме отношения не имеет...
Рязань решает.

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

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

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

finsoftrz писал(а):
28 Декабрь 2018, 19:20
Реализация идеи Баррингтона о сменяемых драйверах в первозданной красоте.
Эх, если бы последователи довели великие идеи отца-основателя до конечно реализации ! Но нет.
Изобретение подписки всё испортило. Ведь теперь можно просто собирать гроши и ничего не делать. ;)
«V» значит Вендетта !

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

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

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

Любой бизнес имеет свой срок жизни. Удивительно, что кларион вообще еще существует и даже как-то пытается развиваться. При том, что из команды разработчиков не осталось никого. Технология, действительно, с большой буквы. Хотя и не в струе мейнстрима, задаваемого крупными софтверными компаниями...
Рязань решает.

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

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

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

finsoftrz писал(а):
28 Декабрь 2018, 19:44
Удивительно, что кларион вообще еще существует
Изначально хорошо продуманная структура и реализация. То же самое, как и у FoxPro. Очень живучие приложения на C трансляторе.
Посмотрите, эпизодически кто-нибудь выходит из леса и спрашивает, как прикрутить что-то к Clarion 5.5, а на C63 я и сам ещё работаю. :)
«V» значит Вендетта !

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

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

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

Игорь Столяров писал(а):
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
Активист
Сообщения: 153
Зарегистрирован: 09 Февраль 2017, 20:12

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

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

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

        ag &= new( string(len(grp)) )
        poke(ADDRESS(ag), grp)
        clear(grp)
        poke(ADDRESS(grp), ag)
нормально работает.
C10, Win10x64

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

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

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

RaFaeL писал(а):
28 Декабрь 2018, 20:20
Фоновые расчеты да, но здесь иногда нужно справочник открывать того же объекта, что и изменяемая запись, алиас не пойдет. Во-вторых, в С63 есть ограничение на размер секции данных для компиляции в 640 кб, мы в него давно уперлись, а алиас объявляется как отдельное описание таблицы, поэтому если можно обойтись без него то лучше без него
А сколько у Вас таблиц, полей, ключей в проекте? У меня проблем пока с этим не возникало, хотя основной проект достаточно большой. Вот такая статистика, без учета алиасов.
stat.jpg
Рязань решает.

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

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

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

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

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

Ответить