Форум: "Базы";
Текущий архив: 2003.08.11;
Скачать: [xml.tar.bz2];
ВнизTreeView ключевое поле БД, Найти похожие ветки
← →
AIB (2003-07-17 15:53) [0]У меня следующий вопрос:
я заполняю 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)
Или это делается как-то иначе?. Кто сталкивался?
Спасибо всем тем, кто ответит по существу!!!
Любителей считать всех кроме себя "тормозами"
просьба не беспокоить, плз!
← →
AkaSaint (2003-07-17 16:36) [1]Очевидно, в 4 байта значение типа "rdk0000034" не уместишь. Поэтому я бы на твоем месте выделял бы память под такую строку динамически и указатель на эту строку записывал бы в Node.Data. Затем, естетственно, освобождал бы память.
← →
AIB (2003-07-17 17:12) [2]Ни разу так не делал. Но быть может вставишь
пару строк в предполагаемую процедуру, чтобы
мне понять в общих чертах механизм
procedure xxx;
begin
TreeView.Items.AddChildObject(Node,Table.Fields[1].AsString,
Pointer(....)).
....... //определение значения Node.Data
end
Спасибо!!!!
← →
AIB (2003-07-17 20:52) [3]Ну что, никто так и не сможет мне помочь???
← →
sniknik (2003-07-17 22:25) [4]> Любителей считать всех кроме себя "тормозами"
> просьба не беспокоить, плз!
(это не сноска, это ответ на AIB (17.07.03 20:52))
← →
AkaSaint (2003-07-17 22:47) [5]Честно говоря, я уже не помню синтаксис в Дельфи. Могу на Си написать :)
AnsiString * KeyStrPtr = new AnsiString(Table.Fields[0].AsInteger);
TreeView.Items.AddChildObject(Node,Table.Fields[1].AsString,
KeyStrPtr).
Когда тебе больше не нужен этот узел в дереве, выполняешь:
delete Node.Data;
← →
AkaSaint (2003-07-17 22:50) [6]Хорошенький гибрид Паскаля с Си получился :-) Точки нужно на стрелочки заменить.
← →
Соловьев (2003-07-18 10:08) [7]Вот вырезка из моей проги, если что не понятно - спрашивай:
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;
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.08.11;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c