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

Вниз

Дерево из записей   Найти похожие ветки 

 
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]

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



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

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

Наверх




Память: 0.48 MB
Время: 0.009 c
1-9523
Beginner
2002-03-23 16:12
2002.04.04
OpenDialog


14-9602
VuDZ
2002-02-21 09:31
2002.04.04
Вопрос сезона


3-9394
SashaG
2002-03-12 08:59
2002.04.04
Пытаюсь св-ву Filter TTable сделать так:


1-9535
snoup
2002-03-23 20:15
2002.04.04
Как в определенное время запустить exe-файл (например в 10:37) написав его название


1-9489
IlyaSh
2002-03-25 12:17
2002.04.04
печать данных из таблицы TTable