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

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

TreeView ключевое поле БД, [D5, dBase, FoxPro]


AIB ©   (2003-07-17 15:53:00) 

У меня следующий вопрос:
я заполняю TreeView данными из таблицы БД,
(текстовое поле, и ключевое поле ID)таким образом:
TreeView.Items.AddChildObject(Node,Table.Fields[1].AsString,
Pointer(Table.Fields[0].AsInteger)).
Затем могу легко узнать в TreeView ID-поле так:
…=Integer(Node.Data).

Проблема в следующем.
Я работаю с таблицей FoxPro(.dbf) где ключевое поле имеет
не числовой, а строковый тип(примерно такого вида "rdk0000034" ).
Как в таком случае грамотно заполнить параметры процедуры
AddChildObject(...,...,Pointer(...))?
Чтобы определять ID из TreeView аналогично вышеуказанному
...(Node.Data)

Или это делается как-то иначе?. Кто сталкивался?
Спасибо всем тем, кто ответит по существу!!!

Любителей считать всех кроме себя "тормозами"
просьба не беспокоить, плз!


Соловьев   (2003-07-18 10:08:00) [1]

Вот вырезка из моей проги, если что не понятно - спрашивай:

NodeData = ^ItemRec;
ItemRec = record
Id : integer;
Id_employee: integer;
Parent: integer;
CCount: integer;
Rating: integer;
CanChild: boolean;
Text: string;
end;

...

TTreeView(managment_structure).Items.BeginUpdate;
while not Eof do
begin
New(PNode);

PNode.Id := FieldByName("id").AsInteger;
PNode.Parent := FieldByName("management_parent").AsInteger;
PNode.CCount := FieldByName("count_child").AsInteger;
PNode.Text := FieldByName("management_txt").AsString;
PNode.Id_employee := FieldByName("id_employee").AsInteger;
PNode.CanChild := FieldByName("id_employee").AsInteger = -1;
PNode.Rating := FieldByName("raiting").AsInteger;

TempNode := managment_structure.Items.AddChildObject(Node, PNode.Text, PNode);

TempNode.HasChildren := PNode.CCount > 0;


AkaSaint   (2003-07-17 22:50:00) [2]

Хорошенький гибрид Паскаля с Си получился :-) Точки нужно на стрелочки заменить.


AkaSaint   (2003-07-17 22:47:00) [3]

Честно говоря, я уже не помню синтаксис в Дельфи. Могу на Си написать :)

AnsiString * KeyStrPtr = new AnsiString(Table.Fields[0].AsInteger);
TreeView.Items.AddChildObject(Node,Table.Fields[1].AsString,
KeyStrPtr).
Когда тебе больше не нужен этот узел в дереве, выполняешь:
delete Node.Data;


sniknik   (2003-07-17 22:25:00) [4]

> Любителей считать всех кроме себя "тормозами"
> просьба не беспокоить, плз!
(это не сноска, это ответ на AIB (17.07.03 20:52))


AIB   (2003-07-17 20:52:00) [5]

Ну что, никто так и не сможет мне помочь???


AIB   (2003-07-17 17:12:00) [6]

Ни разу так не делал. Но быть может вставишь
пару строк в предполагаемую процедуру, чтобы
мне понять в общих чертах механизм

procedure xxx;

begin

TreeView.Items.AddChildObject(Node,Table.Fields[1].AsString,
Pointer(....)).


....... //определение значения Node.Data
end

Спасибо!!!!



AkaSaint   (2003-07-17 16:36:00) [7]

Очевидно, в 4 байта значение типа "rdk0000034" не уместишь. Поэтому я бы на твоем месте выделял бы память под такую строку динамически и указатель на эту строку записывал бы в Node.Data. Затем, естетственно, освобождал бы память.


Наверх

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