Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Создание отчета  [new]
m1rag3
Member

Откуда:
Сообщений: 53
Тут такая задача...
Имеется таблица Спецификация, в ней есть поле Код_позиции и Родитель.
Суть такая. Изначально имеем определенное значение Код_позиции и выбираем все записи из данной таблицы с этим кодом. Затем необходимо в этой же таблице найти все записи, где поле Родитель содержит значение данного Кода_позиции. Для полученных записей cделать то же самое и так пока поиск не даст нулевого результата. Уровень вложенности произвольный. В отчете все это должно представляться в виде древовидной структуры.
Товарисчи, памагите кто могет, pls!
31 май 04, 11:47    [710669]     Ответить | Цитировать Сообщить модератору
 Re: Создание отчета  [new]
paparome
Member

Откуда: Москва
Сообщений: 4312
А вы не братья?
дерево в отчет...

Для начала надо структуру данных менять (ИМХО)
31 май 04, 11:50    [710675]     Ответить | Цитировать Сообщить модератору
 Re: Создание отчета  [new]
m1rag3
Member

Откуда:
Сообщений: 53
Всегда поражался проницательности русских людей... 8-) Мы не братья, просто работаем вместе, я просто решил поконкретней вопрос задать... :-)))))
А что ты имеешь в виду под изменением структуры данных? Была конечно мысль создать временную таблицу и уже по ней строить отчет, но хотелось бы узнать мнение компетентных людей, может есть простой способ.
31 май 04, 11:55    [710685]     Ответить | Цитировать Сообщить модератору
 Re: Создание отчета  [new]
paparome
Member

Откуда: Москва
Сообщений: 4312
Имеется ввиду (это чисто пример, есть и другие способы):

1. Добавляем поле в котором храним полную иерархию
str_ie

Для корня оно = ""
Для потомнок первого уровня "1" ("2", "3")
Для потомков второго уровня (например для "2") = "21" ("22", "23")

Примерно:
id parent str_ie
1 Null ""
2 1 "1"
3 1 "2"
4 2 "11"
5 1 "3"
6 2 "12"
7 6 "121"

Идея ясна?

Запрос вывода поддерева для некоторой вершины с id = (например 2)

Select t1.*
From tbl t1 Inner Join tbl t2
On (t2.id = 2) And (t1.str_ie Like t2.ie & "*")

Порядок вложенности можно определять по длине поля str_ie :)
31 май 04, 12:05    [710721]     Ответить | Цитировать Сообщить модератору
 Re: Создание отчета  [new]
m1rag3
Member

Откуда:
Сообщений: 53
Это конечно хорошо, пока ID один разряд занимает, а когда больше и числа получатся разной длины? Или резервировать в str_ie разряды, заполняя незначащие нулями? Да, кстати, а то что выборка строится по текстовому полю не скажется на скорости при большом размере БД?
31 май 04, 12:16    [710748]     Ответить | Цитировать Сообщить модератору
 Re: Создание отчета  [new]
paparome
Member

Откуда: Москва
Сообщений: 4312
Зарделяй точками!

Т.е.
Примерно:
id parent str_ie
1 Null "."
2 1 ".1."
3 1 ".2."
4 2 ".1.1."
5 1 ".3."
6 2 ".1.2."
7 6 ".1.2.1."

?

автор
Да, кстати, а то что выборка строится по текстовому полю не скажется на скорости при большом размере БД?

ИМХО:
1. используется первый значащий символ (возможно использование индексов)
2. быстрее будет, чем по рекордсету в цикле шарахаться :) - ну в крайнм случай - это всего один проход, а не по количеству вложенностей (которые не известны :( )
31 май 04, 12:23    [710769]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить