![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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.