建一棵树是使用递归调用的,可是在递归的时候ADODaTaSet改变了!这个dataset是公有的。
代码如下:
procedure TFrmExpert.CreatTree(var TVSpeciality : TTreeView);
var
NodePointer: speciality;
Node,SNode : TTreeNode;
adodata : TADODataSet;
begin
//ADOCommandSpec.CommandText := 'select * from proffdb where id = 0';
//adodata.Recordset := ADOCommandSpec.Execute;
node := TVSpeciality.GetNodeAt(0,0);
snode := TVSpeciality.Items.AddChild(node,'专业');
new(NodePointer);
NodePointer.Specialityid := 100;
// NodePointer.Pspecialityid := 0;
NodePointer.SpecialityName := '专业';
sNode.Data := NodePointer;
AddChildren(snode,100,TVSpeciality);
end;procedure TFrmExpert.AddChildren(var PNode : TTreeNode;Pid : integer;STree : Ttreeview);
var
NodePointer: speciality;
Node,SNode : TTreeNode;
adodata1 : TADODataSet;
i ,j: integer;
//list:List
begin
//Tadodataset.Create(adodata1);
ADOCommandSpec.CommandText := 'select * from proffdb where pid = :pid order by id';
ADOCommandSpec.Parameters[0].Value := pid;
adoData1.Recordset := ADOCommandSpec.Execute; for i := 0 to adoData1.Recordset.RecordCount - 1 do
begin
Node := STree.Items.AddChild(PNode,adoData1.fieldbyname('pname').AsString);
new(nodepointer);
nodepointer.Specialityid := adoData1.fieldbyname('id').AsInteger;
NodePointer.Pspecialityid := adoData1.fieldbyname('pid').AsInteger;
NodePointer.SpecialityName := adoData1.fieldbyname('pname').AsString;
node.Data := NodePointer;
AddChildren(node,adoData1.fieldbyname('id').AsInteger,STree);
adoData1.Next;
j := adoData1.fieldbyname('id').AsInteger;
j := adoData1.fieldbyname('pid').AsInteger;
end;
end;
代码如下:
procedure TFrmExpert.CreatTree(var TVSpeciality : TTreeView);
var
NodePointer: speciality;
Node,SNode : TTreeNode;
adodata : TADODataSet;
begin
//ADOCommandSpec.CommandText := 'select * from proffdb where id = 0';
//adodata.Recordset := ADOCommandSpec.Execute;
node := TVSpeciality.GetNodeAt(0,0);
snode := TVSpeciality.Items.AddChild(node,'专业');
new(NodePointer);
NodePointer.Specialityid := 100;
// NodePointer.Pspecialityid := 0;
NodePointer.SpecialityName := '专业';
sNode.Data := NodePointer;
AddChildren(snode,100,TVSpeciality);
end;procedure TFrmExpert.AddChildren(var PNode : TTreeNode;Pid : integer;STree : Ttreeview);
var
NodePointer: speciality;
Node,SNode : TTreeNode;
adodata1 : TADODataSet;
i ,j: integer;
//list:List
begin
//Tadodataset.Create(adodata1);
ADOCommandSpec.CommandText := 'select * from proffdb where pid = :pid order by id';
ADOCommandSpec.Parameters[0].Value := pid;
adoData1.Recordset := ADOCommandSpec.Execute; for i := 0 to adoData1.Recordset.RecordCount - 1 do
begin
Node := STree.Items.AddChild(PNode,adoData1.fieldbyname('pname').AsString);
new(nodepointer);
nodepointer.Specialityid := adoData1.fieldbyname('id').AsInteger;
NodePointer.Pspecialityid := adoData1.fieldbyname('pid').AsInteger;
NodePointer.SpecialityName := adoData1.fieldbyname('pname').AsString;
node.Data := NodePointer;
AddChildren(node,adoData1.fieldbyname('id').AsInteger,STree);
adoData1.Next;
j := adoData1.fieldbyname('id').AsInteger;
j := adoData1.fieldbyname('pid').AsInteger;
end;
end;
解决方案 »
- 快捷方式问题
- 如何禁用和起用IE浏览器(或禁止电脑上网)??
- 关于控件在窗体的拖动问题??????????????????????????????????????????????????
- 怎样循环取得DBGrid中第一列单元格中的所有内容,今天2:30加分!!!
- 循环执行不了????????
- 如果一个指针可能是指向integer数据也可能指向single数据,如何使用?
- 求购系统详细设计文档!! 。。做个参照。。谢谢,或告诉哪里能得到类似文档,将感激不尽!!
- 使用Cxgrid的字段过滤功能的时候,怎么去掉Customize按钮
- 关于delet函数---新手
- 如何检测目前打开了哪些窗口?
- 在NET环境中,DELPHI FOR NET生成的程序比C#的执行效率要好!
- csdn的Blog为何没有注册链接?
有点乱
不过帮你定
这点还是可以做到的