Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.29;
Скачать: CL | DM;

Вниз

Удаление в дереве   Найти похожие ветки 

 
dim-   (2002-04-08 10:41) [0]

Народ помогите!
надо удалить ветвь в дереве, сделал следующее:
(может кто чего посоветует?)
procedure TForm1.delete_node(ii:integer);
var q1,q2:TADOQuery;
begin
q1:=TADOQuery.Create(application);
q1.Connection:=dbf.base;
q2:=TADOQuery.Create(application);
q2.Connection:=dbf.base;
q1.SQL.Clear;
q1.SQL.Add("select * from podrazd");
q1.SQL.Add("where id="+inttostr(ii));
q1.Open;
while not q1.Eof do begin
q2.Close;
q2.SQL.Clear;
q2.SQL.Add("Select * from podrazd");
q2.SQL.Add("where bos="+q1.FieldByName("id").AsString);
q2.Open;
while not q2.Eof do begin
delete_node(q2.FieldByName("id").AsInteger);
q2.Delete;
end;
q1.Delete;
end;
end;


 
MCFire   (2002-04-08 11:21) [1]

У тебя не правильно рекурсия написана...Попробуй без неё


 
dim-   (2002-04-08 11:24) [2]

В смысле "без неё"
в том то и дело, что не известно как глубоко будет вложение


 
dim-   (2002-04-08 14:45) [3]

НАРОД!!!!
Неужели ни кто с деревьями не работал?


 
Lusha   (2002-04-08 14:59) [4]

Ну, написал, молодец. А что надо то, похвалить? Лично я не понял... :(


 
SergSuper   (2002-04-08 15:10) [5]

Такие веши на клиенте не делаются
Это надо делать на стороне сервера процедурой или триггером, естественно без всяких рекурсий


 
dim-   (2002-04-08 15:26) [6]

to Lusha ©
хвалить не надо, не работает, а помочь можно, на путь истинный направить
То SergSuper
можно по подробней


 
Delirium   (2002-04-08 15:36) [7]

В MSSQL2000 есть такая штука - каскадное удаление, как-раз для деревьев очень удобно.


 
Polevi   (2002-04-08 15:43) [8]

Допустим таблица Structure имеет поля ID, Owner,Name
Тогда для MS SQL SP будет выглядеть примерно так:

CREATE PROCEDURE DeleteNode @NodeID INT AS
DECLARE @level INT
DECLARE @t TABLE(ID INT, level INT)
INSERT INTO @t SELECT ID,0 FROM Structure WHERE ID=@NodeID

SET @Level=0
while exists(SELECT * FROM @t t, Structure s WHERE t.level=@level and s.owner=t.id)
begin
INSERT @t SELECT s.id, @level+1 from @t t, Structure s WHERE t.level=@level and s.owner=t.id
SET @level=@level+1
end

DELETE FROM Structure WHERE ID IN (SELECT ID FROM @t)


 
Lusha   (2002-04-08 15:50) [9]

>Polevi
И пример триггера до кучи... :)


 
Polevi   (2002-04-08 16:44) [10]

CREATE TRIGGER Structure_D ON [dbo].[Structure]
FOR DELETE
AS
DECLARE @level INT
DECLARE @t TABLE(ID INT, level INT)

INSERT INTO @t SELECT ID,0 FROM Structure WHERE ID IN (SELECT ID FROM Deleted)

SET @Level=0
while exists(SELECT * FROM @t t, Structure s WHERE t.level=@level and s.owner=t.id)
begin
INSERT @t SELECT s.id, @level+1 from @t t, Structure s WHERE t.level=@level and s.owner=t.id
SET @level=@level+1
end

DELETE FROM Structure WHERE ID IN (SELECT ID FROM @t WHERE Level>0)




 
Polevi   (2002-04-08 16:54) [11]

PS
Я тут подумал и решил что так лучше не делать :-))
Но лучше так не делать


 
SergSuper   (2002-04-08 17:11) [12]

to dim-
можно еще по другому данные организовать
http://sdm.viptop.ru/articles/sqltrees.html

есть и другие варианты
вообще с деревьями работать довольно муторно

упоминавшеся здесь каскадное удаление никак не поможет



Страницы: 1 вся ветка

Текущий архив: 2002.04.29;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.006 c
1-94367
Bodia
2002-04-15 12:18
2002.04.29
Какой компонент самый лутший для роботы с FTP?


3-94307
только начал изучать дельфи
2002-03-23 16:27
2002.04.29
Добавление записи


1-94465
Reticent
2002-04-16 12:13
2002.04.29
Подскажите


1-94395
ymin
2002-04-17 17:27
2002.04.29
Combobox


7-94598
_Alex_
2002-01-27 21:50
2002.04.29
как прочесть данные из ярлыка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский