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

Вниз

tTreeView, помогите с датами в узлах   Найти похожие ветки 

 
Vlad Oshin ©   (2008-04-30 14:33) [0]

по статье
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=488
делаю свой DBTreeView

Есть Таблица
CREATE TABLE [dbo].[tbWH] (
[ID] [uniqueidentifier] NOT NULL ,
[NameGroup] [nchar] (50) COLLATE Cyrillic_General_CI_AS NOT NULL ,
[ParentID] [uniqueidentifier] NOT NULL ,
[Folder] [int] NOT NULL
) ON [PRIMARY]


ID - идентификатор узла
ParentID - подчинение узла узлу
"{00000000-0000-0000-0000-000000000000}" - идентификатор никому не подчиняющемуся узлу
Задача построить дерево
----------------------------------------------------------------
Procedure TFormTree.ExpandLevel( Node : TTreeNode);
Var
 ID : string[40];
 i  : Integer;
 TreeNode : TTreeNode;
Begin
// Для самого верхнего уровня выбрать только тех, кто не имеет родителей.
   IF Node = nil
    Then ID:=QuotedStr("{00000000-0000-0000-0000-000000000000}")
    Else begin
          ID:=string(Node.Data);

Тут ID приходит со всяким мусором в конце, например
ID = {B10471CF-3EB4-4C7B-AE8B-B4B2C336BB34"#0#0#0
это верно, до момента выделенного курсивом, т.е. такая запись в таблице есть, но последние символы не такие
        end;

   qTreeCompanies.Close;
   qTreeCompanies.SQL.Text:="select * from tbWH where ParentID="+ ID;
   qTreeCompanies.Open;
   TreeCompanies.Items.BeginUpdate;
   // Для каждой строки из полученного набора данных
   // формируем ветвь в TreeView, как дочерние ветки к той,
   // которую мы только что "раскрыли"
   For i:=1 To qTreeCompanies.RecordCount Do
   Begin
      // Запишем в поле Data ветки ее идентификационный номер(ID) в таблице
      TreeNode:=TreeCompanies.Items.AddChildObject(Node,
                                 qTreeCompanies.FieldByName("NameGroup").AsString ,
                                 Pointer(qTreeCompanies.FieldByName("ID").AsString));

-----
Как избавится, как построить таки дерево? (если я руками под дебагером эти символы перебиваю - то все правильно строит)


 
Сергей М. ©   (2008-04-30 14:43) [1]


>       // Запишем в поле Data ветки ее идентификационный
> номер(ID) в таблице
>       TreeNode:=TreeCompanies.Items.AddChildObject(Node,
>
>                                  qTreeCompanies.FieldByName("NameGroup").
> AsString ,
>                                  Pointer(qTreeCompanies.
> FieldByName("ID").AsString));


Не номер ты туда записываешь, а указатель на галиматью, потому что время жизни строки, получаемой вызовом qTreeCompanies.FieldByName("ID").AsString, меньше времени выполнения метода AddChildObject.


 
Reindeer Moss Eater ©   (2008-04-30 14:54) [2]

Он пойнер использует как хранилище интегер типа. Так что все нормально.


 
Reindeer Moss Eater ©   (2008-04-30 14:55) [3]

Только непонятно зачем AsString, если нужно AsInteger


 
Reindeer Moss Eater ©   (2008-04-30 14:57) [4]

Ежели нужна строка, то
AddObject("bla bla bla", StrNew(Pchar(FieldByName("bla bla bla ").AsString)))


 
Сергей М. ©   (2008-04-30 15:02) [5]


> непонятно зачем AsString, если нужно AsInteger
>


Вот потому и галиматья)


 
Vlad Oshin ©   (2008-04-30 15:09) [6]


> Reindeer Moss Eater ©   (30.04.08 14:57) [4]
> Ежели нужна строка, то
> AddObject("bla bla bla", StrNew(Pchar(FieldByName("bla bla
> bla ").AsString)))

спасибо, так работает


 
Reindeer Moss Eater ©   (2008-04-30 15:25) [7]

Работать-то работает, только StrDispose делать кроме тебя будет некому. Пушкина убили на дуэли.



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

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

Наверх




Память: 0.48 MB
Время: 0.021 c
2-1209657059
VirEx
2008-05-01 19:50
2008.05.25
Математика


2-1209050918
mahab
2008-04-24 19:28
2008.05.25
Ace


3-1197894306
Ангела
2007-12-17 15:25
2008.05.25
Вопрос по таблицам Access


2-1209552720
Fr1K
2008-04-30 14:52
2008.05.25
Заваршение записи


2-1209826304
AndreWG
2008-05-03 18:51
2008.05.25
DbGrid