Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

"Случайная" переменная?


Страницы:   1 2 3 4

markers ©   (2006-10-19 10:26:00) 

Можно-ли реализовать и как %subj ? Заренее Спасибо!


Сергей М.   (2006-10-19 17:30:00) [21]


> "а если чтобы пункты нужны в определенном порядке?" сразу
> скажу - придирки


Нет, не придирки.

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

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

В общем же случае запись о родителе не обязана фигурировать в НД раньше записи о его "чаде"


Сергей М.   (2006-10-19 17:24:00) [22]


> q.sql.text:='select id, id_parent, caption from tree order  by caption'


Чтой-то вдруг именно по caption ? Зачем вообще здесь явно указанная сортировка ? Почему она не по ParentId, если уж на то пошло ?


> If q.Fields[1].IsNull Then


А если это условие ложно ? Где у тебя его обработка ?


Palladin   (2006-10-19 17:22:00) [23]

краткий глоссарий

TWRIntegerMap - коллекция: ключ - данные (разных типов), с бинарным поиском

vtQuickADOQuery - всего лишь процедура выставляющая параметры исполнения TADOQuery на максимальную производительность


p.s. предполагая подобное "а если чтобы пункты нужны в определенном порядке?" сразу скажу - придирки, бо ничего сложного нет в: докрутить к вышенаписанному добавление элементов в дерево в определенном порядке...


Palladin   (2006-10-19 17:17:00) [24]

это для не рекурсивного дерева, для рекурсивного немного сложней...


Palladin   (2006-10-19 17:15:00) [25]

момент истины


procedure TForm1.Button1Click(Sender: TObject);
Type
PItem=^TItem;
TItem=Record
 nID:Integer;
 strCaption:String;
End;

Var
theUnlinked,
theTree:TWRIntegerMap;
q:TADOQuery;

n,nID,nIDParent:Integer;
strCaption:String;

Function _CreateNode(p_theParent:TTreeNode;p_nID:Integer;Const p_strCaption:String):TTreeNode;
Var
 i,n:Integer;
Begin
 Result:=TreeView.Items.AddChild(p_theParent,p_strCaption);
 Result.Data:=Pointer(p_nID);
 If theUnlinked.Find(p_nID,n) Then
  Begin
   For i:=0 to TList(theUnlinked.ObjectData[n]).Count-1 Do
    Begin
     With PItem(TList(theUnlinked.ObjectData[n])[i])^ Do
      theTree.Add_Integer(nID,Integer(_CreateNode(Result,nID,strCaption)));
     Dispose(PItem(TList(theUnlinked.ObjectData[n])[i]));
    End;
   theUnlinked.Delete(n);
  End;
End;

Procedure _AddToUnlinked(p_nID,p_nIDParent:Integer;Const p_strCaption:String);
Var
 n:Integer;
 p:PItem;
Begin
 
 New(p);
 p.nID:=p_nID;
 p.strCaption:=p_strCaption;
 If Not theUnlinked.Find(p_nIDParent,n) Then n:=theUnlinked.Add_Object(p_nIDParent,TList.Create);
 TList(theUnlinked.ObjectData[n]).Add(p);
End;

begin
theTree:=TWRIntegerMap.Create;
theUnlinked:=TWRIntegerMap.Create;

q:=TADOQuery.Create(Nil);
q.Connection:=ADOConnection1;
vtQuickADOQuery(q);
q.sql.text:='select id, id_parent, caption from tree order by caption';
q.Open;
While not q.Eof Do
 Begin
  nID:=q.Fields[0].AsInteger;
  strCaption:=q.Fields[2].AsString;

  If q.Fields[1].IsNull Then theTree.Add_Integer(nID,Integer(_CreateNode(Nil,nID,strCaption))) Else
   Begin
    nIDParent:=q.Fields[1].AsInteger;
    If theTree.Find(nIDParent,n)
     Then theTree.Add_Integer(nID,Integer(_CreateNode(TTreeNode(theTree.IntegerData[n]),nI D,strCaption)))
     Else _AddToUnlinked(nID,nIDParent,strCaption);
   End;
  q.Next;
 End;
q.Close;
q.Free;
theTree.Free;
theUnlinked.Free;
end;


на все вопросы отвечу...


Сергей М.   (2006-10-19 14:34:00) [26]


> Palladin ©   (19.10.06 14:13) [38]


Ради истины потерплю.


Palladin   (2006-10-19 14:13:00) [27]


> Теперь представь себе, что выглядит он иначе:
>
> 2 0
> 3 0
> 0 Null
> 1 Null
>
> И ?


что И? я помоему достаточно ясно выразился сказав что мне не принципиально наличие какого либо упорядочивания в НД... и я тоже буду двигаться только в одном направлении... если не веришь, то потерпи немного: я до дома дойду и напишу тебе великую тайну реализации...


Сергей М.   (2006-10-19 13:48:00) [28]


> Palladin ©   (19.10.06 13:26) [36]
>
>
> 0 Null
> 1 Null
> 2 0
> 3 0
> 4 2
> 5 2
>


Теперь представь себе, что выглядит он иначе:

2 0
3 0
0 Null
1 Null

И ?


> мне по барабану в каком порядке мне вернулся НД


Я так и понял, что тебе по барабану)

А вот автору, к примеру, не по барабану. Он получил unidirectional-НД (содержимое см. выше) и движется по нему в порядке следования записей (а как быть иначе, если он однонаправленный ?).

Ну и о каком визуальном построении может идти речь, если первая же запись ссылается на родителя, который фигурирует лишь в 3-й записи в порядке следования записей в данномНД ?

думай)...


Palladin   (2006-10-19 13:26:00) [29]


0 Null
1 Null
2 0
3 0
4 2
5 2



> И обоснуй, что записи в этом НД должны следовать именно так и не иначе ...


зачем? мне по барабану в каком порядке мне вернулся НД...


Сергей М.   (2006-10-19 13:22:00) [30]


> Palladin ©   (19.10.06 13:16) [34]


Так.

Приведи фрагмент НД, сформированный твоим запросом ... И обоснуй, что записи в этом НД должны следовать именно так и не иначе ...


Palladin   (2006-10-19 13:16:00) [31]

хм...

select id,id_parent from tree


Сергей М.   (2006-10-19 13:12:00) [32]


> Palladin ©   (19.10.06 13:02) [32]


> например?


Например, приведи текст того самого единственного "универсального" запроса, который , по-твоему мнению, заменит ту самую кучу запросов, в неоходимости которой ты засомневался в [26].

И я тебе распишу в подробностях конкретную ситуацию, при которой твой "универсальный" запрос окажется у кота под хвостом)


Palladin   (2006-10-19 13:02:00) [33]


> Такая логика запросто даст сбой при определенных условиях.

например?


Сергей М.   (2006-10-19 12:46:00) [34]


> Elen ©   (19.10.06 12:43) [29]


О скорости речи не идет, да и особый это разговор.


Сергей М.   (2006-10-19 12:45:00) [35]


> Ketmar ©   (19.10.06 12:41) [28]


Это частный случай.
Такая логика запросто даст сбой при определенных условиях.
Но это уже тема для обсуждения в "Базы".


Elen   (2006-10-19 12:43:00) [36]


> Правильные результаты визуализации м.б. получены только
> так.

Не спорю, А скорость выполнения такого не упадет?


Ketmar   (2006-10-19 12:41:00) [37]

>[27] Сергей М.(c) 19-Oct-2006, 12:27
>Если возражаешь - приведи контраргументы)...
есть ещё куча всяких способов. с ходу: получить всё скопом один раз и потом уже разгребать.


Сергей М.   (2006-10-19 12:27:00) [38]


> Palladin ©   (19.10.06 12:23) [26]


К чему сарказм ?)

Если возражаешь - приведи контраргументы)...


Palladin   (2006-10-19 12:23:00) [39]


> Правильные результаты визуализации м.б. получены только
> так.

да ну конечно только так...


Сергей М.   (2006-10-19 12:19:00) [40]


> Elen ©   (19.10.06 11:19) [18]
> Зачем тебе постоянно делать Select?


Все верно он делает, не смущай автора.
Автор визуализирует древовидную структуру, хранящуюся в БД.
Правильные результаты визуализации м.б. получены только так.


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо