Browse для маленьких файлов

Программы на Clarion, шаблоны, библиотеки и пр.

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Гость

Сообщение Гость »

Здравствуйте ClaList!

У меня море таблиц с количеством записей до 10 - 100 - 1000. На каждый из них натравливать Browse из ШVC мне кажется расточительным. Что надо использовать? Раньше кажется был ТPL List, а щас что ...

--
С уважением,
SAN mailto:vgsan@yandex.ru

Написал: ClaList(2)
Гость

Сообщение Гость »

У меня море таблиц с количеством записей до 10 - 100 - 1000. На каждый из них натравливать Browse из ШVC мне кажется расточительным. Что надо ...
Чем?
- Тавтологией кода - goto ABC
- Загрузкой сетки при листаниях - грузи весь файл сразу, опять же, ABC поможет. Только учти, что чем дольше будешь держить окно открытым, тем менее актуальным будет твой буфер.
... использовать? Раньше кажется был ТPL List, а щас что ...
В 6-ке In-Memory драйвер. Для константных справочников без права на редактирование очень хорош. Сэкономишь трафик не только на браузах, но и везде, где они используются как lookup-ы.

http://www.softvelocity.com/products/pipeline_imdd.htm

Nick Tsigouro <nick@arsis.ru>

Ник, а нельзя ли по-подробнее, для тех кто в танке :D,
где этот драйвер в 6-ке ? Я что-то не нашёл.
Или это отдельная фича?

С уважением
Алексей Демьяненко

(Добавление)
Чем?
Объемом кода (представляешь сколько надо будет прокачать по сетке при обновлении проги! :) У меня еще ничего нет, а уже exe 3 метра. А для 3 записей ставить вровс у меня совесть не позволяет.
- Тавтологией кода - goto ABC
Странный ты Ник, ты же прекрасно знаешь что вопреки теории АБС дает больший объем кода, кроме того значительно более медленный код (см ваш пример к курсам переключение закладок хотя бы), менее устойчивый код (см комментарий к FREE ABC если сам не убедился), трудно модифицируемый программером код, а значит опасный для сопровождения. Короче если ты не хочешь чтоб меня тут убили про АБС молчим! :D
- Загрузкой сетки при листаниях - грузи весь файл сразу, опять же, ABC поможет.
Вот был в досе List. Я им понятное дело не пользовался, но идею использовал. Процедурка коротенькая и не менее функциональная чем бровз. Под виндой чем народ пользуется для 1-10 записей?
Только учти, что чем дольше будешь держить окно открытым, тем менее актуальным будет твой буфер.
Ну, обижаешь ...
... использовать? Раньше кажется был ТPL List, а щас что ...
Так все таки что?
В 6-ке In-Memory драйвер. Для константных справочников без права на редактирование очень хорош. Сэкономишь трафик не только на браузах, но и везде, где они используются как lookup-ы.
Посмотреть бы для начала, а что квея хуже?
Спасибо, щас погляжу. Ба, да тут только описалово... :)

--
С уважением, SAN
Объемом кода (представляешь сколько надо будет прокачать по сетке при обновлении проги! :) У меня еще ничего нет, а уже exe 3 метра. А для 3 записей ставить вровс у меня совесть не позволяет.
А отладочная информация отключена? Отключи ее, .exe будет 200-300 кило. У меня весь проект с DLL 1.4Мб

--
С Уважением,
Антон Балкин
Спасибо, щас погляжу. Ба, да тут только описалово... :)
А ты думал, что будет что-то типа "Уважаемый SAN, специально для Вас фри-версия In-Memory Driver" :-))

Алексей,
начальник отдела ПТО
ООО "ОРК"
mail: alex@jrcn.donetsk.ua, icq: 62605472
www: http://www.nikasoft.co.uk
http://www.clarionline.h1.ru (FAQ-онлайн)
origin: Hе имей 100 pублей - бедность не поpок.
У меня море таблиц с количеством записей до 10 - 100 - 1000. На каждый из них натравливать Browse из ШVC мне кажется расточительным. Что надо использовать? Раньше кажется был ТPL List, а щас что ...
Я для подобных справочников использую небольшую процедурку, которая работает ТОЛЬКО на просмотр заданного файла.
Хотя, в принципе, не трудно подключить и вызов формы для редактирования.
Выкладывать не буду - писал для себя и поэтому в нем много лишнего кода - а выделять "чистый" бровз, честно говоря, времени нет.

Общая идея:

BrowseAnyFile(FILE _File,<KEY _Key>,<STRING _Filter>, !
<STRING _Break>,<STRING _Fields>,...)

- файл "заливается" целиком в очередь.
Очередь лучше сделать из STRING-полей - удобное форматирование/использование/сортировка.
Кол-во полей выбирай сам - или по кол-ву самой большой таблицы или "с запасом" до десятка.
Обычно такие таблицы бывают всего с несколькими колонками.
- если файл не открыт - открываем и устанавливаем порядок чтения по _Key или, если он не задан, то по файлу.
Если файл уже открыт, то используем порядок чтения по _File{PROP:CurrentKey}.
В принципе, так как файлы небольшие, то для сортировки вместо ключа можно использовать и обычный SORT очереди, в которую будет "залит" файл.
Кстати, можно к List`у по этой очереди подключить классы для интерактивной сортировки по колонкам.
- при "заливке" файла одновременно можно производить и фильтрацию записей - если задан _Filter.
Фильтр записывается в стандартном синтаксисе и в цикле обрабатывается или стандартным Evaluate или моим классом ExtEval, который выложен на сайте DynaLib.
Для C5/C55 ExtEval поможет ускорить обработку в несколько раз. Для C60/C61 - до 25%
Хотя, учитывая небольшое общее кол-во записей, это не критично.
- можно использовать и Break-условие, если задан _Break.
Особенно удобно, если один файл содержит несколько подобных справочников. Тогда, перед чтением устанавливаешь ключ на первую запись нужного справочника а в Break-условие вбиваешь условие "вылета" из цикла чтения.
Опять-же, Break-условие обрабатывается или стандартным оператором Evaluate или ExtEval.
- для обхода полей записи файла используй What/Who/Where.
Если задан _Fields, то используешь его для выборки только заданных полей из записи (по метке/имени). Формат _Fields - "MY:Name!MY:Desc!MY:Index".
Для записи значений полей из буфера файла в буфер очереди используешь что-то типа этого кода:

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

QueField  ANY
FileRec   &GROUP
RecField  ANY

  FileRec &= _File{PROP:Record}
  ! Для C50 прийдется использовать более сложный код
  ! Более побробно - см. мои письма в этой рассылке
  ! по данной теме.
  Clear(Queue)
  Col# = 1
  Loop
    RecField &= What(FileRec,Col#)
    if RecField &= Null then Break.
    QueField &= What(Queue,Col#)
    QueField = RecField
    Col# += 1
  .
  Add(Queue)
Не советую использовать в просматриваемой очереди вместо STRING полей поля типа ANY - удобство кажущееся, а проблемы и трудности - вполне реальные!
Только поймите правильно - я не противник использования ANY в очередях! Часто сам их использую. Просто считаю, что если можно обойтись без них, и при этом без особых усилий (!), то не следует себе усложнять жизнь.

Если используется _Fields, то в вышеприведенный код вносятся некоторые коррективы, используя оператор Who.

Как форматировать List по информации о полях из буфера файла можно посмотреть в одном из тестовых примеров из состава либы DynaLib.

В данном случае можно поступить еще проще - отформатировать List заранее, в оконном редакторе на все поля очереди.
А при подготовке просто поменять названия колонок на названия полей файла, при необходимости "подогнать" тип выравнивания в колонке по типу поля, убрать лишние колонки из листа ?List{PROP:Width} = 0.
Частично можно воспользоваться кодом формирования колонок Excel-файла из либы dExcel.

Будут вопросы - пиши.

Удачи!

=============================
С уважением, Олег А. Руденко.
Oleg_Rudenko@mail.ru
Oleg_Rudenko@mail333.com
Библиотека DynaLib
http://dynalib.narod.ru

(Добавление)
А отладочна информаци отключена? Отключи ее, .exe будет 200-300 кило. У мен весь проект с DLL 1.4Мб
Ну это я давно знаю, просто я чуть увеличил размер ехешника для примеру! ;)

Так про CUSTOM я задавал вопрос хоть подскажите чуть, дальше я и сам пойму. Плиз и спасибо Вам сразу!


--
С уважением, SAN

Об чем, собственно, речь? Если под таблицами подразумеваются файлы на диске, то таблицы эти разные по своей структуре?
Если под таблицами подразумевается структуры в DCT, то при чем здесь количество записей.

Если количество структур все же ограничено, и если оно невелико, то очевидно бровзов надо делать столько, сколько структур, а параметром в бровз передавать имя файла и там его устанавливать.

Если же огромное количество разных описаний и их надо непременно все показывать, то возможно подумать над реализацией некоего универсального бровза, стандартного такого я вроде не встечал. Передавать ему параметром FILE, и далее механизмами WHO/WHAT/WHERE считывать имена полей (искать для них их дескрипшины (для заголовков колонок) в заранее подготовленной с помощью небольшого шаблончика queue :)), форматировать FORMAT ListBox и считывать поля в заранее подготовленную очередь.

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

ShowQue QUEUE,PRE(SQ)
Col1          STRING(250)
Col2          STRING(250)
Col3          STRING(250)
Col4          STRING(250)
Col5          STRING(250)
Col6          STRING(250)
Col7          STRING(250)
Col8          STRING(250)
...
              END
Количество полей которой, увы, ограничено, или привлекать DynaLib Олега Руденко.

Удачи!
__________________________________
Владимир Якимченко (IСQ 16 993 194)

Речь идет о нескольких десятках таблиц разной структуры описанной в DCT. Поскольку количество записей минимально и чаще всего укладывается в List объем кода броуза мне кажется избыточным, а темп работы не соразмерным количеству записей. В досе я просто закачивал это в квею сортировал и тд. Был и шаблон List кажется так назывался. А под виндой я таких шаблонов не вижу, в тоже время много народа давно и успешно работает вроде. Отсюда и вопрос возник.
ShowQue QUEUE,PRE(SQ)
Кажется Олег Р. развил именно это направление.

Спасибо!


--
С уважением, SAN

Написал: ClaList(2)
Гость

Сообщение Гость »

Кажется Олег Р. развил именно это направление.
Так по другому, увы, и не получиться!
Если, конечно, не использовать DynaLib или подобные библиотеки.

Что-же касается шаблона List аля-CFD, то был подобный в первых версиях CW. По крайней мере у меня был:)) Хотя, возможно, я его просто перенес из CFD. Уже не помню - давно было. А потом как-то перестал им пользоваться.

Ну, а тут недавно понадобился подобный функционал и решил не писать новый шаблон, а написать именно процедурку, описанную в предыдущем письме - одна на все файлы! Ведь шаблон все-равно сгенерит для каждого файла свой отдельный бровз с практически идентичным кодом.

=============================
С уважением, Олег А. Руденко
Ник, а нельзя ли по-подробнее, для тех кто в танке :)),
Легко. http://www.softvelocity.com/products/imdb.pdf ;)
где этот драйвер в 6-ке ? Я что-то не нашёл.
Или это отдельная фича?
Это мне как-то не понятно. Продукт анонсирован, как-то "сбоку". Цены на него
нет. В составе с60 тоже нет.

WBR, Nick Tsigouro. MailTo:Nick@arsis.ru

(Добавление)
Объемом кода (представляешь сколько надо будет прокачать по сетке при ...
Не понял, у тебя по сетке раз в N дней прокачать 3 метра проблема? Пошли гонца с парой дискет.
... обновлении проги! :) У меня еще ничего нет, а уже exe 3 метра. А для 3
"Чукча писатель"... (с восхищением) ;)

А зачем обновлять _все_? Если у тебя DLL-и, и они какой-нибудь защитой меж собой не повязаны, зачем все обновлять. Одну-две длл-ки и хорош. Опять же, если ABC в отдельную DLL-ку вынесешь, далеко не каждый раз обновлять удешь.
записей ставить вровс у меня совесть не позволяет.
Ставь LIST+QUEUE. Тебе чего в 3-х записях бровзовым шаблоном делать?
Сортировать 6-ю способами и фильтровать 8-ю? Колонки перетаскивать и без сортировки кликом по заголовку не прожить? Или без QBE никуда?
Странный ты Ник, ты же прекрасно знаешь что вопреки теории АБС дает больший объем кода,
Ну, если бровза одна, да еще совсем простенькая, то тады да.
кроме того значительно более медленный код
Под "значительно" и "много" я понимаю - "в три и более раз". Цифры в студию.
(см ваш пример к курсам переключение закладок хотя бы), менее устойчивый код
Ну да. А легасевй код с самого начала работал как часы ;-0)
комментарий к FREE ABC если сам не убедился), трудно модифицируемый программером код, а значит опасный для сопровождения. Короче если ты ...
Сори, ну просто бред какой-то. Разобраться - да сложнее, но модифицировать (писать в ембеды) - во сто крат легче. Просто потому, что он _существенно_лучше и глубже структурирован.
Посмотреть бы для начала, а что квея хуже?
Что значит лучше? Ты ее можешь в словаре описать c тем, чтобы в любом стандартном шаблоне юзать? По сути - это она и есть, только оформлена как файловый драйвер.

WBR, Nick Tsigouro

(Добавление)

Здравствуйте, Nick!
Это мне как-то не понятно. Продукт анонсирован, как-то "сбоку". Цены на него нет. В составе с60 тоже нет.
Я так понял, что выйдет после финального релиза 6.1 как отдельная позиция в прайсе.

С уважением,
Вячеслав Черников support@finsoft.ryazan.ru

Hi,

В догонку.

"The In-Memory driver is done and will ship as sson as c6.1 is finalized.
There are some ideas we have as to additional class support that may be desired by the community, but they won't delay the release.

The IP driver/server is probably about 3 weeks away. "

WBR, Nick Tsigouro


(Добавление)
"Чукча писатель"... (с восхищением) ;)
Нет Ник, не уговоришь. Пока в кларионе не сделаю более - менее приличную задачку в АБС больше не полезу.
Остальное не принципиально. А по поводу объма я проверял. Как-то писал даже про 20 бровзов по одной таблице. Разница в темпе заметна на глаз.
Мерять ее мне без надобности. Медленнее и все. Ресурсов требует больше тож. Ну и если в инструменте я ничего для самовыражения не могу принципиального поменять нафиг мне такой инструмент!

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

--
С уважением, SAN
Написал: ClaList(2)
Гость

Сообщение Гость »

Ник, а ты про этот CUSTOM знаешь? Никто с утра двух слов не написал, а мне вечером хотелось бы посмотреть спокойно.
Я ШВС не пользую. Так что, звиняй, не в курсе.

WBR, Nick Tsigouro
Написал: ClaList(2)
Ответить