Как создать группу на основе *group?
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4615
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
Как создать группу на основе *group?
Глянул у себя в системе логирования, там MEMO. Вспомнил, что это для ускорения поиска. MEMO можно не считывать, если поиск ведется по другим критериям, кроме контекста (период изменений, подпись пользователя и т.п.). Если скорость поиска не критична, то можно и STRING, он все равно в tps поджимается. Вопрос, собственно, в чем смысл именно BLOB, может, я чего не знаю?
C6/C11, ШВС, tps/btrieve.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4615
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
Как создать группу на основе *group?
То есть, я имею ввиду, что можно продекларировать в структуре STRING разумного размера, покрывающий максимальный размер сохраняемых записей. При этом в базе данных будет сохраняться только заполненная часть, пробелы поджимаются в tps (и не только пробелы).
C6/C11, ШВС, tps/btrieve.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7373
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
Как создать группу на основе *group?
Можно продекларировать. Но только это сразу вводить искусственное ограничение, которое надо помнить.
В данном случае хранятся бинарные данные неопределённой длины - под них существует тип данных BLOB (MEMO, BINARY)
В физическом файле строки-то конечно подрезаются при хранении, но !
1. Хранимые данные - не строки, а бинарный набор.
В них может быть всё что угодно, в т.ч. и управляющие символы вроде <0> и т.д.
2. В памяти всё равно буфер будет объявляться под полную строку. Да и BROWSE по такому списку будет тупить.
А из BLOB (MEMO) просто выполняется выборка только при выполнении операции восстановления и всё.
За теми кто отстал - не возвращаться. (С) Кодекс
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4615
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
Как создать группу на основе *group?
Если правильно понял смысл темы, то сохранять может потребоваться не только одну запись. Например, если мы редактируем строку накладной и вызываем для выбора какой-то справочник по ссылке, то в нем могут быть затронуты как буфер записи строки, так и буфер записи заголовка накладной. Поэтому надо сохранять и восстанавливать оба буфера. Я это делаю шаблонами при вызове справочника.
C6/C11, ШВС, tps/btrieve.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4615
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
Как создать группу на основе *group?
Видимо, от задачи зависит...Игорь Столяров писал(а): ↑28 Декабрь 2018, 18:51Можно продекларировать. Но только это сразу вводить искусственное ограничение, которое надо помнить.
В данном случае хранятся бинарные данные неопределённой длины - под них существует тип данных BLOB (MEMO, BINARY)
В физическом файле строки-то конечно подрезаются при хранении, но !
1. Хранимые данные - не строки, а бинарный набор.
В них может быть всё что угодно, в т.ч. и управляющие символы вроде <0> и т.д.
2. В памяти всё равно буфер будет объявляться под полную строку. Да и BROWSE по такому списку будет тупить.
А из BLOB (MEMO) просто выполняется выборка только при выполнении операции восстановления и всё.
C6/C11, ШВС, tps/btrieve.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4615
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
Как создать группу на основе *group?
Во всяком случае, в своих проектах я обхожусь без BLOB. MEMO использую иногда, но только в системных таблицах типа лога. В прикладных только STRING.
C6/C11, ШВС, tps/btrieve.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7373
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
Как создать группу на основе *group?
Я рискну сложить два+два и предположить, что Вы вообще используете только базовые типы данных (String, Byte, Long, Real)
Потому, что меняете файловый драйвер БД на лету, а учитывать особенности типов данных каждого драйвера - не умеете.
За теми кто отстал - не возвращаться. (С) Кодекс
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4615
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
Как создать группу на основе *group?
Предположение правильное. Привычка со времен Clarion 2.1 для dos. Никогда не чувствовал потребности в каких-то специальных типах данных. Зато иметь одно приложение, которое умеет работать без пересборки и с tps, и c btrieve - это ОЧЕНЬ круто. Реализация идеи Баррингтона о сменяемых драйверах в первозданной красоте. Но это уже к рассматриваемой теме отношения не имеет...
C6/C11, ШВС, tps/btrieve.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7373
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
Как создать группу на основе *group?
Эх, если бы последователи довели великие идеи отца-основателя до конечно реализации ! Но нет.
Изобретение подписки всё испортило. Ведь теперь можно просто собирать гроши и ничего не делать.
За теми кто отстал - не возвращаться. (С) Кодекс
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4615
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
Как создать группу на основе *group?
Любой бизнес имеет свой срок жизни. Удивительно, что кларион вообще еще существует и даже как-то пытается развиваться. При том, что из команды разработчиков не осталось никого. Технология, действительно, с большой буквы. Хотя и не в струе мейнстрима, задаваемого крупными софтверными компаниями...
C6/C11, ШВС, tps/btrieve.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7373
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
Как создать группу на основе *group?
Изначально хорошо продуманная структура и реализация. То же самое, как и у FoxPro. Очень живучие приложения на C трансляторе.
Посмотрите, эпизодически кто-нибудь выходит из леса и спрашивает, как прикрутить что-то к Clarion 5.5, а на C63 я и сам ещё работаю.
За теми кто отстал - не возвращаться. (С) Кодекс
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1376
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 7 раз
- Поблагодарили: 1 раз
- Контактная информация:
Как создать группу на основе *group?
В принципе, так и сделал, завел просто строку максимально возможной длины записи (у нас это 8192), в нее сохраняю, затем восстанавливаю как str[1:size(rec)]Игорь Столяров писал(а): ↑28 Декабрь 2018, 17:55Т.е. выход из Sourse всегда в том же месте, где был вход Прекрасно !
- Получаем размер Size(*Group) и создаём под неё String такой длины.
- Сохраняем String = Group
- Работаем …
- Восстанавливаем Group = String, уничтожем String, .
- Всё. Выход из Source.
Фоновые расчеты да, но здесь иногда нужно справочник открывать того же объекта, что и изменяемая запись, алиас не пойдет. Во-вторых, в С63 есть ограничение на размер секции данных для компиляции в 640 кб, мы в него давно уперлись, а алиас объявляется как отдельное описание таблицы, поэтому если можно обойтись без него то лучше без него
Как создать группу на основе *group?
Код: Выделить всё
ag &= new( string(len(grp)) )
poke(ADDRESS(ag), grp)
clear(grp)
poke(ADDRESS(grp), ag)
C10, Win10x64
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4615
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
Как создать группу на основе *group?
А сколько у Вас таблиц, полей, ключей в проекте? У меня проблем пока с этим не возникало, хотя основной проект достаточно большой. Вот такая статистика, без учета алиасов.RaFaeL писал(а): ↑28 Декабрь 2018, 20:20 Фоновые расчеты да, но здесь иногда нужно справочник открывать того же объекта, что и изменяемая запись, алиас не пойдет. Во-вторых, в С63 есть ограничение на размер секции данных для компиляции в 640 кб, мы в него давно уперлись, а алиас объявляется как отдельное описание таблицы, поэтому если можно обойтись без него то лучше без него
C6/C11, ШВС, tps/btrieve.
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1376
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 7 раз
- Поблагодарили: 1 раз
- Контактная информация:
Как создать группу на основе *group?
А у вас есть "основная dll" c генерацией описаний всех таблиц?
Статистику такую не могу предоставить, так как нечем посчитать )
Просто таблиц в базе (физических) насчитал 216
Последний раз редактировалось RaFaeL 28 Декабрь 2018, 20:55, всего редактировалось 1 раз.