Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Получение handle по имени items в TreeView / 25 сообщений из 25, страница 1 из 1
29.03.2005, 16:52
    #32986824
autumn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение handle по имени items в TreeView
Столкнулся тут с такой проблеммой - необходимо получить handle по названию items в TreeView.
Все названия итемов уникальны. Пользую PB8
...
Рейтинг: 0 / 0
29.03.2005, 19:22
    #32987217
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение handle по имени items в TreeView
Травёрсать дерево :-)
RTFM - FindItem PowerScript function/Syntax 4 For TreeView controls
...
Рейтинг: 0 / 0
29.03.2005, 19:35
    #32987240
autumn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение handle по имени items в TreeView
ФилиппRTFM - FindItem PowerScript function/Syntax 4 For TreeView controls
FindItem - эт конечно замечательно, но немного не то, или я не понял раздел хелпа.
Повторюсь
- Есть название (label) итема в дереве
- требуеться получить handle этог итема в дереве.
...
Рейтинг: 0 / 0
29.03.2005, 19:59
    #32987280
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение handle по имени items в TreeView
Может вам ещё еду прожевать? :-)
...
Рейтинг: 0 / 0
29.03.2005, 20:02
    #32987286
autumn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение handle по имени items в TreeView
ФилиппМожет вам ещё еду прожевать? :-)
Ну можно, а почему бы и нет? А то у меня с зубьями трабла некоторая наблюдаеться. Скока будет стоит прожевывание еды?
...
Рейтинг: 0 / 0
29.03.2005, 20:03
    #32987289
Enlighten me
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение handle по имени items в TreeView
autumn ФилиппRTFM - FindItem PowerScript function/Syntax 4 For TreeView controls
FindItem - эт конечно замечательно, но немного не то, или я не понял раздел хелпа.
Повторюсь
- Есть название (label) итема в дереве
- требуеться получить handle этог итема в дереве.

Не помню есть ли подходящая Вам функция в PFC, но ручками рекурсивный обход дерева пишется за 15 минут. Причём в PB итераторы писать - рахат лукум. Попробуйте, не лишайше себя доступных радостей ;-)) Судя по последней реплике, именно к этому вас Филипп и склоняет...
...
Рейтинг: 0 / 0
29.03.2005, 20:07
    #32987297
autumn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение handle по имени items в TreeView
Enlighten meНе помню есть ли подходящая Вам функция в PFC, но ручками рекурсивный обход дерева пишется за 15 минут. Причём в PB итераторы писать - рахат лукум. Попробуйте, не лишайше себя доступных радостей ;-)) Судя по последней реплике, именно к этому вас Филипп и склоняет...
Я понял к чему меня склоняет Филипп (я всеж не понял сколько это будет стоить?). Обход дерева - вещь вполне очевидная, и за сколько он пишеться - я в курсе. Ежли нет других вариантов(о чем и спрашивалось) - придеться остановиться на этом. Хотя когда в дереве 1500 и более итемов - эт не самый рациональный вариант.
...
Рейтинг: 0 / 0
29.03.2005, 20:32
    #32987338
Enlighten me
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение handle по имени items в TreeView
autumn Enlighten meНе помню есть ли подходящая Вам функция в PFC, но ручками рекурсивный обход дерева пишется за 15 минут. Причём в PB итераторы писать - рахат лукум. Попробуйте, не лишайше себя доступных радостей ;-)) Судя по последней реплике, именно к этому вас Филипп и склоняет...
Я понял к чему меня склоняет Филипп (я всеж не понял сколько это будет стоить?). Обход дерева - вещь вполне очевидная, и за сколько он пишеться - я в курсе. Ежли нет других вариантов(о чем и спрашивалось) - придеться остановиться на этом. Хотя когда в дереве 1500 и более итемов - эт не самый рациональный вариант.

Во-первых, 10^3 это не те объёмы данных, о которых можно серьёзно говорить. Соотв "нерациональность" по любому сильно врядли будет видна невооруженным глазом. Если железо не из музея.
Во-вторых, если контрол специально не заточен на поиск по лэйблу, спец функция будет делать то же самое - бежать по графу и сравнивать с заданным образцом. Где ж нерациональность?
...
Рейтинг: 0 / 0
29.03.2005, 20:38
    #32987345
autumn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение handle по имени items в TreeView
Enlighten meВо-первых, 10^3 это не те объёмы данных, о которых можно серьёзно говорить. Соотв "нерациональность" по любому сильно врядли будет видна невооруженным глазом. Если железо не из музея.
Во-вторых, если контрол специально не заточен на поиск по лэйблу, спец функция будет делать то же самое - бежать по графу и сравнивать с заданным образцом. Где ж нерациональность?
Хм, даже ежли железо не музейное ИМХО - тормоза будут. Вообщем поглядим.
...
Рейтинг: 0 / 0
29.03.2005, 20:44
    #32987351
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение handle по имени items в TreeView
autumn Enlighten meНе помню есть ли подходящая Вам функция в PFC, но ручками рекурсивный обход дерева пишется за 15 минут. Причём в PB итераторы писать - рахат лукум. Попробуйте, не лишайше себя доступных радостей ;-)) Судя по последней реплике, именно к этому вас Филипп и склоняет...
Я понял к чему меня склоняет Филипп (я всеж не понял сколько это будет стоить?). Обход дерева - вещь вполне очевидная, и за сколько он пишеться - я в курсе. Ежли нет других вариантов(о чем и спрашивалось) - придеться остановиться на этом. Хотя когда в дереве 1500 и более итемов - эт не самый рациональный вариант.

В таком случае встает вопрос - каким образом эти самые "1500 и более итемов" в дерево попали, и не нужно ли чё-нить запомнить про эти самые "1500 и более итемов" в момент их туда попадания, типа для облегчения идиотского поиска по "названия итемов уникальны"...
...
Рейтинг: 0 / 0
29.03.2005, 20:56
    #32987364
autumn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение handle по имени items в TreeView
ФилиппВ таком случае встает вопрос - каким образом эти самые "1500 и более итемов" в дерево попали, и не нужно ли чё-нить запомнить про эти самые "1500 и более итемов" в момент их туда попадания, типа для облегчения идиотского поиска по "названия итемов уникальны"...
Итемы эти туда попали из таблицы в базе. В принципе - можно добавить в каждое табло в базе отдельное поле которое будет( может быть) соответствовать handle в дереве, но таблиц, по кторым строятся подобные деревья - несколько. Тож вариант не очень.
...
Рейтинг: 0 / 0
29.03.2005, 21:13
    #32987374
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение handle по имени items в TreeView
autumn ФилиппВ таком случае встает вопрос - каким образом эти самые "1500 и более итемов" в дерево попали, и не нужно ли чё-нить запомнить про эти самые "1500 и более итемов" в момент их туда попадания, типа для облегчения идиотского поиска по "названия итемов уникальны"...
Итемы эти туда попали из таблицы в базе. В принципе - можно добавить в каждое табло в базе отдельное поле которое будет( может быть) соответствовать handle в дереве, но таблиц, по кторым строятся подобные деревья - несколько. Тож вариант не очень.

Ну я ваще то парень простой, но всё же и без вас догадался, что итемы эти туда попали из таблицы в базе. КАК они туда попали?
...
Рейтинг: 0 / 0
29.03.2005, 21:14
    #32987376
Enlighten me
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение handle по имени items в TreeView
autumn ФилиппВ таком случае встает вопрос - каким образом эти самые "1500 и более итемов" в дерево попали, и не нужно ли чё-нить запомнить про эти самые "1500 и более итемов" в момент их туда попадания, типа для облегчения идиотского поиска по "названия итемов уникальны"...
Итемы эти туда попали из таблицы в базе. В принципе - можно добавить в каждое табло в базе отдельное поле которое будет( может быть) соответствовать handle в дереве, но таблиц, по кторым строятся подобные деревья - несколько. Тож вариант не очень.

Никогда бы не догадался. Это сильно. Экспрессивно. Первобытно как-то... Мне триста лет, я выполз из тьмы. (С) Макаревич.

А может, не так радикально попробовать:
Создаём датасторе. В нем резервируем интовое поле под хэндл. Селектим туда несметные полторы тышши записей. Запузыриваем процесс порождения дерева - во ((С)Крамаров). Не забываем прописывать свежеобретенные хэндлы... Или что-то вроде этого... А в datastore поиск быстрый-пребыстрый...
...
Рейтинг: 0 / 0
29.03.2005, 21:21
    #32987387
autumn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение handle по имени items в TreeView
Enlighten meНикогда бы не догадался. Это сильно. Экспрессивно. Первобытно как-то... Мне триста лет, я выполз из тьмы. (С) Макаревич.
Ну все не так первобытно. Иногда проще обойтись без datastore.

Создаём датасторе. В нем резервируем интовое поле под хэндл. Селектим туда несметные полторы тышши записей. Запузыриваем процесс порождения дерева - во ((С)Крамаров). Не забываем прописывать свежеобретенные хэндлы... Или что-то вроде этого... А в datastore поиск быстрый-пребыстрый...
Ну да, поиск там вполне быстрый. Но к чему такие осложнения. Ежли можно посредством курсоров все из базы дергать?

Правда тут появляеться проблема с поиском в дереве. Которая решаеться либо перебором handle, либо Вашей методикой.
...
Рейтинг: 0 / 0
29.03.2005, 21:33
    #32987395
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение handle по имени items в TreeView
autumnНу да, поиск там вполне быстрый. Но к чему такие осложнения. Ежли можно посредством курсоров все из базы дергать?
Правда тут появляеться проблема с поиском в дереве. Которая решаеться либо перебором handle, либо Вашей методикой.

Вот классическое подтверждение моего припева.
За каким хреном вы курсоры используете, если на Powerbuildere пишете? Где вы это бранное слово услыхали? :-))
...
Рейтинг: 0 / 0
29.03.2005, 21:36
    #32987401
autumn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение handle по имени items в TreeView
ФилиппВот классическое подтверждение моего припева.
За каким хреном вы курсоры используете, если на Powerbuildere пишете? Где вы это бранное слово услыхали? :-))
Хм, а в чем проблема? Чего в них плохого?
...
Рейтинг: 0 / 0
30.03.2005, 11:56
    #32988166
PaulJB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение handle по имени items в TreeView
Решена у меня подобная проблема давным давно ...
Есть таблица в ~40000 записей. Никто ее всю в TreeView сразу не грузит. :)
Заполняются уровни по мере необходимости (открытия) с помощью именно КУРСОРА. Пробовал через DataStore - тормоза. Ведь принцип заполнения DataStore и есть тот самый курсор. Это получается - заполни DataStore, а затем бегай по нему заполняя TreeView. Двойная работа. Я сравнивал по скорости - выигрыш курсора перед DataStore примерно 30%.
Поиск происходит сл. образом. В базе есть процедура, которая возвращает последовательность узловых (в Вашем случае Label-ов) по уровням до искомого начиная от корневого (вот сдесь я использую DataStore).
Ну а дальше понятно- с помощью FindItem двигаемся сверху вниз базируясь на полученной последовательности. Для каждого уровня FindItem вызывается один раз. Как получить handle с помощью FindItem я описывать не буду. На время перебора по дереву не забудьте отключить перерисовку.
На машине из музея (Cel.300, 128Mb RAM, Win98, DataBase ASA8.03) до 15 уровня прога добирается ~2-3сек. ИМХО вполне прилично учитывая то, что во время заполнения еще происходит дополнительный анализ полученных данных.
...
Рейтинг: 0 / 0
30.03.2005, 13:45
    #32988539
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение handle по имени items в TreeView
PaulJBВедь принцип заполнения DataStore и есть тот самый курсор.
Это где Вы такое вычитали? DECLARE CURSOR, FETCH да?

У меня в справочнике 38000 записей, заполняется из DataStore по мере раскрытия узлов пользователем. Никаких тормозов нет. Через курсор быстрее не будет.
...
Рейтинг: 0 / 0
30.03.2005, 14:13
    #32988642
Nividimka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение handle по имени items в TreeView
Посмотри в атташе. Я не так давно много всяких деревянных штучек написал - может, чего сгодится. Что ты просишь - есть в том числе.
...
Рейтинг: 0 / 0
30.03.2005, 14:15
    #32988651
Nividimka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение handle по имени items в TreeView
Хм. Не прицепился :(.
...
Рейтинг: 0 / 0
30.03.2005, 14:18
    #32988667
autumn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение handle по имени items в TreeView
NividimkaПосмотри в атташе. Я не так давно много всяких деревянных штучек написал - может, чего сгодится. Что ты просишь - есть в том числе.
Спасиб. Погляжу.
...
Рейтинг: 0 / 0
30.03.2005, 14:34
    #32988725
Enlighten me
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение handle по имени items в TreeView
PaulJBРешена у меня подобная проблема давным давно ...
Есть таблица в ~40000 записей. Никто ее всю в TreeView сразу не грузит. :)
Заполняются уровни по мере необходимости (открытия) с помощью именно КУРСОРА.
Вопрос (изначальный) не звучал "Как правильно работать с многоуровневыми иерархическими данными средствами PB", не так ли? So, если есть желание поговорить именно об этом, то можно создать отдельную ветку или дописать ещё одну статью к икаровской серии для начинающих. IMHO, 'course.

PaulJBВедь принцип заполнения DataStore и есть тот самый курсор.Чем докажете?

PaulJBПоиск происходит сл. образом. В базе есть процедура, которая возвращает последовательность узловых (в Вашем случае Label-ов) по уровням до искомого начиная от корневого (вот сдесь я использую DataStore).
Ну а дальше понятно- с помощью FindItem двигаемся сверху вниз базируясь на полученной последовательности. Для каждого уровня FindItem вызывается один раз. Вот с этого места поподробнее. Если я Вас правильно понял, то процедура вам выплёвывает что-то навроде 'Root_M\Branch_MN\Leaf_MN1' для параметра 'Leaf_MN1'. Соответственно, на каждом уровне вы всё-таки вынуждены проводить последовательный поиск, don't you? Как вы обходитесь одним FindItem для каждого уровня, откройте секрет...
...
Рейтинг: 0 / 0
30.03.2005, 17:31
    #32989424
PaulJB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение handle по имени items в TreeView
Локшин Марк
>Это где Вы такое вычитали?

Кажись в книге по 5 ПБ или 6 точно уже не помню.
Там было предупреждение про использование опции RetrieveAsNeeded.
Упоминалось про то, что до завершения retrieve DW держит открытым курсор и при этом строки в курсоре могут быть заблокированы (см. Isolation Level).
Может в более старших версиях уже переделали ... ?

А как по вашему организуется срабатывание события RetrieveRow ?

>У меня в справочнике 38000 записей, заполняется из DataStore по мере раскрытия узлов пользователем. Никаких тормозов нет. Через курсор быстрее не будет.

А как Вы гарантируете соответствие данных в дереве и в базе?
Ведь содержимое DataStore надо обновлять ? Каждый раз Retrieve для 38000 записей ?
А так: юзер закрыл/открыл уровень - вот вам и свежие данные.

2 Enlighten me
Если я Вас правильно понял, то процедура вам выплёвывает что-то навроде 'Root_M\Branch_MN\Leaf_MN1' для параметра 'Leaf_MN1'. Соответственно, на каждом уровне вы всё-таки вынуждены проводить последовательный поиск, don't you? Как вы обходитесь одним FindItem для каждого уровня ...

Именно так. Конечно, приходится последовательно перебирать items на уровне, но ведь это не перебор всего дерева и Вы уверены что на выбранном уровне присутствует искомый элемент. Я немного не так выразился про FindItem за что прошу пардону у обчества. Имелось в виду ф-ция поиска по уровню, которая вызывается рекурсивно.
...
Рейтинг: 0 / 0
30.03.2005, 19:51
    #32989733
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение handle по имени items в TreeView
PaulJB Локшин Марк
>Это где Вы такое вычитали?

Кажись в книге по 5 ПБ или 6 точно уже не помню.
Там было предупреждение про использование опции RetrieveAsNeeded.
Упоминалось про то, что до завершения retrieve DW держит открытым курсор и при этом строки в курсоре могут быть заблокированы (см. Isolation Level).
Может в более старших версиях уже переделали ... ?

Не переделали. Здесь кто-нить про RetrieveAsNeeded говорил?
В нормальном режиме нет курсора, а есть т.н. block read, который от курсора решительным образом отличается...
...
Рейтинг: 0 / 0
31.03.2005, 10:59
    #32990342
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение handle по имени items в TreeView
PaulJBА как Вы гарантируете соответствие данных в дереве и в базе?
Ведь содержимое DataStore надо обновлять ? Каждый раз Retrieve для 38000 записей ?
А так: юзер закрыл/открыл уровень - вот вам и свежие данные.
Гм. Произошло itempopulate, в DataStore откачалось содержимое текущего узла и вставилось в дерево. Никто естественно 38000 записей сразу не откачивает.
Для обновления есть специальная кнопочка - "обновить". А то дерево - это такая структура... был узлом а стал листом, да при том совсем еще в другом месте.
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Получение handle по имени items в TreeView / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]