Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.04;
Скачать: [xml.tar.bz2];




Вниз

Дерево из записей 


Beer   (2002-03-12 14:41) [0]

Уважаемые мастера!
Как создать дерево (как в реестре) из значений определенного поля в БД, и получать запись, соответствеющую этому значению, при его выборе...
С уважением...



DiggerAbstract   (2002-03-12 14:55) [1]

Вот кусок кода из одной проги



type
Attrib = record
sCod: string;
sCodP: string;
sName: string;
iCode: integer;
bSelect: Boolean;
end;
PAttrib = ^Attrib;


procedure TFormTree.CreateTreeView (pQ: TADOQuery; TV: TTreeView);
var
iIndex, iNumber: Integer;
Atr, AtrF: PAttrib;
iII: Integer;
pListNode: TStringList;
FullItemsListChild: TStringList;
pNode: TTreeNode;

function FindCod(ssCod: string):Boolean;
var
iI: Integer;
begin
if FullItemsListChild.Find(ssCod, iI) then Result:=true
else Result:=false;
end;

begin
pListNode := TStringList.Create;
FullItemsListChild := TStringList.Create;
pQ.First;
for iIndex:=0 to pQ.RecordCount-1 do
begin
New(Atr);
Atr^.sCod := pQ.Fields.Fields[0].AsString;
Atr^.sCodP := pQ.Fields.Fields[1].AsString;
Atr^.sName := pQ.Fields.Fields[2].AsString;
Atr^.iCode := pQ.Fields.Fields[3].AsInteger;

New(AtrF);
AtrF^.sCod := pQ.Fields.Fields[0].AsString;
AtrF^.sCodP := pQ.Fields.Fields[1].AsString;
AtrF^.sName := pQ.Fields.Fields[2].AsString;
AtrF^.iCode := pQ.Fields.Fields[3].AsInteger;
FullItemsListChild.AddObject(AtrF^.sCod, TObject(AtrF));

ItemsList.AddObject(Atr^.sCodP, TObject(Atr));
pQ.Next;
end;
iIndex:=0;
iII:=0;
FullItemsListChild.Sort;
while iIndex<ItemsList.Count do
begin
if (PAttrib(ItemsList.Objects[iII])^.sCodP=PAttrib(ItemsList.Objects[iII])^.sCod) or (not FindCod(PAttrib(ItemsList.Objects[iII])^.sCodP)) then
begin
pNode := TV.Items.AddObject(nil, PAttrib(ItemsList.Objects[iII])^.sName, ItemsList.Objects[iII]);
pListNode.AddObject(PAttrib(ItemsList.Objects[iII])^.sName, pNode);
ItemsList.Delete(iII);
ItemsList.Sort;
Dec(iII);
end;
Inc(iIndex);
Inc(iII);
end;
//////////////////////

for iIndex:=0 to pListNode.Count-1 do
begin
AddFirstInUroven(TTreeNode(pListNode.Objects[iIndex]));
end;

iNumber := FullItemsListChild.Count-1;
for iIndex:=0 to iNumber do
begin
Atr := PAttrib (FullItemsListChild.Objects[iNumber-iIndex]);
Dispose(Atr);
end;
FullItemsListChild.Clear;
FullItemsListChild.Free;

ItemsList.Sort;
pListNode.Clear;
pListNode.Free;
// TreeView1.AlphaSort;

TreeView1.CustomSort(@CustomSortProc, 0);
end;


Запрос примерно такой:

select id, id_parent, name, id, name from kzk.b_budgetentry where id in
(
select id_entry from
(
select * from kzk.b_budget where id_period=:ID_PERIOD and id_dept=:ID_DEPT
and cost<>0 ) as s
group by id_entry
)



Beer   (2002-03-12 16:04) [2]

to DiggerAbstract>
Не совсем понятен тип переменной ItemList? Хотя рискну предположить, что это TStringList.
Вызывая метод AddObject дублируется ли физически значение объекта, который передаем вторым параметром?
Как затем получить значение поля через TTreeNode?



DiggerAbstract   (2002-03-12 16:36) [3]

спорол косяк - не все написал.
шлю на мыло пример
этот пример работает, просто настрой коннекцию и напиши SQL запрос по примеру который есть там



Beer   (2002-03-12 19:17) [4]


Ок, жду...
Спасибо!



Beer   (2002-03-12 19:29) [5]

Да, еще вопрос, как определить стректуру, если заранее не известно количество и типы полей?




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.04;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.018 c
1-9550            Atrem                 2002-03-23 12:38  2002.04.04  
Мастера,как можно перебрать в цикле все узлы и всех потомков всех узлов и т.д. в TTreeView?


1-9487            -=GaLaN=-             2002-03-23 19:19  2002.04.04  
Потеря фокуса формой


6-9595            SemFLY                2002-01-21 19:31  2002.04.04  
Событие ClientSocketRead


1-9577            Kon                   2002-03-23 01:50  2002.04.04  
Сохранение данных в EXE


6-9588            KPOT                  2002-01-22 14:06  2002.04.04  
Sockety