Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> access древовидный список, помогите разобраться как работает 
:(
    Опции темы
Neivin
Дата 18.3.2010, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 1.10.2009

Репутация: нет
Всего: нет



Скачала из инета пример с древовидным списокм, под свою базу я его без проблем переделала, но хотелось бы еще и понять как он работает. Можете помочь? очень надо в пятницу предзащита.. была бы вам очень благодарна ))

Целиком базочку тоже прикрепила

Option Compare Database
Option Explicit

Dim tab_1 As String, Kod_1 As String, Name_1 As String
Dim tab_2 As String, Kod_2 As String, Name_2 As String
Dim tab_3 As String, Kod_3 As String, Name_3 As String
Dim tab_4 As String, Kod_4 As String

Private Sub Form_Load()
    '   îáúÿâëÿåì êîíñòàíòû. Çäåñü íóæíî ïðîñòî ïðîïèñàòü èìåíà Âàøèõ òàáëèö è ïîëåé
    '   ó÷àñòâóþùèõ â çàïðîñå
    tab_1 = "tab_1"
    Kod_1 = "Kod_1"
    Name_1 = "Name_1"
    tab_2 = "tab_2"
    Kod_2 = "Kod_2"
    Name_2 = "Name_2"
    tab_3 = "tab_3"
    Kod_3 = "Kod_3"
    Name_3 = "Name_3"
    tab_4 = "tab_4"
    Kod_4 = "Kod_4"
    lst_TList.RowSource = "SELECT Kod_1 AS Kod, 'Level_1_' AS Levels, ('' & ChrW(9658) & ' ' & Name_1) AS NameL FROM tab_1"
    lst_TList.Selected(0) = True
End Sub

Sub LoadLevels()
Dim kod As Long
Dim Kod_2 As Long
kod = lst_TList
    Select Case lst_TList.Column(1, lst_TList.ListIndex)
        Case "Level_1_back"
            lst_TList.RowSource = "SELECT Kod_1 AS Kod, 'Level_1_'     AS Levels, ('' & ChrW(9658) & ' ' & Name_1)   AS NameL FROM tab_1"
        Case "Level_1_", "Level_2_back"
            If lst_TList.Column(1, lst_TList.ListIndex) = "Level_2_back" Then
                kod = lst_TList.Column(0, 0)
            End If
            lst_TList.RowSource = "SELECT Kod_1 AS Kod, 'Level_1_back' AS Levels, ('' & ChrW(9660) & ' ' & Name_1)   AS NameL FROM tab_1 WHERE (Kod_1=" & kod & ") " & _
                "UNION             SELECT Kod_2 AS Kod, 'Level_2_'     AS Levels, ('  ' & ChrW(9658) & ' ' & Name_2) AS NameL FROM tab_2 INNER JOIN tab_1 ON tab_2.Kod_1 = tab_1.Kod_1 WHERE (tab_2.Kod_1=" & kod & ") ORDER BY Levels, NameL;"
        Case "Level_2_"
            Kod_2 = lst_TList.Column(0, 0)
            lst_TList.RowSource = "SELECT Kod_1 AS Kod, 'Level_1_back' AS Levels, ('' & ChrW(9660) & ' ' & Name_1)   AS NameL FROM tab_1 WHERE (Kod_1=" & Kod_2 & ") " & _
                "UNION             SELECT Kod_2 AS Kod, 'Level_2_back' AS Levels, ('  ' & ChrW(9660) & ' ' & Name_2) AS NameL FROM tab_2 WHERE (Kod_2=" & kod & ") ORDER BY NameL " & _
                "UNION             SELECT Kod_3 AS Kod, 'Level_3_'     AS Levels, ('       - ' & Name_3)             AS NameL FROM tab_3 INNER JOIN tab_2 ON tab_3.Kod_2 = tab_2.Kod_2 WHERE (tab_3.Kod_2=" & kod & ") ORDER BY Levels, NameL;"
    End Select
End Sub

Private Sub lst_TList_KeyDown(KeyCode As Integer, Shift As Integer)
Dim LvlNum As Integer, Lvl As String

    Lvl = Nz(lst_TList.Column(1, lst_TList.ListIndex), "")
    If Lvl = "" Then
        LvlNum = 1
      Else
        LvlNum = Val(Split(Lvl, "_")(1))
    End If

    Select Case KeyCode
        Case vbKeyReturn
            'Îòêðûâàåì/çàêðûâàåì ïîäâåòêó
            Call LoadLevels
        Case vbKeyBack
            'Çàêðûâàåì ïîäâåòêó
            lst_TList.Selected(NumRow(LvlNum)) = True
            Call LoadLevels
        Case vbKeyLeft
            If Split(Lvl, "_")(2) = "back" Then
                'Çàêðûâàåì âåòêó
                Call LoadLevels
              Else
                'Óñòàíàâëèâàåì êóðñîð íà ðîäèòåëüñêóþ âåòêó
                LvlNum = NumRow(LvlNum)
                lst_TList.Selected(LvlNum) = True
            End If
        Case vbKeyRight
            If Split(Lvl, "_")(2) = "back" Then
                If lst_TList.ListCount > LvlNum Then
                    'Ïåðåõîä íà ïîäâåòêó
                    lst_TList.Selected(LvlNum) = True
                End If
              Else
                'Îòêðûâàåì ïîäâåòêó
                Call LoadLevels
            End If
        Case vbKeyHome
            'Óñòàíàâëèâàåì êóðñîð íà ïåðâóþ âåòêó
            lst_TList.Selected(0) = True
        Case vbKeyEnd
            'Óñòàíàâëèâàåì êóðñîð íà ïîñëåäíþþ âåòêó
            lst_TList.Selected(lst_TList.ListCount - 1) = True
    End Select
End Sub

Private Function NumRow(ByVal LvlNum As Integer) As Integer
    If LvlNum > 1 Then
        Do
            If lst_TList.Column(1, NumRow) = "Level_" & LvlNum - 1 & "_back" Then
                Exit Do
            End If
            NumRow = NumRow + 1
        Loop
    End If
End Function

Private Sub lst_TList_DblClick(Cancel As Integer)
    Call LoadLevels
End Sub

Private Sub lst_TList_AfterUpdate()
    If Nz(lst_TList.Column(1, lst_TList.ListIndex), "") = "Level_3_" Then
        frm_subForm.Form.RecordSource = "SELECT * FROM tab_4 WHERE (Kod_3=" & lst_TList & ");"
        frm_subForm.Form.RecordsetType = 0
      Else
        If frm_subForm.Form.RecordsetType = 0 Then
            frm_subForm.Form.RecordSource = "SELECT * FROM tab_4 WHERE (0=1)"
            frm_subForm.Form.RecordsetType = 2
        End If
    End If
End Sub


Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  db2_mdb.zip 41,25 Kb
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0390 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.