Форум: "Начинающим";
Текущий архив: 2008.05.25;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c