У меня море таблиц с количеством записей до 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>
Ник, а нельзя ли по-подробнее, для тех кто в танке

,
где этот драйвер в 6-ке ? Я что-то не нашёл.
Или это отдельная фича?
С уважением
Алексей Демьяненко
(Добавление)
Чем?
Объемом кода (представляешь сколько надо будет прокачать по сетке при обновлении проги!

У меня еще ничего нет, а уже exe 3 метра. А для 3 записей ставить вровс у меня совесть не позволяет.
- Тавтологией кода - goto ABC
Странный ты Ник, ты же прекрасно знаешь что вопреки теории АБС дает больший объем кода, кроме того значительно более медленный код (см ваш пример к курсам переключение закладок хотя бы), менее устойчивый код (см комментарий к FREE ABC если сам не убедился), трудно модифицируемый программером код, а значит опасный для сопровождения. Короче если ты не хочешь чтоб меня тут убили про АБС молчим!
- Загрузкой сетки при листаниях - грузи весь файл сразу, опять же, 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)