powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / дерево (дерево кодов ОКОФ)
14 сообщений из 14, страница 1 из 1
дерево (дерево кодов ОКОФ)
    #32614653
башмак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую вас коллеги.
Создаю дерево кодов ОКОФ (общероссийский кодификатор основных фондов) Использую модуль, разработанный А.Анисимовым (если не ошибаюсь). Записей много (около 20000), строится довольно долго (минуты 3), элемент treveiw лежит в закладке на форме, если перехожу на другую закладку и назад, такое ощущение, что дерево строится заново. (хотя события потери/получения фокуса не обрабатываются). Более того, access после нескольких такиъх переходов завершается аварийно. Если на другую закладку не перехожу, работа, вроде, нормальная: узлы раскрываются, закрываются, отмечаются и пр. windows 98, access 2000, ms treeveiw 6,
Кто чем может помочь?
...
Рейтинг: 0 / 0
дерево (дерево кодов ОКОФ)
    #32614687
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>строится довольно долго (минуты 3),
не стройдерево целиком,
а подсасывай узлы динамически
...
Рейтинг: 0 / 0
дерево (дерево кодов ОКОФ)
    #32615960
башмак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1 Часто вижу этот совет в ответах, но не понимаю, как это делается?
2 был еще вопрос - о том, что все перерисовывается при потере фокуса. Так и должно быть? К тому же access аварийно завершается. С этим не сталкивались?
...
Рейтинг: 0 / 0
дерево (дерево кодов ОКОФ)
    #32616186
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для Щф2000 мне как то посоветовали использовать 5-й тревью с 3-м сервиспаком - гораздо меньше глюков, и всего лишь чуть-чуть меньше возможностей по оформлению.
...
Рейтинг: 0 / 0
дерево (дерево кодов ОКОФ)
    #32616198
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оф2000 имеется ввиду. Внедрял на лист Ексель.
...
Рейтинг: 0 / 0
дерево (дерево кодов ОКОФ)
    #32616261
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-поводу пункта 2 - так быть не должно. Смотрите код внимательнее - ничего просто так не происходит.
По-поводу пункта 1 - при клике на ноду, стройте детей только у неё, если таковые имеются. Вот и всё, т.е. не нужно рекурсивно (я полагаю, что так у вас и есть) вызывать функцию построения дерева для всех нод. Напишите свою - подавайте ей на вход ноду и стройте дочек (только один уровень - без всей вложенности).
...
Рейтинг: 0 / 0
дерево (дерево кодов ОКОФ)
    #32616772
башмак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HummerПо-поводу пункта 1 - при клике на ноду, стройте детей только у неё, если таковые имеются. Вот и всё, т.е. не нужно рекурсивно (я полагаю, что так у вас и есть) вызывать функцию построения дерева для всех нод. Напишите свою - подавайте ей на вход ноду и стройте дочек (только один уровень - без всей вложенности).
Кажется, проникся. НО как выйти на клик на ноду? в свойствах этого не вижу.
...
Рейтинг: 0 / 0
дерево (дерево кодов ОКОФ)
    #32616868
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зайти в редактор ВБА, выбрать в окне редактора в левом верхнем поле объект treeview, а в правом будут всег его свойства. В дизайнере на формах таких нет. Больше того, в аксес не видно большую часть свойств тривью - поэтому лучше поставить себе вб, если нужно досконально изучить данный activex.
...
Рейтинг: 0 / 0
дерево (дерево кодов ОКОФ)
    #32617875
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виталдля Щф2000 мне как то посоветовали использовать 5-й тревью с 3-м сервиспаком - гораздо меньше глюков, и всего лишь чуть-чуть меньше возможностей по оформлению.

С ухода с 5-го тривью на 6-ой (SP6) избавился почти от всех не приятных глюков 5-ой версии. А те что остались - оказались от кривых рук :)
...
Рейтинг: 0 / 0
дерево (дерево кодов ОКОФ)
    #32617954
башмак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделал постепенное (только дочек кликнутого узла) построение дерева, но неприятности с переходом по вкладкам сохраняются: после перехода на другую вкладку и возвращение на вкладку с деревом количество веток удваивается, если еще раз перейти на другую вкладку, то аварийно завершается access. М, виноват не я, а версия treeview? Где взять самую неглючную?
...
Рейтинг: 0 / 0
дерево (дерево кодов ОКОФ)
    #32618003
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тривью и листвью всех версий глючат при размещении их на вкладках. Но акес у меня не вылетает - по пробуй установить последниюю версию 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&)
...
Рейтинг: 0 / 0
дерево (дерево кодов ОКОФ)
    #32618045
башмак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
использую функцию
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?
...
Рейтинг: 0 / 0
дерево (дерево кодов ОКОФ)
    #32626615
башмак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Senin Victor: АУ! Вы мое письмо видели? Я там привел текст используемого модуля. Есть что сказать?
...
Рейтинг: 0 / 0
дерево (дерево кодов ОКОФ)
    #32637956
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
башмакSenin Victor: АУ! Вы мое письмо видели? Я там привел текст используемого модуля. Есть что сказать?

не видел, наверное тема либо е-маил мне не понравился и я его на сервере поцокал. Спам достал :(
Сам текст модуля слать не надо - я знаю этот модуль - вроде с сайта Сергея Новикова (msaccess.ru). Дело тут не в модуле построения дерева - а скорей весго в других процедурах/событиях формы.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / дерево (дерево кодов ОКОФ)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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