powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Иерархические объекты
20 сообщений из 20, страница 1 из 1
Иерархические объекты
    #32496665
Sergey_New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прочитал весь форум, но применения в Access примеров не нашел :(
М.б. есть ссылки?
...
Рейтинг: 0 / 0
Иерархические объекты
    #32496671
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если бы еще знать, что ты подразумеваешь под Иерархическими объектами ...
...
Рейтинг: 0 / 0
Иерархические объекты
    #32496680
Sergey_New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К примеру, генеалогическую БД.
...
Рейтинг: 0 / 0
Иерархические объекты
    #32496706
Sergey_New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
где:
Таблица "Семьи"
Поля: idFamily; idMale; idFemale

Таблица "Дети"
Поля: idChild; idFamily

Нужно найти:
1. всех потомков для idMale или idFemale
2. всех предков для idChild
...
Рейтинг: 0 / 0
Иерархические объекты
    #32496709
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
генеалогическая - это можно
это и трех таблов
1 Людь(ИД, Имя, Фамилия)
2 Роль(ИДРоли,ИмяРоли)
3 Генеалогия(ИдРоди,ИдРодителя,ИдПотомка)

примерно так
...
Рейтинг: 0 / 0
Иерархические объекты
    #32496733
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если в проге намечается появление деревьев, то Акес не самый лучший выбор. Проще работать с деревьями на MS SQL ( по сравнению с акесом ) из-за наличия триггеров - вот там инфу и ищи.
...
Рейтинг: 0 / 0
Иерархические объекты
    #32496734
Sergey_New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Senin Viktor
Спасибо, про MS SQL уже читал. Хотелось бы в Access (VBA).
...
Рейтинг: 0 / 0
Иерархические объекты
    #32497092
Осел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда уж лучше в InterBase или в таких субд, где можно делать рекурсивные запросы.
...
Рейтинг: 0 / 0
Иерархические объекты
    #32497160
Sergey_New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Осел
В Access можно делать рекурсивные запросы :)
С помощью массивов я справился, а вот с запросом - нет!
...
Рейтинг: 0 / 0
Иерархические объекты
    #32497176
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, про MS SQL уже читал. Хотелось бы в Access (VBA).

вот-вот: берешь и переносишь то, что прочел в MS SQL, на VBA. Вместо триггеров будут "триггеры для бедных" (события форм), например.

А вообще то, что тебе нужно можно сделать и без всяких "триггеров" и прочего - простой рекурсивной функцией
...
Рейтинг: 0 / 0
Иерархические объекты
    #32497182
Sergey_New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Senin Viktor
Да не получается с запросом :(
Приходится данные из таблиц записывать в массивы и с ними работать. Голову сломал :)
...
Рейтинг: 0 / 0
Иерархические объекты
    #32497187
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а строковый путь хранить для каждой ноды в текстовом поле?

как в реестре Windows

если хочется хранить в разных таблицах и более правильно то этот текстовый путь можно генерить во временной по мере необходимости
...
Рейтинг: 0 / 0
Иерархические объекты
    #32497197
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да не получается с запросом :(
Приходится данные из таблиц записывать в массивы и с ними работать. Голову сломал :)

А я про запросы и не говорил :), хотя они там и будут, а говорил про функции на VBA, которые будут курочить твою таблицу и заполнять служебную, например
...
Рейтинг: 0 / 0
Иерархические объекты
    #32497201
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или применить метод "вложенных отрезков".

Правда обрабатывать (добавление/удаление/изменение) придется ручками (без триггеров) по событиям (в форме например (с))
...
Рейтинг: 0 / 0
Иерархические объекты
    #32497444
Sergey_New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот такая конструкция по поиску всех детей работает
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Sub Find_Family(id)
Dim i
    Debug.Print id
    For i =  0  To UBound(FAM,  2 )
        If FAM( 1 , i) = id Or FAM( 2 , i) = id Then
            Find_Child1 FAM( 0 , i)
        End If
    Next i
End Sub
Sub Find_Child1(idF)
Dim i
    For i =  0  To UBound(CHIL,  2 )
        If CHIL( 0 , i) = idF Then
            Find_Family CHIL( 1 , i)
        End If
    Next i
End Sub

А аналогичная с Recordset, из которых получены массивы - нет!
...
Рейтинг: 0 / 0
Иерархические объекты
    #32497845
Sergey_New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Sub Descendants(id)
Dim i, j
    For i =  0  To UBound(FAM,  2 )
        If FAM( 1 , i) = id Or FAM( 2 , i) = id Then
            For j =  0  To UBound(CHIL,  2 )
                If CHIL( 0 , j) = FAM( 0 , i) Then
                    Debug.Print CHIL( 1 , j)
                    Descendants CHIL( 1 , j)
                End If
            Next j
        End If
    Next i
End Sub
...
Рейтинг: 0 / 0
Иерархические объекты
    #32498016
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть два пути:
путь первый - работа через SQL. подробности тут: h**p://sdm.viptop.ru/articles/sqltrees.html
путь второй - создать таблицу, содержащую указатель на предка, потомка, на соседа перед, на соседа после и строить дерево используя метод Seek

я работал со вторым и не жаловался.

по поводу MS SQL и InterBase - не слушай их, это вражеская пропаганда.
...
Рейтинг: 0 / 0
Иерархические объекты
    #32498439
Sergey_New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 marvan
Ху из сосед перед, сосед после?
...
Рейтинг: 0 / 0
Иерархические объекты
    #32498498
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KeyInd   Cчeтчик    номер узла                 "C:\WINDOWS\system32\"
KeyPar   Чиcлoвoй   указатель на предка        "C:\WINDOWS\"
KeyChi   Чиcлoвoй   указатель на потомка       "C:\WINDOWS\system32\1025\"
KeyPrw   Чиcлoвoй   указатель на соседа перед  "C:\WINDOWS\system\"
KeyNxt   Чиcлoвoй   указатель на соседа после  "C:\WINDOWS\Tasks\"
KeySel   Лoгичecкий признак выделения узла
KeyTxt   Teкcтoвый  текст узла
Expand   Лoгичecкий признак узел открыт
...
Рейтинг: 0 / 0
Иерархические объекты
    #32498689
Sergey_New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 marvan
Понятно, спасибо.
2 All
Немогу понять, почему при нахождении потомка, не имеющего других потомков, цикл не переходит на следующую персону:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Public Sub Descendants(id)
    Dim i, j
    With rst_fam
        .MoveFirst
        For i =  0  To .RecordCount -  1 
            If .Fields( 1 ) = id Or .Fields( 2 ) = id Then
                f = .Fields( 0 )
                With rst_chil
                    .MoveFirst
                    For j =  0  To .RecordCount -  1 
                        If .Fields( 0 ) = f Then
                            Debug.Print .Fields( 1 )
                            Descendants .Fields( 1 )
                        End If
                        .MoveNext
                    Next j
                End With
            End If
            .MoveNext
        Next i
    End With
End Sub

В случае с массивами все нормально.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Иерархические объекты
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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