Форум: "Базы";
Поиск по всему сайту: 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.027 c
3-9408            Surprising            2002-03-13 09:47  2002.04.04  
Маска на DBEdit


1-9563            lipskiy               2002-03-24 20:30  2002.04.04  
Как присвоить переменной типа Array [0..127] of Char значение переменной типа String?


1-9490            pashtet               2002-03-25 21:33  2002.04.04  
Как создать базу данных без сервера?


1-9539            GMV                   2002-03-24 00:35  2002.04.04  
Программа для ком порта


4-9679            Ditrix                2002-02-05 06:49  2002.04.04  
CreateProcessWithLogonW -> Error 87 InvalidParameters???????