delphi 中用treeview控件读出数据库中的数据 我数据库里是个多层次关系,用一个parent_id和id关联,比如系统管理-用户管理-增加。。层次关系我现在要实现的就是进入窗体的时候将数据库中的数据按层次显示在treeview控件里 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以用循环,也可以用递归,也可以用现成的第三方控件(如cxDBTreeList)要看你数据库是怎么设计的了 http://blog.csdn.net/bdmh/article/details/5857236 了解下xml的解析,就行了,原理类似 SQL: string; vDRec, vGRec: integer; vDNode, vGNode, vUNode: TTreeNode; vRDept: PrDepartment; vRGroup: PrGroup; vRUser: PrUser;begin SQL := 'SELECT D.RecordID DRecID,D.DepartmentID,D.DName,D.DDescription,' + 'D.DepartmentPopedom,G.RecordID GRecID,G.GroupID,G.GName,G.GDescription,' + 'G.GroupPopedom,U.RecordID URecID,U.UserID,U.OName,U.OPassword,' + 'U.UserPopedom,U.CreateTime,U.ModifyTime FROM ODEPARTMENT D' + ' LEFT JOIN OGROUP G ON G.DepartmentID = D.DepartmentID' + ' LEFT JOIN OUSER U ON D.DepartmentID = U.DepartmentID and U.GroupID = G.GroupID' + ' ORDER BY D.RecordID,G.RecordID,U.RecordID'; qrUser.SQL.Text := SQL; qrUser.Open; vDRec := 0; vGRec := 0; vGNode := nil; vDNode := nil; while not qrUser.Eof do begin if vDRec <> qrUser.FieldByName('DRecID').AsInteger then begin //增加部门节点 vRDept := New(PrDepartment); vRDept.RecID := qrUser.FieldByName('DRecID').AsInteger; vRDept.DeptID := qrUser.FieldByName('DepartmentID').AsString; vRDept.Name := qrUser.FieldByName('DName').AsString; vRDept.Desc := qrUser.FieldByName('DDescription').AsString; vRDept.Popedom := Trim(qrUser.FieldByName('DepartmentPopedom').AsString); vRDept.Popedom := TCommFun.DencryptStr(vRDept.Popedom, vRDept.Name); vDNode := tvUser.Items.AddChildObject(nil, vRDept.Name, vRDept); vDNode.SelectedIndex := 0; vDNode.ImageIndex := 0; vDRec := vRDept.RecID; vGRec := 0; end; if vGRec <> qrUser.FieldByName('GRecID').AsInteger then begin //增加班组节点 vRGroup := New(PrGroup); vRGroup.RecID := qrUser.FieldByName('GRecID').AsInteger; vRGroup.GroupID := qrUser.FieldByName('GroupID').AsString; vRGroup.DeptID := qrUser.FieldByName('DepartmentID').AsString; vRGroup.Name := qrUser.FieldByName('GName').AsString; vRGroup.Desc := qrUser.FieldByName('GDescription').AsString; vRGroup.Popedom := Trim(qrUser.FieldByName('GroupPopedom').AsString); vRGroup.Popedom := TCommFun.DencryptStr(vRGroup.Popedom, vRGroup.Name); vGNode := tvUser.Items.AddChildObject(vDNode, vRGroup.Name, vRGroup); vGNode.SelectedIndex := 1; vGNode.ImageIndex := 1; vGRec := vRGroup.RecID; end; //增加用户节点 vRUser := New(PrUser); vRUser.RecID := qrUser.FieldByName('URecID').AsInteger; vRUser.UserID := qrUser.FieldByName('UserID').AsString; vRUser.DeptID := qrUser.FieldByName('DepartmentID').AsString; vRUser.GroupID := qrUser.FieldByName('GroupID').AsString; vRUser.Name := qrUser.FieldByName('OName').AsString; vRUser.Pwd := TCommFun.DencryptStr(qrUser.FieldByName('OPassword').AsString, vRUser.Name); vRUser.Popedom := Trim(qrUser.FieldByName('UserPopedom').AsString); vRUser.Popedom := TCommFun.DencryptStr(vRUser.Popedom, vRuser.Name); vRUser.CreateTime := qrUser.FieldByName('CreateTime').AsString; vRUser.ModifiedTime := qrUser.FieldByName('ModifyTime').AsString; vUNode := tvUser.Items.AddChildObject(vGNode, vRUser.Name, vRUser); vUNode.SelectedIndex := 2; vUNode.ImageIndex := 2; qrUser.Next; end; @bdmh:不好意思,分给错人了 不小心给了你楼下的。以后有帖,还是麻烦你跟进哦 。。下次补分给你 mysql图片乱码 如何判断数据库里是否存在用户输入的一段编码范围? sql 同时查询 日期 姓名是否已有记录。 请问treeview如何设置第一层字体颜色,字体,背景,当为某一数值时为大写红色,请高手帮忙 关于子窗口问题!急啊!!!!!! select 关联 delphi 7跑的比较慢 该如何设置shelltreeview为只读? 急!怎么改变标题栏的高度及字体大小? xe7开发android,如何取屏幕颜色 Delphi 控制 CodeSoft 报错 Method 'Dialogs' not supported by automation object 求一个简单有规律的公式?
要看你数据库是怎么设计的了
vDRec, vGRec: integer;
vDNode, vGNode, vUNode: TTreeNode;
vRDept: PrDepartment;
vRGroup: PrGroup;
vRUser: PrUser;
begin
SQL := 'SELECT D.RecordID DRecID,D.DepartmentID,D.DName,D.DDescription,'
+ 'D.DepartmentPopedom,G.RecordID GRecID,G.GroupID,G.GName,G.GDescription,'
+ 'G.GroupPopedom,U.RecordID URecID,U.UserID,U.OName,U.OPassword,'
+ 'U.UserPopedom,U.CreateTime,U.ModifyTime FROM ODEPARTMENT D'
+ ' LEFT JOIN OGROUP G ON G.DepartmentID = D.DepartmentID'
+ ' LEFT JOIN OUSER U ON D.DepartmentID = U.DepartmentID and U.GroupID = G.GroupID'
+ ' ORDER BY D.RecordID,G.RecordID,U.RecordID';
qrUser.SQL.Text := SQL;
qrUser.Open;
vDRec := 0;
vGRec := 0;
vGNode := nil;
vDNode := nil;
while not qrUser.Eof do
begin
if vDRec <> qrUser.FieldByName('DRecID').AsInteger then
begin //增加部门节点
vRDept := New(PrDepartment);
vRDept.RecID := qrUser.FieldByName('DRecID').AsInteger;
vRDept.DeptID := qrUser.FieldByName('DepartmentID').AsString;
vRDept.Name := qrUser.FieldByName('DName').AsString;
vRDept.Desc := qrUser.FieldByName('DDescription').AsString;
vRDept.Popedom := Trim(qrUser.FieldByName('DepartmentPopedom').AsString);
vRDept.Popedom := TCommFun.DencryptStr(vRDept.Popedom, vRDept.Name);
vDNode := tvUser.Items.AddChildObject(nil, vRDept.Name, vRDept);
vDNode.SelectedIndex := 0;
vDNode.ImageIndex := 0;
vDRec := vRDept.RecID;
vGRec := 0;
end;
if vGRec <> qrUser.FieldByName('GRecID').AsInteger then
begin //增加班组节点
vRGroup := New(PrGroup);
vRGroup.RecID := qrUser.FieldByName('GRecID').AsInteger;
vRGroup.GroupID := qrUser.FieldByName('GroupID').AsString;
vRGroup.DeptID := qrUser.FieldByName('DepartmentID').AsString;
vRGroup.Name := qrUser.FieldByName('GName').AsString;
vRGroup.Desc := qrUser.FieldByName('GDescription').AsString;
vRGroup.Popedom := Trim(qrUser.FieldByName('GroupPopedom').AsString);
vRGroup.Popedom := TCommFun.DencryptStr(vRGroup.Popedom, vRGroup.Name);
vGNode := tvUser.Items.AddChildObject(vDNode, vRGroup.Name, vRGroup);
vGNode.SelectedIndex := 1;
vGNode.ImageIndex := 1;
vGRec := vRGroup.RecID;
end;
//增加用户节点
vRUser := New(PrUser);
vRUser.RecID := qrUser.FieldByName('URecID').AsInteger;
vRUser.UserID := qrUser.FieldByName('UserID').AsString;
vRUser.DeptID := qrUser.FieldByName('DepartmentID').AsString;
vRUser.GroupID := qrUser.FieldByName('GroupID').AsString;
vRUser.Name := qrUser.FieldByName('OName').AsString;
vRUser.Pwd := TCommFun.DencryptStr(qrUser.FieldByName('OPassword').AsString, vRUser.Name);
vRUser.Popedom := Trim(qrUser.FieldByName('UserPopedom').AsString);
vRUser.Popedom := TCommFun.DencryptStr(vRUser.Popedom, vRuser.Name);
vRUser.CreateTime := qrUser.FieldByName('CreateTime').AsString;
vRUser.ModifiedTime := qrUser.FieldByName('ModifyTime').AsString; vUNode := tvUser.Items.AddChildObject(vGNode, vRUser.Name, vRUser);
vUNode.SelectedIndex := 2;
vUNode.ImageIndex := 2;
qrUser.Next;
end;
以后有帖,还是麻烦你跟进哦 。。下次补分给你