新学delphi,添加以下数据后,在treeview中没有显示任何东西,数据库连接成功procedure TMain.TreeviewReFresh;
begin
Node1:=Treeview1.Items.Add(nil,'通讯目录');
ADOQuery3.Close;
ADOQuery3.SQL.Text:='Select Distinct 类型 From msn';
ADOQuery3.Open;
if ADOQuery3.RecordCount>0 then
begin
while not ADOQuery3.Eof do
begin
Node2:=TreeView1.Items.AddChild(Node1,ADOQuery3.Fields[0].asstring);
TreeView1.Items.AddChild(Node2,'');
ADOQuery3.Next;
end;
end;
end;
begin
Node1:=Treeview1.Items.Add(nil,'通讯目录');
ADOQuery3.Close;
ADOQuery3.SQL.Text:='Select Distinct 类型 From msn';
ADOQuery3.Open;
if ADOQuery3.RecordCount>0 then
begin
while not ADOQuery3.Eof do
begin
Node2:=TreeView1.Items.AddChild(Node1,ADOQuery3.Fields[0].asstring);
TreeView1.Items.AddChild(Node2,'');
ADOQuery3.Next;
end;
end;
end;
解决方案 »
- 急求一个简单的加密函数
- 请问MainMenu1如何放到CoolBar1控件上呢?
- SQL查询的问题———————————在线等
- 怎样判断某个目录是否存在,如果不存在则自动创建它
- 一个简单的问题,怎么在delphi中写文件和读文件????请指教
- 一个问题
- delphi 中treeview问题请教
- delphi 中的table 的filter有没有支持 like方法,该怎么用,同时filter当字段值为中文时怎么写?
- 〓〓〓〓 请问谁有1stClass 3000的安装密码 〓〓〓〓
- 如何在RICHEDIT中插入一个彩色字符?
- tapplicationevents控件的onexception事件是否可以截获任何异常?
- 控件DEVExpress
begin
Treeview1.Items.BeginUpdate;
Node1:=Treeview1.Items.Add(nil, "通讯目录 ");
ADOQuery3.Close;
ADOQuery3.SQL.Text:= "Select Distinct 类型 From msn ";
ADOQuery3.Open;
if ADOQuery3.RecordCount >0 then
begin
while not ADOQuery3.Eof do
begin
Node2:=TreeView1.Items.AddChild(Node1,ADOQuery3.Fields[0].asstring);
TreeView1.Items.AddChild(Node2, " ");
ADOQuery3.Next;
end;
end;
Treeview1.Items.EndUpdate;
end;
试下,这样应该可以了
TreeView1.Items.AddChild(Node2, " "); 感觉这2句有问题,好像可以直接用TreeView1.Items.AddChild(Node1,ADOQuery3.Fields[0].asstring); 替换这2句吧
ADOQuery3.first; // 加上这句吧
while not ADOQuery3.Eof do
begin
Node2:=TreeView1.Items.AddChild(Node1,ADOQuery3.Fields[0].asstring);
TreeView1.Items.AddChild(Node2, " ");
ADOQuery3.Next;
end;
没有反映。
recordcount 应该是2,因为我msn这张表里面有2种类型
Node1:=Treeview1.Items.Add(nil, "通讯目录 "); 至少会在树上增加一个节点,检查一下你代码中调用 TreeviewReFresh 函数的地方,是否由于其他原因在函数调用之前就退出,采用单步跟踪就可以追踪原因所在。
加个看看ADOQuery3.first;
procedure TMain.TreeviewReFresh;
begin
Node1:=Treeview1.Items.Add(nil, '通讯目录 ');
ADOQuery3.Close;
ADOQuery3.SQL.Text:= 'Select Distinct 类型 From msn ';
ADOQuery3.Open;
ADOQuery3.first
if ADOQuery3.RecordCount >0 then
begin
while not ADOQuery3.Eof do
begin
Node2:=TreeView1.Items.AddChild(Node1,ADOQuery3.Fields[0].asstring);
TreeView1.Items.AddChild(Node2, ' ');
ADOQuery3.Next;
end;
end;
end;
Select Distinct 类型 From msn然后你要确定数据集是从第一个记录开始遍历的,你应该加上:ADOQuery3.First; 最后你还应该把 TreeView1.Items.AddChild(Node2,' ');注释掉,就象下面的代码:
procedure TMain.TreeviewReFresh;
begin
Node1:=Treeview1.Items.Add(nil, '通讯目录 ');
ADOQuery3.Close;
ADOQuery3.SQL.Text:= 'Select Distinct 类型 From msn ';
ADOQuery3.Open;
ADOQuery3.first;
if ADOQuery3.RecordCount >0 then
begin
while not ADOQuery3.Eof do
begin
Node2:=TreeView1.Items.AddChild(Node1,ADOQuery3.Fields[0].asstring);
//TreeView1.Items.AddChild(Node2, ' ');
ADOQuery3.Next;
end;
end;
end;
Type
PUnitNodeInfo = ^TUnitNodeInfo;
TUnitNodeInfo = record
UnitCode:string;
UnitName:string; UnitPath:string;
{在这个记录中,你还可以保存一些其它自己感兴趣的数据,比如部门经理等}
end;
procedure TForm1.CreateUnitTree;
var
root : TTreeNode;
NodeInfo : PUnitNodeInfo;
begin
TreeView1.Items.Clear;
ADOQDepart.Close;
ADOQDepart.SQL.Clear;
ADOQDepart.SQL.Add('select * from 部门表 where 部门父号=''0'' ');
AdoQDepart.Open; if ADOQDepart.Eof then
begin//如果数据为空,我们手动添加一个根部门,以公司名称命名
with ADOQDelTree do
begin
close;
Sql.Clear;
Sql.Add('insert into 部门表 values(''001'',''公司'',''0'',''001'') ');
ExecSQL;
end;
end; ADOQDepart.Requery;
while not ADOQDepart.Eof do
begin
New(NodeInfo);
NodeInfo^.UnitCode:=ADOQDepart.FieldByName('部门编号').AsString;
NodeInfo^.UnitName:=AdoQDepart.FieldByName('部门名称').AsString;
NodeInfo^.UnitPath:=AdoQDepart.FieldByName('路径').AsString; root:=TreeView1.Items.AddObjectFirst(nil,NodeInfo^.UnitName,NodeInfo); //添加根节点
root.ImageIndex :=0 ;{设置节点图标索引,当然也可以不在此设置而在TreeView的事件中设置}
root.SelectedIndex:=1;
CreateSubTree(root);//递归
AdoQDepart.Next;
end; if TreeView1.Items.Count <>0 then
TreeView1.Items[0].Expanded:=True;end;
procedure TForm1.CreateSubTree(root:TTreeNode);
var AdoQSubDep:TADOQuery;
TreeNode : TTreeNode;
NodeInfo : PUnitNodeInfo;
strId:string; //父部门编号
begin
AdoQSubDep:=TADOQuery.Create(self);
AdoQSubDep.Connection:=ADOConnection1;
strId:=PUnitNodeInfo(root.Data)^.UnitCode;
AdoQSubDep.Close;
AdoQSubDep.SQL.Clear;
AdoQSubDep.SQL.Add('select * from 部门表 where 部门父号='''+strId+''' ');
AdoQSubDep.Open;
while not AdoQSubDep.Eof do
begin
new(NodeInfo);
NodeInfo^.UnitCode:=AdoQSubDep.FieldByName('部门编号').AsString;
NodeInfo^.UnitName:=AdoQSubDep.FieldByName('部门名称').AsString;
NodeInfo^.UnitPath:=AdoQSubDep.FieldByName('路径').AsString;
TreeNode:=TreeView1.Items.AddChildObject(root,NodeInfo^.UnitName,NodeInfo);
TreeNode.ImageIndex:=0;
TreeNode.SelectedIndex:=1;
CreateSubTree(TreeNode);
ADOQSubDep.Next;
end;
end;
procedure TForm1.FormShow(Sender: TObject);
begin CreateUnitTree;
end;
增加记录后,没有调用Treeview.ReFresh