Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

tTreeView, помогите с датами в узлах [D7, XP]


Vlad Oshin ©   (2008-04-30 14:33:00) 

по статье
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-B4B2C336BB3 4'#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));

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


Reindeer Moss Eater   (2008-04-30 15:25:00) [1]

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


Vlad Oshin   (2008-04-30 15:09:00) [2]


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

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


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


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


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


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

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


Reindeer Moss Eater   (2008-04-30 14:55:00) [5]

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


Reindeer Moss Eater   (2008-04-30 14:54:00) [6]

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


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


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


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


Наверх

Титульная страница Поиск, карта сайта Написать письмо