Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / tree но не view / 25 сообщений из 49, страница 1 из 2
28.05.2003, 16:40
    #32171065
саша кочанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tree но не view
ну создал я таблицу для TreeView ключ,родитель
ну разобрался я с контролом
но теперь возникает другой неконтроловский вопрос:
как находясь в середине ветки запросить "всех, кто находится дальше по ветке", например всех кто работает в каком нибудь производстве со всеми его цехами, участками и тд?
...
Рейтинг: 0 / 0
28.05.2003, 16:56
    #32171095
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tree но не view
...запросом, отбираешь всех у кого ParentID=SelectedID
или через tv.SelectedNode.Next...
...
Рейтинг: 0 / 0
28.05.2003, 17:02
    #32171102
Pavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tree но не view
Ну это тебе придется занятся теорией.
Деревья в SQL
http://www.osp.ru/win2000/sql/2001/05/967.htm]Иерархические структуры, не требующие сопровождения
Работа с TreeView
Моделирование иерархических объектов
HOW TO: Show Expanding Hierarchies by Using SQL Server
Добавлю что это далеко не все варианты организации и работы с иерархическими структурами.
...
Рейтинг: 0 / 0
28.05.2003, 17:04
    #32171103
Ден
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tree но не view
2Senin Viktor
А другие уровни же запросом таким уже не прокатят...
"...запросом, отбираешь всех у кого ParentID=SelectedID "
Выберутся только подчиеные этого текущего уровня..
Я просто к тому, что не так то все и просто с деревьями.. Самое просто просканировать таблицу.. Но при наличии большого объема данных может тормозить..
Вот один из возможных примеров реализации (я где то скачал, работает отлично, но под sql)

CREATE TABLE [DBTree] (
[idDBTree] [int] NOT NULL ,
[idNode] [int] IDENTITY (1, 1) NOT NULL ,
[idParent] [int] NULL ,
[idNext] [int] NULL ,
[idPrior] [int] NULL ,
[idFirstChild] [int] NULL ,
[Text] [varchar] (255) COLLATE SQL_Latin1_General_CP1251_CS_AS NOT NULL ,
[SendTo] [smallint] NOT NULL CONSTRAINT [DF_DBTree_SendTo] DEFAULT (2),
CONSTRAINT [PK_DBTree] PRIMARY KEY NONCLUSTERED
(
[idDBTree],
[idNode]
) ON [PRIMARY] ,
CONSTRAINT [FK_DBTree_DBTreeHead] FOREIGN KEY
(
[idDBTree]
) REFERENCES [DBTreeHead] (
[idDBTree]
)
) ON [PRIMARY]
GO

CREATE TABLE [DBTreeHead] (
[idDBTree] [int] IDENTITY (1, 1) NOT NULL ,
[Name] [varchar] (255) COLLATE SQL_Latin1_General_CP1251_CS_AS NULL ,
[Comment] [varchar] (500) COLLATE SQL_Latin1_General_CP1251_CS_AS NULL ,
[IsDogovor] [bit] NOT NULL ,
[IsCommerce] [bit] NULL CONSTRAINT [DF_DBTreeHead_IsCommerce] DEFAULT (0),
[CreatedBy] [int] NULL ,
[CreatedAt] [datetime] NULL ,
CONSTRAINT [PK_DBTreeHead] PRIMARY KEY CLUSTERED
(
[idDBTree]
) ON [PRIMARY]
) ON [PRIMARY]
GO



SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

-- Процедура возвращает список вложенных узлов в заданный родительский узел с учетом порядка их следования в дереве.
-- Если @idParent = NULL, то возвращается список узлов первого уровня в дереве.
Create PROCEDURE [upDBTreeGetChildren]
@idDBTree int,
@idParent int = NULL
AS
SET NOCOUNT ON
--временная таблица для результата
CREATE TABLE #TMP_Result (idDBTree int,idParent int,idNode int, idPrior int,idNext int, idFirstChild int,[Text] varchar(255))

DECLARE @Text VARCHAR(255), @idPrior INT, @idNode INT, @idNext INT, @idFirstChild INT, @NodeCount INT
DECLARE @ErMsg VARCHAR(1000), @Error INT
SET @Error = 0
--проверка первого узла
SET @NodeCount = -1
IF @idParent IS NULL
BEGIN
SELECT @NodeCount=COUNT(*)
FROM DBTree
WHERE idDBTree=@idDBTree
AND idParent IS NULL
AND idPrior IS NULL
SET @Error = @Error + @@ERROR
END
ELSE BEGIN
SELECT @NodeCount=COUNT(*)
FROM DBTree
WHERE idDBTree=@idDBTree
AND idParent=@idParent
AND idPrior IS NULL
SET @Error = @Error + @@ERROR
END
IF @NodeCount=-1
BEGIN
SET @ErMsg='Нет первого узла:'+CAST(@idParent AS VARCHAR)
RAISERROR (@ErMsg,16,1)
RETURN 1
END
ELSE IF @NodeCount>1
BEGIN
SET @ErMsg='Несколько первых узлов:'+CAST(@idNext AS VARCHAR)
RAISERROR (@ErMsg,16,1)
RETURN 2
END
ELSE IF @NodeCount=1 BEGIN
--Добавляем первый узел
IF @idParent IS NULL
BEGIN
SELECT @idNode=idNode, @idPrior=idPrior, @idNext=idNext, @idFirstChild=idFirstChild, @Text=[Text]
FROM DBTree
WHERE idDBTree=@idDBTree
AND idParent IS NULL
AND idPrior IS NULL
SET @Error = @Error + @@ERROR
END
ELSE BEGIN
SELECT @idNode=idNode, @idPrior=idPrior, @idNext=idNext, @idFirstChild=idFirstChild, @Text=[Text]
FROM DBTree
WHERE idDBTree=@idDBTree
AND idParent=@idParent
AND idPrior IS NULL
SET @Error = @Error + @@ERROR
END
INSERT #TMP_Result
VALUES(@idDBTree,@idParent,@idNode,@idPrior,@idNext,@idFirstChild,@Text)
SET @Error = @Error + @@ERROR
--Добавляем остальные узлы
DECLARE @idAddedNode INT
SET @idAddedNode = @idNode
WHILE @idNext IS NOT NULL BEGIN
--проверка следующего узла
IF @idParent IS NULL
BEGIN
SELECT @NodeCount = COUNT(*)
FROM DBTree
WHERE idDBTree=@idDBTree
AND idParent IS NULL
AND idNode=@idNext
SET @Error = @Error + @@ERROR
END
ELSE BEGIN
SELECT @NodeCount = COUNT(*)
FROM DBTree
WHERE idDBTree=@idDBTree
AND idParent=@idParent
AND idNode=@idNext
SET @Error = @Error + @@ERROR
END
IF @NodeCount=0
BEGIN
SELECT * FROM #TMP_Result
SET @ErMsg='Нет следующего узла:'+CAST(@idNext AS VARCHAR)
RAISERROR (@ErMsg,16,1)
RETURN 3
END
ELSE IF @NodeCount>1
BEGIN
SELECT * FROM #TMP_Result
SET @ErMsg='Несколько следующих узлов:'+CAST(@idNext AS VARCHAR)
RAISERROR (@ErMsg,16,1)
RETURN 4
END
ELSE IF @NodeCount=1 BEGIN
--добавление следующего узла
IF @idParent IS NULL
BEGIN
SELECT @idNode=idNode, @idPrior=idPrior, @idNext=idNext, @idFirstChild=idFirstChild, @Text=[Text]
FROM DBTree
WHERE idDBTree=@idDBTree
AND idParent IS NULL
AND idNode=@idNext
SET @Error = @Error + @@ERROR
END
ELSE BEGIN
SELECT @idNode=idNode, @idPrior=idPrior, @idNext=idNext, @idFirstChild=idFirstChild, @Text=[Text]
FROM DBTree
WHERE idDBTree=@idDBTree
AND idParent=@idParent
AND idNode=@idNext
SET @Error = @Error + @@ERROR
END
INSERT #TMP_Result
VALUES(@idDBTree,@idParent,@idNode,@idPrior,@idNext,@idFirstChild,@Text)
SET @Error = @Error + @@ERROR
IF @idAddedNode=@idNode
BEGIN
SELECT * FROM #TMP_Result
SET @ErMsg='Зацикливание '+CAST(@idNode AS VARCHAR)
RAISERROR (@ErMsg,16,1)
RETURN 5
END
ELSE SET @idAddedNode=@idNode
END
END
END
SET NOCOUNT OFF
--вывод данных
IF @Error = 0
SELECT * FROM #TMP_Result
ELSE BEGIN
SET @ErMsg = @ErMsg + 'Error = ' + CAST(@Error AS VARCHAR)
RAISERROR(@ErMsg,16,1)
END
--удаление временной таблицы
DROP TABLE #TMP_Result


GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
...
Рейтинг: 0 / 0
28.05.2003, 17:08
    #32171110
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tree но не view
Эка как размахнул \r
Посмотри также /topic/9402 Вроде то что нужно.\r
А так же поробуй через поиск по форуму MS SQL.
...
Рейтинг: 0 / 0
28.05.2003, 17:10
    #32171113
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tree но не view
И все-таки мне интересно, как так люди программируют?
Сначала сделал контрол, потом таблицу, потом стал чесать репу "А что же я со всей этой х%ней буду делать и как жить дальше?"
Может это... Порядок действий поменять? Сначала думать, а потом делать?
Атака клоунов блин...
...
Рейтинг: 0 / 0
28.05.2003, 17:33
    #32171150
Витал
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tree но не view
Лохам Позорным и Непозорным посвящается!!
"Главное - ввязаться в бой!!!". А "слона есть по кусочкам". Применил для отображения данных - хорошо. Понял, узнал, спросил, подсказали, сам споткнулся, озарило... что еще можно с этим делать. Открытие, радость, фанфары. А там еще что-то прорезается, а там еще что-то хочется, мечтается. Или не моги трогать пока не обсосал до последней корочки?
...
Рейтинг: 0 / 0
28.05.2003, 17:59
    #32171202
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tree но не view
Если слона есть по кусочкам - можно круто обосраться
Неужели все думают, что удав что от головы до хвоста = 38 попугаев, что от хвоста до головы = 38 попугаев? Это еще в мультиках опровергли. Обычно получается что если мысль идет от головы к пальцам - задача быстрее реализуется, чем если от пальцев (хорошо если от них, а не от седалища) к голове.
Обсасывать все не надо. Задачу с правильного конца надо решать.
Дико. Увидел контрол - о бля, круто! Давайте его заюзаем. Данных нет? Данные нарисуем! Програмно работать с этим не умеем? Фигня, пару раз обосремся (съев слона), потом научимся! Механизмы доступа к данным под такое не заточены, аксес не умеет видите ли в запрос дерево вывести? Мы напишем километр кода! И полгода его отлаживать будем. Потому что ввязались в бой.
Зачем весь этот гимор? Все от того что разработчик увидел контрол и сказал - о бля, круто?
...
Рейтинг: 0 / 0
29.05.2003, 08:36
    #32171384
саша кочанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tree но не view
Re:Лох Позорный
язык, в широком смысле слова, определяет мышление
учиться (думать) можно только познавая реалии языка
не обижайся...
...
Рейтинг: 0 / 0
29.05.2003, 09:11
    #32171409
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tree но не view
Ты мне рекомендуешь познать реалии языка? Адресом не ошибся?
З.Ы. "...Вот потому что вы говорите не то что думаете и думаете не то что думаете - поэтому вы в клетках и сидите."
...
Рейтинг: 0 / 0
29.05.2003, 09:26
    #32171415
Zenia
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tree но не view
To Lox

По моему иногда надо опускаться на землю :))
...
Рейтинг: 0 / 0
29.05.2003, 09:40
    #32171422
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tree но не view
Ниче не понимаю. Сначала мне говорят что я не знаком с реалиями языка, потом - что я витаю в облаках и полон юношеских грез... Ребят, вам это... сказки для детей надо читать, а не форумы. Там неопределенный артикль бля не встречается. В отличие от реалий языка.
Или я с утра торможу капитально?
...
Рейтинг: 0 / 0
29.05.2003, 09:59
    #32171451
Zenia
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tree но не view
ты просто людей за говно не принимай...
...
Рейтинг: 0 / 0
29.05.2003, 10:05
    #32171461
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tree но не view
Не надо искать в моих словах то, чего там нет. Если бы я кого-то считаю говном - я так и говорю (если бы вообще с этим человеком общаюсь).
Кстати вопрос. С какой это стати я не должен людей за говно принимать? Многие вполне заслуживают.
...
Рейтинг: 0 / 0
29.05.2003, 10:26
    #32171491
Витал
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tree но не view
Ой ты гой еси Лох свет Позорный!!! Пошто окрысился на свет белый? Пошто икру мечешь почище кабачков? Не хочешь кушать слона по кусочкам - никто не неволит - глотай целиком! Приятного тебе аппетита и большого удовольствия от сей незатейливой трапезы. А мы, уж извините, так не могём - в пасть не пролазит.
Думать и правда полезно сначала головой, потом пальцами (или еще чем). Только кто-ж тебе, родимый, сказал, что кидается народ здешний на каждый красивый контрол, аки на бомбу с бантиком? Если приперла нужда обратить свой взор на TreeView, так не от того, что красивый изрядно, а от того что иными средствами отобразить, то что он могёт, так и не смог придумать. А то, что не всё про него знаем... дык ведь учимся, батюшко, в т.ч. и на твою милостивую помощь уповаем, не сочти за нахлебников, индо и без тебя при нужде разберемся, коли гордый и нас сирых презираешь. Времени, конечно, уйдет больше и трудов. А и ты все ли досконально про Excel-Access-Word знаешь? Все ли тонкости-нюансы постиг? Начал ли ты работать с ними, зная неизмеримо меньше, чем знаешь теперь? Или изучил сначала все-все-все?
Не обессудь, мил человек! И на нас не забижайся. Нижайше о сем просим.
...
Рейтинг: 0 / 0
29.05.2003, 10:40
    #32171516
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tree но не view
Позвольте влезть в чужую драку (хотя и понятно, что мне тут же по морде-то и надают).

Слона, безусловно, надо есть по кусочкам. Однако последовательность поедания должна быть спланирована заранее. Иначе некоторые кусочки придется выблевывать и поедать по новой в новом порядке, причем по несколько раз.
...
Рейтинг: 0 / 0
29.05.2003, 10:42
    #32171518
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tree но не view
2 Витал
:))
Каков падлец
Слушайте, вот майкрософт в аксес смогла сделать кучу стандартных виндузовых контролов. А тривью не смогла. Ни в 97-м, ни в 2000-м, ни в 2002-м аксеса. Реляционные базы и иерархические базы - они плохо дружат. Это не я придумал. Вы хотите майкрософт переплюнуть и скрестить две разные идеологии - ну флаг в руки, если уж задача такая стоит.
У меня есть уверенность, что 90% задач (цифра от балды), для которых народ использует тривью - спокойно можно решить без тривью, стандартными аксесовкими контролами, стандартными средствами базы данных, стандартными реляционными механизмами. При этом будут отклонения от "идеального" решения задачи ("с использованием тривью"), но по соотношению трудозатраты/довольство пользователей выйдет гораздо лучше.
Еще раз пытаюсь свою мысль повторить. Надо делать тривью - значит надо делать. Только делать надо в такой последовательности
1) Прочитать литературу по иерархическим структрурам
2) Подумать (если есть чем)
3) Нарисовать таблицы, километр кода, контролы.
А в жизни почему-то наоборот - от пунтка 3) к пункту 1), зачастую пропуская 2).
ну создал я таблицу для TreeView ключ,родитель
ну разобрался я с контролом
но теперь возникает другой неконтроловский вопрос:
...
Рейтинг: 0 / 0
29.05.2003, 10:50
    #32171530
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tree но не view
2 Владимир Саныч
Вай маладэц
Краткость - сестра таланта
...
Рейтинг: 0 / 0
29.05.2003, 10:53
    #32171536
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tree но не view
2 Лох:

Я знал, что ты оценишь. :^)
...
Рейтинг: 0 / 0
29.05.2003, 11:34
    #32171611
Витал
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tree но не view
Как говорил профессор у нас в универе: "Давайте уточним понятия!", - и тратил на это полчаса лекции. Он был прав, как мы выяснили потом. Сначала-то думали: "Блажит старичок! Чего их уточнять и так все ясно!". Ан нет. Ни фига не ясно!! Спорили по несколько часов до хрипоты, ругались, чтобы потом понять - говорим о разных вещах, называя их одинаково.
Так и здесь. Кем надо быть, чтобы не согласиться с тем, что "...Однако последовательность поедания должна быть спланирована заранее" (10-40)" и "...делать надо в такой последовательности..." (10-42). Такие, думаю, просто не знают как сюда попасть. Вовсяком случае, надеюсь. Не буду говорить о других. Скажу, как сам "дошел до жизни такой".
Потребовалось в Accesse вести учет неких операций, которые представляют из себя n-мерную иерархическую структуру. Начал со сбора информации. Что придумали на сей счет умные люди. Как хранить, как редактировать, как менять подчиненность, как отображать и т.д. Главная задача у меня была - как отображать, чтобы пользователь понимал, что у него на экране и, чтобы ему было удобно просматривать информацию. Сделал ему дерево - хорошо. Ему УЖЕ достаточно. Но, "аппетит приходит во время еды". В том числе и мне хочется от этого дерева большего. Но это вопрос времени, постепенно осваивая его, я надеюсь совершенствовать рабочее место юзера и дальше.
...
Рейтинг: 0 / 0
29.05.2003, 11:41
    #32171628
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tree но не view
> Сделал ему дерево - хорошо. Ему УЖЕ достаточно.

Такой подход хорош, когда делаешь маленькую систему для себя. Большая система, создававшаяся в течение нескольких лет по принципу "а давайте-ка добавим еще вот это", - врагу не пожелаю такую систему поддерживать.
...
Рейтинг: 0 / 0
29.05.2003, 11:45
    #32171631
Витал
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tree но не view
"Лучше маленькая рыбка, чем большой таракан".
А что в большой системе все на века определено и ничего не меняется? Не появляются новые задачи, которые надо оперативно решать? Не требуется что-то добавить, убавить, изменить...? Не применяются новые средства и подходы?
...
Рейтинг: 0 / 0
29.05.2003, 11:47
    #32171638
Ден
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tree но не view
2 Владимир Саныч
>Такой подход хорош, когда делаешь маленькую систему для себя. Большая система, создававшаяся в течение нескольких лет по принципу "а давайте-ка добавим еще вот это", - врагу не пожелаю такую систему поддерживать.

А как правило так и происходит..Делаешь по тех заданию, а потм, мы хотим то мы хотим сё.. Конечно стараешься отфутболить с такими просьбами но не всегда это выходит и в итоге годика так за 3 из нормальной системы выходит монстр какой то -))
...
Рейтинг: 0 / 0
29.05.2003, 11:55
    #32171658
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tree но не view
Как человек, поддерживающий систему, в которую 5 лет кто-то по-кусочкам что-то добавлял, параллельно изучая аксес/vb - полностью согласен с Владимиром Санычем. В конце концов пришлось переписать 70% функциональности. До остальных 30% руки еще не дошли
Теперь ни строчки кода не пишу не представив себе как я и пользователи в будущем это смогут использовать, как не смогут, и как смогут но не дай бог. И ни строчки без ТЗ. Глупость, написанная на бумаге, становится явной.
С одной стороны такой подход замедляет разработку новых фичей (а пользователи не видят причин этого и недовольны), с другой стороны - тому, кто придет после меня, не придется в очередной раз 70% кода переписывать. Хорошо начальник это все понимает даже лучше меня, иначе пришлось бы на горло собственной песне наступать.
...
Рейтинг: 0 / 0
29.05.2003, 11:57
    #32171664
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tree но не view
2 Витал:

Да, конечно, что-то неизбежно. Делать нечего, когда:

появляются новые задачи, которые надо оперативно решать,

требуется что-то добавить, убавить, изменить,

применяются новые средства и подходы.

Но этому надо стараться противостоять. Непростительно, если работают по принципу "а давайте-ка", когда:


было жалко времени на проектирование.

Даже если система уже существует и обрастает измененями, - иногда есть смысл остановиться и какую-то часть переписать заново, имея перед глазами общую картину желаний юзера.

2 Ден:

...А, впрочем, тот же ответ. :^)
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / tree но не view / 25 сообщений из 49, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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