谢谢大家的帮助。已经可以读出数据来了。 可又遇到新问题了! 这样作就没有问题,可以显示出来。 procedure TForm4.TreeView1Expanding(Sender: TObject; Node: TTreeNode; begin showmessage(Trim(PMyRecord(TreeView1.selected.data)^.department_id)); end 可这样为什么就不行,老是报错。 procedure TForm4.TreeView1Expanding(Sender: TObject; Node: TTreeNode; var aStr:string; begin aStr:=Trim(PMyRecord(TreeView1.selected.data)^.department_id); showmessage(aStr); end /* 我要读出department_id的值,以此为检索条件(和上面的错误提示一样): aStr:='Select * From Worker '; aStr:=aStr+'Where work_department='+Trim(PMyRecord(TreeView1.selected.data)^.department_id)+';'; ADOQbm.Connection:=MainForm.ADOConnection1; ADOQbm.SQL.Clear; ADOQbm.SQL.Add(aStr); ADOQbm.Prepared; ADOQbm.Open; */ 还有释放指针应该怎样作?用dispose()可以吗?
崩溃了!又是一天,问题还是没有解决! aStr:='Select work_id,work_name From worker'; aStr:=aStr+' Where work_department='+Trim(PMyRecord(TreeView1.selected.data).department_id)+';'; 为什么会出错呀!用Showmessage(PMyRecord(TreeView1.selected.data).department_id)都可以显示出来数据。
procedure TForm4.TvCreate(); var k,j:Integer; TNode,TNode_Root:TTreeNode; Begin ADOTable1.Active:=False; ADOTable1.Active:=True; ADOQuery2.Active:=False; ADOTable1.Open; TreeView1.Items.Clear; TNode_Root:=TreeView1.Items.Add(nil,'部门管理'); For k:=1 To ADOTable1.RecordCount Do Begin new(p); //每加一个new一个~~ p.department_id:=ADOTable1.FieldByName('department_id').AsString; p.department_name:=ADOTable1.FieldByName('department_name').AsString; TNode:=Treeview1.Items.AddChildObject(TNode_Root,p.department_name,p); ADOTable1.Next; End; ADOQuery2.Active:=False; End;//释放的时候~~ var I: Integer; begin for I := 0 to TreeView1.Items.Count - 1 do if Assigned(TreeView1.Items[I].Data) then Dispose(PMyRecord(TreeView1.Items[I].Data));
http://expert.csdn.net/Expert/topic/2585/2585941.xml?temp=.6560022
addchildobject(Parent: TTreeNode; const S: string; Ptr: Pointer): TTreeNode;
parent:表示上一层节点。
s :表示要显示的字符串。
Ptr:该节点要附加的信息。一般传递一个记录的指针。记录的使用:(声明一个名为Pxxx的记录)
Pxxx=record
id1:integer;
id2:integer;
...其他记录成员
end;Txxx=^Pxxx; //把记录指向一个类。
其他的,在你引用的文章中已经很清楚的解释了,请你好好看看。
我的写的代码你看了吗?不知有没有错误!是你说的方法吧!可为什么我在
procedure TForm4.TreeView1Click(Sender: TObject)读出TV内容,总是显示最后加入的一个记录呀!
procedure TForm4.TreeView1Click(Sender: TObject);
begin
ShowMessage(PMyRecord(Treeview1.Selected.Data).department_name);
end;
明天早上给你,前提你要把你的说明写完整;
_____________________________________________________________________暮春三月,羊欢草长,天寒地冻,问谁饲狼?人心怜羊,狼心独怆,天心难测,世情如
霜……{言有尽而意无穷,余意尽在不言中……}
可又遇到新问题了!
这样作就没有问题,可以显示出来。
procedure TForm4.TreeView1Expanding(Sender: TObject; Node: TTreeNode;
begin
showmessage(Trim(PMyRecord(TreeView1.selected.data)^.department_id));
end
可这样为什么就不行,老是报错。
procedure TForm4.TreeView1Expanding(Sender: TObject; Node: TTreeNode;
var
aStr:string;
begin
aStr:=Trim(PMyRecord(TreeView1.selected.data)^.department_id);
showmessage(aStr);
end
/*
我要读出department_id的值,以此为检索条件(和上面的错误提示一样):
aStr:='Select * From Worker ';
aStr:=aStr+'Where work_department='+Trim(PMyRecord(TreeView1.selected.data)^.department_id)+';';
ADOQbm.Connection:=MainForm.ADOConnection1;
ADOQbm.SQL.Clear;
ADOQbm.SQL.Add(aStr);
ADOQbm.Prepared;
ADOQbm.Open;
*/
还有释放指针应该怎样作?用dispose()可以吗?
aStr:='Select work_id,work_name From worker';
aStr:=aStr+' Where work_department='+Trim(PMyRecord(TreeView1.selected.data).department_id)+';';
为什么会出错呀!用Showmessage(PMyRecord(TreeView1.selected.data).department_id)都可以显示出来数据。
TreeView1.selected.data只能保存四个字节的内容~~
一个string不定多少字节!~~
动态生成Treeview时,new()的指针不能dispose(),不然的话,Treeview中的Data也会被dispose掉了。
var
k,j:Integer;
TNode,TNode_Root:TTreeNode;
Begin
ADOTable1.Active:=False;
ADOTable1.Active:=True;
ADOQuery2.Active:=False;
ADOTable1.Open;
TreeView1.Items.Clear;
TNode_Root:=TreeView1.Items.Add(nil,'部门管理');
For k:=1 To ADOTable1.RecordCount Do
Begin
new(p); //每加一个new一个~~
p.department_id:=ADOTable1.FieldByName('department_id').AsString;
p.department_name:=ADOTable1.FieldByName('department_name').AsString;
TNode:=Treeview1.Items.AddChildObject(TNode_Root,p.department_name,p);
ADOTable1.Next;
End;
ADOQuery2.Active:=False;
End;//释放的时候~~
var
I: Integer;
begin
for I := 0 to TreeView1.Items.Count - 1 do
if Assigned(TreeView1.Items[I].Data) then
Dispose(PMyRecord(TreeView1.Items[I].Data));