Индексы в деревянных структурах
Добавлено: 17 авг 2005, 14:58
При работе с древовидной структурой основанной на таблице в памяти замечена очень нехорошая деталь: быстрый поиск работет только внутри уровня на котором находишься. Станешь на корень - ищет только по верхнему уровню, стоит войти внутрь узла - ищет только внутри узла. Также не получается поюзать стандартные функции типа JumpToRecord(Ex) и т.п. Они вроде бы работают, но приводят к диким и непредсказуемым результатам типа немерянного размножения узлов. Подозреваю, что дело может быть в описании структуры таблицы. Вот она:
Table Struct ttK1 (
FC_KOD : Comp, //Код записи
FC_GKOD : Comp, //Код группы
FC_NAME : String[50] //Всё остальное
)
with index (
IDX1=FC_KOD,
IDX2=FC_GKOD,
IDX3=FC_NAME
);
create view W1 as
select *
from ttK1
where
((CurGroup==ttK1.FC_GKOD));
Работа дерева описана так:
cmTreeTop: CurGroup:=0;
cmTreeUp: CurGroup:=ttK1.FC_GKOD;
cmTreeDown: CurGroup:=ttK1.FC_KOD;
cmTreeNodeType:
{
if ttK1.FC_GKOD <> 0
TreeSetNodeType(trKARDS,2);
}
В чём может быть дело?
Table Struct ttK1 (
FC_KOD : Comp, //Код записи
FC_GKOD : Comp, //Код группы
FC_NAME : String[50] //Всё остальное
)
with index (
IDX1=FC_KOD,
IDX2=FC_GKOD,
IDX3=FC_NAME
);
create view W1 as
select *
from ttK1
where
((CurGroup==ttK1.FC_GKOD));
Работа дерева описана так:
cmTreeTop: CurGroup:=0;
cmTreeUp: CurGroup:=ttK1.FC_GKOD;
cmTreeDown: CurGroup:=ttK1.FC_KOD;
cmTreeNodeType:
{
if ttK1.FC_GKOD <> 0
TreeSetNodeType(trKARDS,2);
}
В чём может быть дело?