|
|
|
дерево (дерево кодов ОКОФ)
|
|||
|---|---|---|---|
|
#18+
Приветствую вас коллеги. Создаю дерево кодов ОКОФ (общероссийский кодификатор основных фондов) Использую модуль, разработанный А.Анисимовым (если не ошибаюсь). Записей много (около 20000), строится довольно долго (минуты 3), элемент treveiw лежит в закладке на форме, если перехожу на другую закладку и назад, такое ощущение, что дерево строится заново. (хотя события потери/получения фокуса не обрабатываются). Более того, access после нескольких такиъх переходов завершается аварийно. Если на другую закладку не перехожу, работа, вроде, нормальная: узлы раскрываются, закрываются, отмечаются и пр. windows 98, access 2000, ms treeveiw 6, Кто чем может помочь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2004, 13:35:32 |
|
||
|
дерево (дерево кодов ОКОФ)
|
|||
|---|---|---|---|
|
#18+
>строится довольно долго (минуты 3), не стройдерево целиком, а подсасывай узлы динамически ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2004, 13:49:50 |
|
||
|
дерево (дерево кодов ОКОФ)
|
|||
|---|---|---|---|
|
#18+
1 Часто вижу этот совет в ответах, но не понимаю, как это делается? 2 был еще вопрос - о том, что все перерисовывается при потере фокуса. Так и должно быть? К тому же access аварийно завершается. С этим не сталкивались? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2004, 05:33:38 |
|
||
|
дерево (дерево кодов ОКОФ)
|
|||
|---|---|---|---|
|
#18+
для Щф2000 мне как то посоветовали использовать 5-й тревью с 3-м сервиспаком - гораздо меньше глюков, и всего лишь чуть-чуть меньше возможностей по оформлению. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2004, 10:07:37 |
|
||
|
дерево (дерево кодов ОКОФ)
|
|||
|---|---|---|---|
|
#18+
Оф2000 имеется ввиду. Внедрял на лист Ексель. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2004, 10:10:43 |
|
||
|
дерево (дерево кодов ОКОФ)
|
|||
|---|---|---|---|
|
#18+
По-поводу пункта 2 - так быть не должно. Смотрите код внимательнее - ничего просто так не происходит. По-поводу пункта 1 - при клике на ноду, стройте детей только у неё, если таковые имеются. Вот и всё, т.е. не нужно рекурсивно (я полагаю, что так у вас и есть) вызывать функцию построения дерева для всех нод. Напишите свою - подавайте ей на вход ноду и стройте дочек (только один уровень - без всей вложенности). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2004, 10:33:04 |
|
||
|
дерево (дерево кодов ОКОФ)
|
|||
|---|---|---|---|
|
#18+
HummerПо-поводу пункта 1 - при клике на ноду, стройте детей только у неё, если таковые имеются. Вот и всё, т.е. не нужно рекурсивно (я полагаю, что так у вас и есть) вызывать функцию построения дерева для всех нод. Напишите свою - подавайте ей на вход ноду и стройте дочек (только один уровень - без всей вложенности). Кажется, проникся. НО как выйти на клик на ноду? в свойствах этого не вижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2004, 13:06:47 |
|
||
|
дерево (дерево кодов ОКОФ)
|
|||
|---|---|---|---|
|
#18+
Зайти в редактор ВБА, выбрать в окне редактора в левом верхнем поле объект treeview, а в правом будут всег его свойства. В дизайнере на формах таких нет. Больше того, в аксес не видно большую часть свойств тривью - поэтому лучше поставить себе вб, если нужно досконально изучить данный activex. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2004, 13:45:23 |
|
||
|
дерево (дерево кодов ОКОФ)
|
|||
|---|---|---|---|
|
#18+
Виталдля Щф2000 мне как то посоветовали использовать 5-й тревью с 3-м сервиспаком - гораздо меньше глюков, и всего лишь чуть-чуть меньше возможностей по оформлению. С ухода с 5-го тривью на 6-ой (SP6) избавился почти от всех не приятных глюков 5-ой версии. А те что остались - оказались от кривых рук :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2004, 00:07:47 |
|
||
|
дерево (дерево кодов ОКОФ)
|
|||
|---|---|---|---|
|
#18+
сделал постепенное (только дочек кликнутого узла) построение дерева, но неприятности с переходом по вкладкам сохраняются: после перехода на другую вкладку и возвращение на вкладку с деревом количество веток удваивается, если еще раз перейти на другую вкладку, то аварийно завершается access. М, виноват не я, а версия treeview? Где взять самую неглючную? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2004, 08:23:13 |
|
||
|
дерево (дерево кодов ОКОФ)
|
|||
|---|---|---|---|
|
#18+
Тривью и листвью всех версий глючат при размещении их на вкладках. Но акес у меня не вылетает - по пробуй установить последниюю версию mscomctl.ocx, а в форму вставить этот код, который поможет избежать глюка тривью на вкладках. Так же давай код заполнения тривью - может ты чего-то где-то забыл Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ ( _ ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ lParam As Any _ ) _ As Long Const WM_SIZE As Long = &H5 Dim lngResult As Long lngResult = SendMessage(Me.hwnd, WM_SIZE, 0&, 0&) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2004, 09:07:51 |
|
||
|
дерево (дерево кодов ОКОФ)
|
|||
|---|---|---|---|
|
#18+
использую функцию Function TV_ДобавитьУзел(var_TreeView As Control, _ var_Ключ As String, _ var_Текст As String, _ Optional var_РодительскийКлюч = Null, _ Optional var_ОтношениеКРодителю = tvwChild, _ Optional var_Рисунок = Null, _ Optional var_ВыделенныйРисунок = Null, _ Optional var_Recordset As Recordset) As Boolean ' Добавление узла к TreeView (True при удачном добавлении) ' ' Входные данные: ' var_TreeView - Элемент типа TreeView ' var_Ключ - Ключ узла ' var_Текст - Подпись узла ' var_РодительскийКлюч - (необязательный) Индекс или ключ существующего узла. ' К семейству добавляется новый узел, относящийся к указаному ' аргументу. (По умолчанию новый узел добавляется в корень) ' var_ОтношениеКРодителю - (необязательный) Константа аргумента var_РодительскийКлюч ' (По умолчанию = tvwChild): ' --------------------------------------------------------------------------------------- ' | Константа | Знач. | Описание ' --------------------------------------------------------------------------------------- ' | tvwLast | 1 | Новый объект помещается после всех узлов на уровне узла, ' | | | указанного в аргументе var_РодительскийКлюч ' --------------------------------------------------------------------------------------- ' | tvwNext | 2 | Новый объект узла вводится после уровня узла, ' | | | указанного в аргументе var_РодительскийКлюч ' --------------------------------------------------------------------------------------- ' | tvwPrevious | 3 | Новый объект узла вводится перед уровнем узла, ' | | | указанного в аргументе var_РодительскийКлюч ' --------------------------------------------------------------------------------------- ' | tvwChild | 4 | Новый объект узла становится дочерним объектом узла, ' | | | указанного в аргументе var_РодительскийКлюч (уст. по умолчанию) ' --------------------------------------------------------------------------------------- ' ' var_Рисунок - (необязательный) Индекс рисунка в связанном элементе ImageList ' (По умолчанию рисунок отсутствует) ' var_ВыделенныйРисунок - (необязательный) Индекс рисунка для выбранного узла в связанном ' элементе ImageList (По умолчанию рисунок отсутствует) ' var_Recordset - (необязательный) Recordset типа TreeViewNodes On Error GoTo Err_TV_ДобавитьУзел Dim boolUseRS As Boolean Dim var As Variant If Not var_Recordset Is Nothing Then boolUseRS = True Else boolUseRS = False End If If Nz(var_ОтношениеКРодителю) = "" Then var_ОтношениеКРодителю = tvwChild End If 'Если нет параметра var_РодительскийКлюч If Nz(var_РодительскийКлюч) = "" Then 'Если нет параметра var_Рисунок If Nz(var_Рисунок) = "" Then 'Если нет параметра var_ВыделенныйРисунок If Nz(var_ВыделенныйРисунок) = "" Then var_TreeView.Nodes.Add(, var_ОтношениеКРодителю, var_Ключ) = var_Текст Else If IsNumeric(var_ВыделенныйРисунок) Then var_TreeView.Nodes.Add(, var_ОтношениеКРодителю, var_Ключ, , , CLng(var_ВыделенныйРисунок)) = var_Текст Else var_TreeView.Nodes.Add(, var_ОтношениеКРодителю, var_Ключ, , , var_ВыделенныйРисунок) = var_Текст End If End If Else 'Если нет параметра var_ВыделенныйРисунок If Nz(var_ВыделенныйРисунок) = "" Then If IsNumeric(var_Рисунок) Then var_TreeView.Nodes.Add(, var_ОтношениеКРодителю, var_Ключ, , CLng(var_Рисунок)) = var_Текст Else var_TreeView.Nodes.Add(, var_ОтношениеКРодителю, var_Ключ, , var_Рисунок) = var_Текст End If Else If IsNumeric(var_Рисунок) Then If IsNumeric(var_ВыделенныйРисунок) Then var_TreeView.Nodes.Add(, var_ОтношениеКРодителю, var_Ключ, , CLng(var_Рисунок), CLng(var_ВыделенныйРисунок)) = var_Текст Else var_TreeView.Nodes.Add(, var_ОтношениеКРодителю, var_Ключ, , CLng(var_Рисунок), var_ВыделенныйРисунок) = var_Текст End If Else If IsNumeric(var_ВыделенныйРисунок) Then var_TreeView.Nodes.Add(, var_ОтношениеКРодителю, var_Ключ, , var_Рисунок, CLng(var_ВыделенныйРисунок)) = var_Текст Else var_TreeView.Nodes.Add(, var_ОтношениеКРодителю, var_Ключ, , var_Рисунок, var_ВыделенныйРисунок) = var_Текст End If End If End If End If Else var = var_РодительскийКлюч 'Если нет параметра var_Рисунок If Nz(var_Рисунок) = "" Then 'Если нет параметра var_ВыделенныйРисунок If Nz(var_ВыделенныйРисунок) = "" Then var_TreeView.Nodes.Add(var, var_ОтношениеКРодителю, var_Ключ) = var_Текст Else If IsNumeric(var_ВыделенныйРисунок) Then var_TreeView.Nodes.Add(var_РодительскийКлюч, var_ОтношениеКРодителю, var_Ключ, , , CLng(var_ВыделенныйРисунок)) = var_Текст Else var_TreeView.Nodes.Add(var_РодительскийКлюч, var_ОтношениеКРодителю, var_Ключ, , , var_ВыделенныйРисунок) = var_Текст End If End If Else 'Если нет параметра var_ВыделенныйРисунок If Nz(var_ВыделенныйРисунок) = "" Then If IsNumeric(var_Рисунок) Then var_TreeView.Nodes.Add(var_РодительскийКлюч, var_ОтношениеКРодителю, var_Ключ, , CLng(var_Рисунок)) = var_Текст Else var_TreeView.Nodes.Add(var_РодительскийКлюч, var_ОтношениеКРодителю, var_Ключ, , var_Рисунок) = var_Текст End If Else If IsNumeric(var_Рисунок) Then If IsNumeric(var_ВыделенныйРисунок) Then var_TreeView.Nodes.Add(var_РодительскийКлюч, var_ОтношениеКРодителю, var_Ключ, , CLng(var_Рисунок), CLng(var_ВыделенныйРисунок)) = var_Текст Else var_TreeView.Nodes.Add(var_РодительскийКлюч, var_ОтношениеКРодителю, var_Ключ, , CLng(var_Рисунок), var_ВыделенныйРисунок) = var_Текст End If Else If IsNumeric(var_ВыделенныйРисунок) Then var_TreeView.Nodes.Add(var_РодительскийКлюч, var_ОтношениеКРодителю, var_Ключ, , var_Рисунок, CLng(var_ВыделенныйРисунок)) = var_Текст Else var_TreeView.Nodes.Add(var_РодительскийКлюч, var_ОтношениеКРодителю, var_Ключ, , var_Рисунок, var_ВыделенныйРисунок) = var_Текст End If End If End If End If End If If boolUseRS Then var_Recordset.AddNew var_Recordset!Key = var_Ключ var_Recordset!Text = var_Текст var_Recordset!Parent = IIf(var_ОтношениеКРодителю = tvwChild, var_РодительскийКлюч, "") var_Recordset!Image = Nz(var_Рисунок) var_Recordset!SelectedImage = Nz(var_ВыделенныйРисунок) var_Recordset.Update End If TV_ДобавитьУзел = True Exit_TV_ДобавитьУзел: Exit Function Err_TV_ДобавитьУзел: TV_ДобавитьУзел = False Resume Exit_TV_ДобавитьУзел End Function вызываю 1й раз так Private Sub кнПострДер2_Click() ' строим дерево по уровням: корень, по нажатию - его дочерей On Error GoTo Err_кнПострДер2_Click Dim xx As Boolean DoCmd.Hourglass True SysCmd acSysCmdSetStatus, "постр дерева2 " ' xx = TV_ПостроитьДеревоПоТаблице(tv, NodeRS) NodeRS.MoveFirst xx = TV_ДобавитьУзел(tv, _ NodeRS!Key, _ NodeRS!Text, _ NodeRS!Parent, _ , _ NodeRS!Image, _ NodeRS!SelectedImage) SysCmd acSysCmdClearStatus Exit_кнПострДер2_Click: DoCmd.Hourglass False Exit Sub Err_кнПострДер2_Click: MsgBox Err.Description Resume Exit_кнПострДер2_Click End Sub последующие так Private Sub tv_NodeClick(ByVal Node As Object) On Error GoTo Err_tv_NodeClick Dim xx As Boolean, rst As Recordset SysCmd acSysCmdSetStatus, "постр узла " Set rst = CurrentDb.OpenRecordset("select * from treeviewnodes where parent=""" & Node.Key & """", dbOpenDynaset) If Not (rst.BOF And rst.EOF) Then rst.MoveFirst Do While Not rst.EOF xx = TV_ДобавитьУзел(tv, _ rst!Key, _ rst!Text, _ rst!Parent, _ , _ rst!Image, _ rst!SelectedImage) rst.MoveNext Loop End If SysCmd acSysCmdClearStatus Set rst = Nothing Exit_tv_NodeClick: Exit Sub Err_tv_NodeClick: MsgBox Err.Description Resume Exit_tv_NodeClick End Sub Кстати, где взять последнюю версию treeview? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2004, 09:38:38 |
|
||
|
дерево (дерево кодов ОКОФ)
|
|||
|---|---|---|---|
|
#18+
Senin Victor: АУ! Вы мое письмо видели? Я там привел текст используемого модуля. Есть что сказать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2004, 10:59:54 |
|
||
|
дерево (дерево кодов ОКОФ)
|
|||
|---|---|---|---|
|
#18+
башмакSenin Victor: АУ! Вы мое письмо видели? Я там привел текст используемого модуля. Есть что сказать? не видел, наверное тема либо е-маил мне не понравился и я его на сервере поцокал. Спам достал :( Сам текст модуля слать не надо - я знаю этот модуль - вроде с сайта Сергея Новикова (msaccess.ru). Дело тут не в модуле построения дерева - а скорей весго в других процедурах/событиях формы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2004, 09:04:01 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32616261&tid=1672673]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
51ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 353ms |

| 0 / 0 |
