Вариант такой (сделал все таки именно так): думаю, не очень рациональный способ...
но может кому и поможет)
итак, если известно точное количество уровней (как у меня - 4), то распологаем на форме 5 текстбоксов и элемент Adodc (можно Data, он кушает не так много ресурсов, но тогда вместо текстбоксов придется использовать DBCombo, или что то еще, где есть привязка свойства text к отображаемым данным, увы, мне такой не известен

). Форму, конечно, можно сделать невидимой) Заполнение treeview будет происходить в Form2.
Структура таблицы такова (я для удобсва ее изменил):
urok_
id_u | klass_u | predmet_u | tema_u | urok_u |
И один запрос: z_s_u с одним полем "Count-urok_u" (всего одна запись, отбражает количество уроков)
код такой:
Private Sub Form_Load()
Dim klass As String
Dim predmet As String
Dim tema As String
Dim urok As String
Dim sum_ As String
Dim msg As String
Dim i As Integer
Dim b_name As String
b_name = App.Path & "/baze/baze.mdb"
'соединяемся
Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=" & _
b_name
Adodc1.RecordSource = "z_s_u"
Set Text5.DataSource = Adodc1
Text5.DataField = "Count-urok_u"
If Text1.Text = "" Then
sum_ = 1
Else
sum_ = Text5.Text - 1
End If
Adodc1.RecordSource = "z_urok"
Adodc1.Refresh
Set Text1.DataSource = Adodc1
Text1.DataField = "klass_u"
Set Text2.DataSource = Adodc1
Text2.DataField = "predmet_u"
Set Text3.DataSource = Adodc1
Text3.DataField = "tema_u"
Set Text4.DataSource = Adodc1
Text4.DataField = "urok_u"
'присваиваем переменным значения из текстбоксов
klass = Text1.Text
predmet = Text2.Text
tema = Text3.Text
urok = Text4.Text
Form2.TreeView1.ImageList = Form2.ImageList1
On Error GoTo ErrorM
'заполняем узлы "класс" в форме 2
For i = 1 To sum_
If i = 1 Then
Form2.TreeView1.Nodes.Add , , klass, klass, 1
Else
End If
Adodc1.Recordset.MoveNext
If klass = Text1.Text Then
Else
klass = Text1.Text
Form2.TreeView1.Nodes.Add , , klass, klass, 1
End If
Next i
Adodc1.Recordset.MoveFirst
klass = Text1.Text
'заполняем узлы "предметы"
For i = 1 To sum_
On Error Resume Next
If i = 1 Then
Form2.TreeView1.Nodes.Add klass, tvwChild, klass & predmet, predmet, 2
Form2.TreeView1.Nodes.Item(klass).Expanded = True
Else
End If
Adodc1.Recordset.MoveNext
If klass = Text1.Text And predmet = Text2.Text Then
Else
klass = Text1.Text
predmet = Text2.Text
Form2.TreeView1.Nodes.Add klass, tvwChild, klass & predmet, predmet, 2
Form2.TreeView1.Nodes.Item(klass).Expanded = True
End If
Next i
Adodc1.Recordset.MoveFirst
klass = Text1.Text
predmet = Text2.Text
tema = Text3.Text
'заполняем узлы "тема"
For i = 1 To sum_
If i = 1 Then
Form2.TreeView1.Nodes.Add klass & predmet, tvwChild, klass & predmet & tema, tema, 3
Else
End If
Adodc1.Recordset.MoveNext
If klass = Text1.Text And predmet = Text2.Text And tema = Text3.Text Then
Else
klass = Text1.Text
predmet = Text2.Text
tema = Text3.Text
Form2.TreeView1.Nodes.Add klass & predmet, tvwChild, klass & predmet & tema, tema, 3
End If
Next i
Adodc1.Recordset.MoveFirst
klass = Text1.Text
predmet = Text2.Text
tema = Text3.Text
urok = Text4.Text
'заполняем узлы "урок"
For i = 1 To sum_
If i = 1 Then
Form2.TreeView1.Nodes.Add klass & predmet & tema, tvwChild, klass & predmet & tema & urok, urok, 4
Else
End If
Adodc1.Recordset.MoveNext
If klass = Text1.Text And predmet = Text2.Text And tema = Text3.Text And urok = Text4.Text Then
Else
klass = Text1.Text
predmet = Text2.Text
tema = Text3.Text
urok = Text4.Text
Form2.TreeView1.Nodes.Add klass & predmet & tema, tvwChild, klass & predmet & tema & urok, urok, 4
End If
Next i
Form2.Show
Unload Me
Set Form1 = Nothing
Exit Sub
ErrorM:
msg = "Ошибка Заполнения древа. Проверьте путь к базе данных."
MsgBox msg, , "Ошибка!"
Unload Me
End Sub
если кто поможет сделать лучше и рациональней, буду очень благодарен)