|
|
|
tree но не view
|
|||
|---|---|---|---|
|
#18+
ну создал я таблицу для TreeView ключ,родитель ну разобрался я с контролом но теперь возникает другой неконтроловский вопрос: как находясь в середине ветки запросить "всех, кто находится дальше по ветке", например всех кто работает в каком нибудь производстве со всеми его цехами, участками и тд? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2003, 16:40 |
|
||
|
tree но не view
|
|||
|---|---|---|---|
|
#18+
...запросом, отбираешь всех у кого ParentID=SelectedID или через tv.SelectedNode.Next... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2003, 16:56 |
|
||
|
tree но не view
|
|||
|---|---|---|---|
|
#18+
Ну это тебе придется занятся теорией. Деревья в SQL http://www.osp.ru/win2000/sql/2001/05/967.htm]Иерархические структуры, не требующие сопровождения Работа с TreeView Моделирование иерархических объектов HOW TO: Show Expanding Hierarchies by Using SQL Server Добавлю что это далеко не все варианты организации и работы с иерархическими структурами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2003, 17:02 |
|
||
|
tree но не view
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2003, 17:04 |
|
||
|
tree но не view
|
|||
|---|---|---|---|
|
#18+
Эка как размахнул \r Посмотри также /topic/9402 Вроде то что нужно.\r А так же поробуй через поиск по форуму MS SQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2003, 17:08 |
|
||
|
tree но не view
|
|||
|---|---|---|---|
|
#18+
И все-таки мне интересно, как так люди программируют? Сначала сделал контрол, потом таблицу, потом стал чесать репу "А что же я со всей этой х%ней буду делать и как жить дальше?" Может это... Порядок действий поменять? Сначала думать, а потом делать? Атака клоунов блин... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2003, 17:10 |
|
||
|
tree но не view
|
|||
|---|---|---|---|
|
#18+
Лохам Позорным и Непозорным посвящается!! "Главное - ввязаться в бой!!!". А "слона есть по кусочкам". Применил для отображения данных - хорошо. Понял, узнал, спросил, подсказали, сам споткнулся, озарило... что еще можно с этим делать. Открытие, радость, фанфары. А там еще что-то прорезается, а там еще что-то хочется, мечтается. Или не моги трогать пока не обсосал до последней корочки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2003, 17:33 |
|
||
|
tree но не view
|
|||
|---|---|---|---|
|
#18+
Если слона есть по кусочкам - можно круто обосраться Неужели все думают, что удав что от головы до хвоста = 38 попугаев, что от хвоста до головы = 38 попугаев? Это еще в мультиках опровергли. Обычно получается что если мысль идет от головы к пальцам - задача быстрее реализуется, чем если от пальцев (хорошо если от них, а не от седалища) к голове. Обсасывать все не надо. Задачу с правильного конца надо решать. Дико. Увидел контрол - о бля, круто! Давайте его заюзаем. Данных нет? Данные нарисуем! Програмно работать с этим не умеем? Фигня, пару раз обосремся (съев слона), потом научимся! Механизмы доступа к данным под такое не заточены, аксес не умеет видите ли в запрос дерево вывести? Мы напишем километр кода! И полгода его отлаживать будем. Потому что ввязались в бой. Зачем весь этот гимор? Все от того что разработчик увидел контрол и сказал - о бля, круто? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2003, 17:59 |
|
||
|
tree но не view
|
|||
|---|---|---|---|
|
#18+
Re:Лох Позорный язык, в широком смысле слова, определяет мышление учиться (думать) можно только познавая реалии языка не обижайся... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2003, 08:36 |
|
||
|
tree но не view
|
|||
|---|---|---|---|
|
#18+
Ты мне рекомендуешь познать реалии языка? Адресом не ошибся? З.Ы. "...Вот потому что вы говорите не то что думаете и думаете не то что думаете - поэтому вы в клетках и сидите." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2003, 09:11 |
|
||
|
tree но не view
|
|||
|---|---|---|---|
|
#18+
To Lox По моему иногда надо опускаться на землю :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2003, 09:26 |
|
||
|
tree но не view
|
|||
|---|---|---|---|
|
#18+
Ниче не понимаю. Сначала мне говорят что я не знаком с реалиями языка, потом - что я витаю в облаках и полон юношеских грез... Ребят, вам это... сказки для детей надо читать, а не форумы. Там неопределенный артикль бля не встречается. В отличие от реалий языка. Или я с утра торможу капитально? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2003, 09:40 |
|
||
|
tree но не view
|
|||
|---|---|---|---|
|
#18+
ты просто людей за говно не принимай... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2003, 09:59 |
|
||
|
tree но не view
|
|||
|---|---|---|---|
|
#18+
Не надо искать в моих словах то, чего там нет. Если бы я кого-то считаю говном - я так и говорю (если бы вообще с этим человеком общаюсь). Кстати вопрос. С какой это стати я не должен людей за говно принимать? Многие вполне заслуживают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2003, 10:05 |
|
||
|
tree но не view
|
|||
|---|---|---|---|
|
#18+
Ой ты гой еси Лох свет Позорный!!! Пошто окрысился на свет белый? Пошто икру мечешь почище кабачков? Не хочешь кушать слона по кусочкам - никто не неволит - глотай целиком! Приятного тебе аппетита и большого удовольствия от сей незатейливой трапезы. А мы, уж извините, так не могём - в пасть не пролазит. Думать и правда полезно сначала головой, потом пальцами (или еще чем). Только кто-ж тебе, родимый, сказал, что кидается народ здешний на каждый красивый контрол, аки на бомбу с бантиком? Если приперла нужда обратить свой взор на TreeView, так не от того, что красивый изрядно, а от того что иными средствами отобразить, то что он могёт, так и не смог придумать. А то, что не всё про него знаем... дык ведь учимся, батюшко, в т.ч. и на твою милостивую помощь уповаем, не сочти за нахлебников, индо и без тебя при нужде разберемся, коли гордый и нас сирых презираешь. Времени, конечно, уйдет больше и трудов. А и ты все ли досконально про Excel-Access-Word знаешь? Все ли тонкости-нюансы постиг? Начал ли ты работать с ними, зная неизмеримо меньше, чем знаешь теперь? Или изучил сначала все-все-все? Не обессудь, мил человек! И на нас не забижайся. Нижайше о сем просим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2003, 10:26 |
|
||
|
tree но не view
|
|||
|---|---|---|---|
|
#18+
Позвольте влезть в чужую драку (хотя и понятно, что мне тут же по морде-то и надают). Слона, безусловно, надо есть по кусочкам. Однако последовательность поедания должна быть спланирована заранее. Иначе некоторые кусочки придется выблевывать и поедать по новой в новом порядке, причем по несколько раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2003, 10:40 |
|
||
|
tree но не view
|
|||
|---|---|---|---|
|
#18+
2 Витал :)) Каков падлец Слушайте, вот майкрософт в аксес смогла сделать кучу стандартных виндузовых контролов. А тривью не смогла. Ни в 97-м, ни в 2000-м, ни в 2002-м аксеса. Реляционные базы и иерархические базы - они плохо дружат. Это не я придумал. Вы хотите майкрософт переплюнуть и скрестить две разные идеологии - ну флаг в руки, если уж задача такая стоит. У меня есть уверенность, что 90% задач (цифра от балды), для которых народ использует тривью - спокойно можно решить без тривью, стандартными аксесовкими контролами, стандартными средствами базы данных, стандартными реляционными механизмами. При этом будут отклонения от "идеального" решения задачи ("с использованием тривью"), но по соотношению трудозатраты/довольство пользователей выйдет гораздо лучше. Еще раз пытаюсь свою мысль повторить. Надо делать тривью - значит надо делать. Только делать надо в такой последовательности 1) Прочитать литературу по иерархическим структрурам 2) Подумать (если есть чем) 3) Нарисовать таблицы, километр кода, контролы. А в жизни почему-то наоборот - от пунтка 3) к пункту 1), зачастую пропуская 2). ну создал я таблицу для TreeView ключ,родитель ну разобрался я с контролом но теперь возникает другой неконтроловский вопрос: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2003, 10:42 |
|
||
|
tree но не view
|
|||
|---|---|---|---|
|
#18+
2 Владимир Саныч Вай маладэц Краткость - сестра таланта ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2003, 10:50 |
|
||
|
tree но не view
|
|||
|---|---|---|---|
|
#18+
2 Лох: Я знал, что ты оценишь. :^) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2003, 10:53 |
|
||
|
tree но не view
|
|||
|---|---|---|---|
|
#18+
Как говорил профессор у нас в универе: "Давайте уточним понятия!", - и тратил на это полчаса лекции. Он был прав, как мы выяснили потом. Сначала-то думали: "Блажит старичок! Чего их уточнять и так все ясно!". Ан нет. Ни фига не ясно!! Спорили по несколько часов до хрипоты, ругались, чтобы потом понять - говорим о разных вещах, называя их одинаково. Так и здесь. Кем надо быть, чтобы не согласиться с тем, что "...Однако последовательность поедания должна быть спланирована заранее" (10-40)" и "...делать надо в такой последовательности..." (10-42). Такие, думаю, просто не знают как сюда попасть. Вовсяком случае, надеюсь. Не буду говорить о других. Скажу, как сам "дошел до жизни такой". Потребовалось в Accesse вести учет неких операций, которые представляют из себя n-мерную иерархическую структуру. Начал со сбора информации. Что придумали на сей счет умные люди. Как хранить, как редактировать, как менять подчиненность, как отображать и т.д. Главная задача у меня была - как отображать, чтобы пользователь понимал, что у него на экране и, чтобы ему было удобно просматривать информацию. Сделал ему дерево - хорошо. Ему УЖЕ достаточно. Но, "аппетит приходит во время еды". В том числе и мне хочется от этого дерева большего. Но это вопрос времени, постепенно осваивая его, я надеюсь совершенствовать рабочее место юзера и дальше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2003, 11:34 |
|
||
|
tree но не view
|
|||
|---|---|---|---|
|
#18+
> Сделал ему дерево - хорошо. Ему УЖЕ достаточно. Такой подход хорош, когда делаешь маленькую систему для себя. Большая система, создававшаяся в течение нескольких лет по принципу "а давайте-ка добавим еще вот это", - врагу не пожелаю такую систему поддерживать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2003, 11:41 |
|
||
|
tree но не view
|
|||
|---|---|---|---|
|
#18+
"Лучше маленькая рыбка, чем большой таракан". А что в большой системе все на века определено и ничего не меняется? Не появляются новые задачи, которые надо оперативно решать? Не требуется что-то добавить, убавить, изменить...? Не применяются новые средства и подходы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2003, 11:45 |
|
||
|
tree но не view
|
|||
|---|---|---|---|
|
#18+
2 Владимир Саныч >Такой подход хорош, когда делаешь маленькую систему для себя. Большая система, создававшаяся в течение нескольких лет по принципу "а давайте-ка добавим еще вот это", - врагу не пожелаю такую систему поддерживать. А как правило так и происходит..Делаешь по тех заданию, а потм, мы хотим то мы хотим сё.. Конечно стараешься отфутболить с такими просьбами но не всегда это выходит и в итоге годика так за 3 из нормальной системы выходит монстр какой то -)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2003, 11:47 |
|
||
|
tree но не view
|
|||
|---|---|---|---|
|
#18+
Как человек, поддерживающий систему, в которую 5 лет кто-то по-кусочкам что-то добавлял, параллельно изучая аксес/vb - полностью согласен с Владимиром Санычем. В конце концов пришлось переписать 70% функциональности. До остальных 30% руки еще не дошли Теперь ни строчки кода не пишу не представив себе как я и пользователи в будущем это смогут использовать, как не смогут, и как смогут но не дай бог. И ни строчки без ТЗ. Глупость, написанная на бумаге, становится явной. С одной стороны такой подход замедляет разработку новых фичей (а пользователи не видят причин этого и недовольны), с другой стороны - тому, кто придет после меня, не придется в очередной раз 70% кода переписывать. Хорошо начальник это все понимает даже лучше меня, иначе пришлось бы на горло собственной песне наступать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2003, 11:55 |
|
||
|
tree но не view
|
|||
|---|---|---|---|
|
#18+
2 Витал: Да, конечно, что-то неизбежно. Делать нечего, когда: появляются новые задачи, которые надо оперативно решать, требуется что-то добавить, убавить, изменить, применяются новые средства и подходы. Но этому надо стараться противостоять. Непростительно, если работают по принципу "а давайте-ка", когда: было жалко времени на проектирование. Даже если система уже существует и обрастает измененями, - иногда есть смысл остановиться и какую-то часть переписать заново, имея перед глазами общую картину желаний юзера. 2 Ден: ...А, впрочем, тот же ответ. :^) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2003, 11:57 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32171536&tid=1681336]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 373ms |

| 0 / 0 |
