|
|
|
| Количество всех узлов в дереве Me.TreeView0.Nodes.Count
Подскажите синтаксис как узнать сколько узлов на конкретном уровне? Скажем есть уровни a и b | |
|
| |
|
|
|
| Зачем?
Количества надо получать из таблиц(ы), а не из контрола. | |
|
| |
|
|
|
| Блин! Точно
Спасибо. | |
|
| |
|
|
|
| Народ, подскажите такую штуку. На нажатие кнопки в форме с деревом делаю так:
CurrentDb.Execute "INSERT INTO [Тип аппаратуры] ( Тип) Values ('" & Me.Поле9 & "');"
Me.Список19.Requery
Me.TreeView0.Nodes.Clear
Dim rst As dao.Recordset
Set rst = CurrentDb.OpenRecordset("select * from [Тип аппаратуры] order by [Тип]")
With rst
If .RecordCount <> 0 Then
Do While Not .EOF
Call Me.TreeView0.Nodes.Add(, , "a" & ![КодТипа], ![Тип])
.MoveNext
Loop
End If
End With
Ну т.е. ввожу в свободном поле инфу, запросом на добавление в таблицу, и после каждого добавления обнуляю дерево, запускаю по этой табле рекордсет с заполнением первого уровня дерева. Так же будет и со 2 и с 3 уровнем. Это извращение или вполне приемлемо?
Вообще так делается? | |
|
| |
|
|
|
|
...и после каждого добавления обнуляю дерево...
...Вообще так делается?
|
Правильные пацаны так НЕ делают.
ps.
Я делаю, когда деревце с гулькин клюв.
(ну лень пока по-людски сделать). | |
|
| |
|
|
|
|
| Во. Пока обошелся вот таким образом. И вроде работает. Из логики. Добавляем, стало быть счетчик добавит некое число, которое будет максимальным.
Dim a As Integer
CurrentDb.Execute "INSERT INTO [Тип аппаратуры] ( Тип) Values ('" & Me.Поле9 & "');"
Me.Список19.Requery
a = DMax("КодТипа", "[Тип аппаратуры]")
Call Me.TreeView0.Nodes.Add(, , "a" & a, Me.Поле9)
Me.TreeView0.SetFocus
Me.Form.Refresh | |
|
| |
|
|
|
| Ес! Сделал! Добавка на второй уровень! Пошло! Дошло.
CurrentDb.Execute "INSERT INTO [Модели] (КодТипа, Модель) Values (" & Forms!Форма1!Поле21 & ",'" & Me.Поле9 & "');"
Me.Список19.Requery
Call Me.TreeView0.Nodes.Add("a" & Me.Поле21, 4, "b" & DMax("КодМодели", "Модели"), Me.Поле9)
Me.TreeView0.SetFocus
Me.Form.Refresh
Me.Поле9.SetFocus | |
|
| |
|
|
|
| 2 раза дергаешь табличку по одному вопросу.
Добавляй данные через Recordset, в нем же и значение ключевого поля узнаешь для добавления в дерево. | |
|
| |
|
|
|
| Технологию только осваиваю.
Добавляй данные через Recordset, в нем же и значение ключевого поля узнаешь для добавления в дерево.
Если делать как при открытии формы, с обнулением дерева, то каждый раз дерево полностью закрывается, что естественно и не очень удобно. В коде с DMax дерево не закрывается, но 2 раза обращение к таблице - это запрос и DMax может не правильно опять, но все же работает удобнее.
А можно ли как-то при добавлении запускать рекордсет, определять максимальное значение счетчика для добавления и как оно будет работать по времени? Если данных около 1000 будет, то каждый раз при добавлении будет притормаживать.
В общем тут опыт нужен, а где его взять за день-два. | |
|
| |
|
|
|
| Народ, подскажите пожалуйста.
Есть свободная форма с подформой. На основной дерево. При заполнении подформы на какое событие ставить какой код (синтаксис блин) что бы при добавлении (изменении) инфы в подформе, все менялось (добавлялось) в дерево.
Есть вариант обнулять дерево и рекорсетами снова заполнять, но хотелось бы что бы без них.
Есть вариант вместо формы список делать как выше уже обсудили.
А вот если заполнение прямо в форму идет, как только ни пытался. Ошибка блин.
Вот один из кодов на событие "После вставки" в подформе
Call Forms.[Основная форма].TreeView1.Nodes.Add("a" & Forms![Основная форма].ПолеОтобрИмяУзла, 4, "b" & DLast("ПолеТаблыПодформы", "ТаблицаПодформы"), Me.ПолеТаблыПодформы)
Forms.[Основная форма].Refresh
Тут понятно, что Call Forms.... не нравится.
Пробовал и так
Call me.TreeView1.Nodes.Add("a" & Forms![Основная форма].ПолеОтобрИмяУзла, 4, "b" & DLast("ПолеТаблыПодформы", "ТаблицаПодформы"), Me.ПолеТаблыПодформы)
Тут ему что только не нравится, но добавляет после выдачи ошибок.
Подскажите ЧД. А то сам не допру
PS На после вставки нельзя. Так даже форму не открыть. | |
|
| |
|
|
|
| Ес! Вопрос отпал! Сам додул на после обновления формы
With Forms![Основная форма].Form
Call .TreeView1.Nodes.Add("a" & Forms![Основная форма].ПолеКлюч, 4, "b" & DLast("ПолеТаблыПодформы", "ТаблаПодформы"), Me.ПолеПодформы)
End With
Как быть если удаляем или изменяем? | |
|
| |
|
|
|
| Call .TreeView1.Nodes.Add
(кстати - ты не забываешь при этом ещё и в таблицу вносить изменения - запросом на добавление или изменение записи?)
Для удаления узелка
там наверное и Del имеется | |
|
| |
|
|
|
| В том то и дело. Запросом на добавление в таблицу, после чего в дерево. Изменение и удаление тоже. Из дерева только не Del, а Me.TreeView0.Nodes.Remove (Me.Поле). В поле указывается ключ узла.
Вопрос в том, что если инфа из таблицы отображается в табличной форме, и при удалении строки надо одновременно удалить из дерева. При переходе с одной строки на другую в подформе, как отображать все эти переходы в дереве? Типа от обратного - . Что-то по ключам как-то делать надо, а в дереве все равно курсор не прыгает, наименования узлов не выделяет блин. Может это и не обязательно? В общем освоение новой технологии всегда затыки.
И еще. Лукас дал ссылку где расписано как воевать с деревом. Все понятно до определенного момента. Подскажите, за каким хреном нужны ложные узлы, которые потом удалять, менять и прочее надо. Пока без них обхожусь, но вроде что-то тут чего? | |
|
| |
|
21 Кб. |
|
| Набросал я тут тебе вариантик по-быстрому. =>
Он "очень не очень", но на некоторые вопросы там есть ответ.
ps. Прицеп заменен в 14:25 | |
|
| |
|
|
|
| Интересный пример. Но при удалении записи в таблице ругается.
Private Sub SF_Current()
SF_ID = SF.Recordset.Fields(0)
If Not SF.NewRecord Then TV.Nodes("b" & SF_ID).Selected = True
End Sub
Выделяет желтым SF_ID = SF.Recordset.Fields(0), ошибку пишет.
Может при выборе в форме записи, учитывать ее ID и на событие в форме "После подтверждения Del" удалять соотетствующий узел в дереве. Точно так же и менять на что-то другое, по событию ..... после обновления. Наверно. | |
|
| |
|
33 Кб. |
|
| Шорт! Похоже опять старый прицеп прицепил.
Тут новее => | |
|
| |
|
|
|
| Спасибо. Все предельно просто, доступно, но одновременно сложно (пока)
Проблему с удалением решил просто. Запретил удалять с формы, и только по выбору в дереве нужного ключа, можно удалять нажатием кнопки с запуском запроса на удаление.
И все потому, что если вдруг удалить более 1 записи, дерево не отрабатывает. Разве что обнулить и заново заполнить.
Ну еще дополнительно ключи выделенных записей перечислить. | |
|
| |