数据库的数据写入treeview后,treeview显示的是数据库中不唯一的名称字段,现在当选中treeview的一个记录时,怎样取出他在数据库中对应的唯一的i

  • 主题发起人 主题发起人 gsl814
  • 开始时间 开始时间
G

gsl814

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库的数据写入treeview后,treeview显示的是数据库中不唯一的名称字段,现在当选中treeview的一个记录时,怎样取出他在数据库中对应的唯一的id字段的值(200分)<br />用record 和point的方法把数据库的纪录写入treeview我知道
现在问题是这样的:
a---
-bb 结构图是这样的,treeview中显示的都是name字段,name字段不唯一
-cc-bb 如在2纪3纪都有bb,数据库中id是唯一,
-dd-bb 现在的问题是:
我在选中treeview的2纪bb时,怎样知道他在数据库中唯一的id字段

 
用Dx组件吧,你说的问题可以解决。
DxDbTree有数据感应功能,只要你把它连接到数据库就可以了。
 
这个题你给多少分,告诉我,我考虑一下,我的答案是最实用的。我的EMAIL是:sm_79@163.net
 
TTreeNode.Data的delphi帮助:
The following code defines a record type of TMyRec and a record pointer type of PMyRec.

type
PMyRec = ^TMyRec;
TMyRec = record
FName: string;
LName: string;
end;

Assuming these types are used, the following code adds a node to TreeView1 as the last sibling of a specified node. A TMyRec record is associated with the added item. The FName and LName fields are obtained from edit boxes Edit1 and Edit2. The Index parameter is obtained from edit box Edit3. The item is added only if the Index is a valid value.

procedure TForm1.Button1Click(Sender: TObject);

var
MyRecPtr: PMyRec;
TreeViewIndex: LongInt;
begin
New(MyRecPtr);
MyRecPtr^.FName := Edit1.Text;
MyRecPtr^.LName := Edit2.Text;
TreeViewIndex := StrToInt(Edit3.Text);
with TreeView1 do
begin
if Items.Count = 0 then
Items.AddObject(nil, 'Item' + IntToStr(TreeViewIndex), MyRecPtr)
elseif (TreeViewIndex &lt; Items.Count) and (TreeViewIndex &gt;= 0) then
Items.AddObject(Items[TreeViewIndex], 'Item' + IntToStr(TreeViewIndex), MyRecPtr);

end;
end;

After an item containing a TMyRec record has been added, the following code retrieves the FName and LName values associated with the item and displays the values in a label.

procedure TForm1.Button2Click(Sender: TObject);

begin
Label1.Caption := PMyRec(TreeView1.Selected.Data)^.FName + ' ' +
PMyRec(TreeView1.Selected.Data)^.LName;
end;
 
tag可以用得上
 
to :高小五
你没有用上释放
Procedure FreeNode(treeview :Ttreeview); //释放内存
procedure TForm1.FreeNode(treeview: Ttreeview);
var
i:integer;
pnode:PMyRec;
begin
FOR i:=0 to TreeView.Items.Count - 1 do
begin
if TreeView.Items.Data&lt;&gt;nil then
begin
pnode:=PMyRec(TreeView.Items.Data);
FreeMem(pnode);
end;
end;
end;
在窗体的FormDestroy事件里加上。这样才比较完美哦!
其他的都每错!
 
谢谢zqs10597249兄的提醒,我是直接从Delphi的帮助上复制下来的,没仔细看
 
建立TTreeNode 的句柄和数据库记录的对应关系。
 
//从数据库中提取数据显示在TreeView1中
procedure Tbumen_set_frm.BitBtn1Click(Sender: TObject);
var
i,k:integer;
ins,ss,kk:string;
tmp:string ;
MyRecPtr: PMyRec;
begin
TreeView1.Items.Clear ;
i:=0;
k:=0;
ins:='';
ins:=ins+ ' select * from 部门表 ' ;
ADOQuery1.close;
ADOQuery1.SQL.Clear ;
ADOQuery1.sql.add(ins);
adoquery1.open;
while not adoquery1.eof do
begin
kk:=ADOQuery1.fieldbyname('father').AsString ;
if ADOQuery1.FieldByName('father').AsString ='' then
begin
New(MyRecPtr);
MyRecPtr^.FName := adoquery1.FieldByName('级别').AsString ;
MyRecPtr^.LName := adoquery1.FieldByName('名称'). asstring ;
ss:= adoquery1.FieldByName('级别').AsString;
TreeView1.Items.AddObject(nil,MyRecPtr^.FName, MyRecPtr);
end else
begin
for i := 0 to TreeView1.Items.Count-1 do
begin
tmp:=pchar(TreeView1.items.data);//?这一句怎样写,取出TreeView1中的显示名称字段对应的级别
if (tmp = kk )then
begin
New(MyRecPtr);
MyRecPtr^.FName := adoquery1.FieldByName('级别').AsString ;
MyRecPtr^.LName := adoquery1.FieldByName('名称').AsString ;
ss:= adoquery1.FieldByName('级别').AsString;
TreeView1.Items.AddChildObject(TreeView1.items,MyRecPtr^.FName,MyRecPtr);//变了后TreeView1.items,也存在问题廖
break;
end; // if
end; // for

end;
ADOQuery1.Next ;
end;

显示select 的内容
procedure Tbumen_set_frm.BitBtn3Click(Sender: TObject);
begin
Label1.Caption := PMyRec(TreeView1.Selected.Data)^.FName + ' ' +
PMyRec(TreeView1.Selected.Data)^.LName;
end;
 
犯廖一个低级错误![:D]
谢谢!已经解决廖
 
后退
顶部