powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / TreeView ТОРМОЗИТ
28 сообщений из 28, показаны все 2 страниц
TreeView ТОРМОЗИТ
    #32366557
nicename
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопросик:
Access 2000 на форму помещаем стандартный TreeView
заполняем его через RecordSet рекурсией

ТОРМОЗИТ
пробовали уйти от рекурсии, скорость не меняется!!!!!!!!1
тормоза теже!!!!!

запрос для рекорсета возращает записи очень быстро


В ЧЕМ МОЖЕТ БЫТЬ ПРОБЛЕМА???????
...
Рейтинг: 0 / 0
TreeView ТОРМОЗИТ
    #32366569
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в пятой строчке рекурсии
...
Рейтинг: 0 / 0
TreeView ТОРМОЗИТ
    #32366615
Хам трамвайный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а нафиг ты его рекурсией
возвращаешь?
делай усе запросами
...
Рейтинг: 0 / 0
TreeView ТОРМОЗИТ
    #32366622
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В смысле?
Если имееш в виду пятый вызов, то нет...

Всего четыре уровня
...
Рейтинг: 0 / 0
TreeView ТОРМОЗИТ
    #32366642
Фотография AlexJuice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В смысле - телепятов на вас не хватило
...
Рейтинг: 0 / 0
TreeView ТОРМОЗИТ
    #32366693
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй не сливать в тривью сразу все дерево, а только верхний уровень, или только до отображаемого узла.
А по мере хождения по дереву - подкачивать требуемые записи.
...
Рейтинг: 0 / 0
TreeView ТОРМОЗИТ
    #32366752
Nicename
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообщем послушал и понял :
либо всех все устраивает в TreeView либо никто ничего не знает ((

Я хочу
1.залить всё дерево сразу
2.Приемлемое время выполнение данной операции
3. Наперед грубина дерева - неизвестна, поэтому рекурсия

Моя прога по заливке данных:

Dim qd As QueryDef
Private Sub Form_Load()

Call AddNodes("P0")

End Sub


Private Sub AddNodes(KeyParent As String)

Dim rstCustomers As Recordset
Set qd = CurrentDb.QueryDefs("zObjectLoad")
qd.Parameters("Parent1").Value = KeyParent
Set rstCustomers = qd.OpenRecordset
Dim NodX As Node
Do While Not rstCustomers.EOF
With TreeView1.Nodes
If KeyParent = "P0" Then '=============================корневой узел
Set NodX = .Add(, , rstCustomers!KeyObject, rstCustomers!ObjectFullName)
Else ' ==========================================дочерний узел
Set NodX = .Add(KeyParent, tvwChild, rstCustomers!KeyObject, rstCustomers!ObjectFullName)
End If
End With
Call AddNodes(rstCustomers!KeyObject)
rstCustomers.MoveNext
Loop
rstCustomers.Close
End Sub


Что здесь может тормозить???????????
на 30 записях - 5 сек.
300 зап. 50сек.
((((((
...
Рейтинг: 0 / 0
TreeView ТОРМОЗИТ
    #32366771
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри топик "об n мерных вложенных запросах..."
там куча кода была
причем MSовского
то есть быстрее чем он работать не будет
...
Рейтинг: 0 / 0
TreeView ТОРМОЗИТ
    #32366781
Nicename
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
от запросов ничего независит (((
делал и одним запросом тормоза теже (((

может это TreeView тормозит?????
...
Рейтинг: 0 / 0
TreeView ТОРМОЗИТ
    #32366785
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
те грят: глянь топик, там не про запросы, там ВСЕ про ТРИВЬЮ
...
Рейтинг: 0 / 0
TreeView ТОРМОЗИТ
    #32366792
Nicename
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ссылку или номер подскажи
...
Рейтинг: 0 / 0
TreeView ТОРМОЗИТ
    #32366799
elephant_work
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не пойму почему не можешь сделать с подкачкой?
у меня в базе на текущий момент 24 категории и 133 записи с материалами причем материалы тоже рекурсивны. грузиться меньше чем за секунду. Если гружу всю базу то получается дольше но максимум было 2 сек. Это конечно не показатель с таким кол-вом данных. Но все равно дели загрузку. Проще потом будет.
...
Рейтинг: 0 / 0
TreeView ТОРМОЗИТ
    #32366811
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а почему вместо рекурсии нельзя просто пройтись по списку один раз,
предварительно отсортировав его по уровням?
сначала все 0 уровня, потом 1, ... и т.д.
тогда при добавлении нодов все само сорганизуется, без всякой рекурсии.
...
Рейтинг: 0 / 0
TreeView ТОРМОЗИТ
    #32366815
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Привожу ссылку вместо Alexus12:\r
\r
/topic/30265
...
Рейтинг: 0 / 0
TreeView ТОРМОЗИТ
    #32367260
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2nicename
>Что здесь может тормозить???????????
на 30 записях - 5 сек.

если убрать открытие рекодсета и перенести его (например) в событие Form_Load, то скорость выполнения увеличиться.

2sasha_1
>а почему вместо рекурсии нельзя просто пройтись по списку один раз,
предварительно отсортировав его по уровням? тогда при добавлении нодов все само сорганизуется, без всякой рекурсии.

Ишь ты какой хитрый :) Каким же образом отсортируешь по уровням, без ввода в таблицу избыточных данных?
И вроде бы в топике про "n мерных вложенных запросах..." я указывал про возможную логическую ошибку и способе ее обхода.
...
Рейтинг: 0 / 0
TreeView ТОРМОЗИТ
    #32367267
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Ишь ты какой хитрый :) Каким же образом отсортируешь по уровням, без ввода в таблицу избыточных данных?

Отчего же. Можно и отсортировать. Если глубина вложенности ограничена. Только работать такой запрос не слишком быстро будет :)
...
Рейтинг: 0 / 0
TreeView ТОРМОЗИТ
    #32367283
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Geo

Еще один хитрый :) - дерево и именно с ограниченным числом уровней.

>Только работать такой запрос не слишком быстро будет :)

Гони пример - я туплю!
...
Рейтинг: 0 / 0
TreeView ТОРМОЗИТ
    #32367288
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сенин Виктор писалЕще один хитрый :) - дерево и именно с ограниченным числом уровней.

а задолго до этого ему уже ответилиВсего четыре уровня
...
Рейтинг: 0 / 0
TreeView ТОРМОЗИТ
    #32367289
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Сенин Виктор
Гони пример - я туплю!
В случае "всего четырех уровней" - четыре подряд Left Join'а таблицы вхождений к самой себе выведут тебе всё дерево. И сортируй его как хочешь.
...
Рейтинг: 0 / 0
TreeView ТОРМОЗИТ
    #32367314
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Сенин Виктор
Для наглядности не буду собирать в один запрос. Кроме того, пишу на память, т.к. оригинал у меня замусорен всякой ерундой.

Пусть есть таблица t c полями
KeyField/KeyParent/...


Запрос1:
Код: plaintext
1.
2.
3.
select t1.KeyField as KeyLevel1, t2.KeyField as KeyLevel2, t3.KeyField as KeyLevel3, t4.KeyField as LeyLevel4
from (((t as t1 left join t as t2 on t1.KeyParent = t2.KeyField)
 left join t as t3 on t2.KeyParent=t3.KeyField)
  left join t as t4 on t3.KeyParent=t4.KeyField)


Этот запрос дает таблицу вида (прям по Гетцу):
Код: plaintext
1.
2.
3.
4.
5.
6.
KeyLevel1/KeyLevel2/KeyLevel3/KeyLevel4
 1         /         /         /
 2         / 1         /         /
 3         / 1         /         /
 4         / 2         /         /
 5         / 4         / 2         / 1 
 6         / 3         / 1         /



Запрос2:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
select 
  KeyLevel1, 
  KeyLevel2, 
  KeyLevel3, 
  KeyLevel4, 
  -((KeyLevel1 is not null)+
     (KeyLevel2 is not null)+
     (KeyLevel3 is not null)+
     (KeyLevel4 is not null)) as Depth
from [Запрос1];


Это тот же запрос1, только с обозначением для каждой записи глубины ее вложенности и почти правильно отсортированный:
Код: plaintext
1.
2.
3.
4.
5.
6.
KeyLevel1/KeyLevel2/KeyLevel3/KeyLevel4/Depth
 1         /         /         /         / 1 
 2         / 1         /         /         / 2 
 3         / 1         /         /         / 2 
 4         / 2         /         /         / 2 
 6         / 3         / 1         /         / 3 
 5         / 4         / 2         / 1         / 4 


Запрос3:
Сортируем уровни по-наоборот (не знаю, как еще это сказать:))
Код: plaintext
1.
2.
3.
4.
select KeyLevel1, KeyLevel2, KeyLevel3, KeyLevel4, Depth from [Запрос2]
order by choose(Depth,KeyLevel1,KeyLevel2,KeyLevel3,KeyLevel4),
 choose(Depth- 1 ,KeyLevel1,KeyLevel2,KeyLevel3),
  choose(Depth- 2 ,KeyLevel1,KeyLevel2),
   choose(Depth- 3 ,KeyLevel1);

Результат:
Код: plaintext
1.
2.
3.
4.
5.
6.
KeyLevel1/KeyLevel2/KeyLevel3/KeyLevel4/Depth
 1         /         /         /         / 1 
 2         / 1         /         /         / 2 
 5         / 4         / 2         / 1         / 4 
 3         / 1         /         /         / 2 
 6         / 3         / 1         /         / 3 
 4         / 2         /         /         / 2 


Вот, собственно.
...
Рейтинг: 0 / 0
TreeView ТОРМОЗИТ
    #32367357
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лох Позорный а задолго до этого ему уже ответили
Всего четыре уровня


Уровней всего четыре в конкретном случае, а вообще сколько их будет не известно.

Но похоже от количества уровней скорость не очень зависит:

Для контроля создал таблицу с числом записей первого уровня около 40 000
и второго уровня с числом записей около 20 000 (более или менее реальная ситуация).
Скорость просто фантастическая: дерево заполняется около 15 МИНУТ , загрузка процессора 100% .

От запросов скорость также не зависит:
Заполняю одним запросом из заранее отсортированной таблицы.
...
Рейтинг: 0 / 0
TreeView ТОРМОЗИТ
    #32367387
HEXplorer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
процессор не пробовали менять?
...
Рейтинг: 0 / 0
TreeView ТОРМОЗИТ
    #32367389
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну знаеш до тебя мне далеко.
и какой тебе процессор тебе поменять?
...
Рейтинг: 0 / 0
TreeView ТОРМОЗИТ
    #32367399
-------------
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что все так сложно-то ?
А не проще выбрать одним запросом все данные на клиента
И по клиентскому рекордсету хоть с рекурсией хоть без
...
Рейтинг: 0 / 0
TreeView ТОРМОЗИТ
    #32367408
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
------------- А что все так сложно-то ?
А не проще выбрать одним запросом все данные на клиента
И по клиентскому рекордсету хоть с рекурсией хоть без

Смотри конец топика № [479571]
...
Рейтинг: 0 / 0
TreeView ТОРМОЗИТ
    #32367456
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 nicename
Тебе же уже ответил Виктор Сенин - открой рекордсет до заполнения тривью, а закрой после. У тебя все тормоза потому что ты объявляешь переменную и открываешь/закрываешь рекордсет столько же раз, сколько записей.
...
Рейтинг: 0 / 0
TreeView ТОРМОЗИТ
    #32367458
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛП писалв пятой строчке рекурсии

Private Sub AddNodes(KeyParent As String)
1:
2: Dim rstCustomers As Recordset
3: Set qd = CurrentDb.QueryDefs("zObjectLoad")
4: qd.Parameters("Parent1").Value = KeyParent
5: Set rstCustomers = qd.OpenRecordset
Dim NodX As Node
Do While Not rstCustomers.EOF
With TreeView1.Nodes
If KeyParent = "P0" Then '=============================корневой узел
Set NodX = .Add(, , rstCustomers!KeyObject, rstCustomers!ObjectFullName)
Else ' ==========================================дочерний узел
Set NodX = .Add(KeyParent, tvwChild, rstCustomers!KeyObject, rstCustomers!ObjectFullName)
End If
End With
Call AddNodes(rstCustomers!KeyObject)
rstCustomers.MoveNext
Loop
rstCustomers.Close
End Sub
...
Рейтинг: 0 / 0
TreeView ТОРМОЗИТ
    #32367462
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Присваиваю себе почетное звание телепята

В дополнение к сказанному Сениным Виктором и Гео
QueryDef тоже не требуется постоянно создавать/убивать
Один раз создать кверидеф и рекордсет (рекордсет в первый раз можно открыть с null-овым параметром у квери)
В рекурсии просто менять параметр у QueryDef и делать Requery у Recordset'а
...
Рейтинг: 0 / 0
28 сообщений из 28, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / TreeView ТОРМОЗИТ
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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