譬如说我现在已经用treeview成了一颗关于地区的树,树型结构如下:所有地区 中国
浙江省
广东省
江苏省
安徽省
杭州
萧山区
余杭区
临安区
桐庐县
现在我要解决在成这样的树的时候,自动给地区编码存入数据库,例如中国就自动编码为1.,下挂的浙江省编为1.1.,广东省编为1.2.,类似的杭州编为2.,萧山区编为2.1.,余杭区编为2.2.,以次类推,相信我的意思大家都明白了吧。
我现在这颗树已经可以生成了,但是自动给它们赋编码还没有实现,当然在界面录入的时候自动填上去,然后代码里加上个order by 就可以实现了,但是始终违背了我的初衷,这个编码不能自己填,要自动生成,我心里有点想法,但是组织不起来,希望借CSDN把这个问题给解决了,解决的我送高分,提出好的建议和意见的我也酌情给分,关键是要快点,我已经被他烦了一个星期了,都是半途而废,最好能有赋上代码,谢谢。
浙江省
广东省
江苏省
安徽省
杭州
萧山区
余杭区
临安区
桐庐县
现在我要解决在成这样的树的时候,自动给地区编码存入数据库,例如中国就自动编码为1.,下挂的浙江省编为1.1.,广东省编为1.2.,类似的杭州编为2.,萧山区编为2.1.,余杭区编为2.2.,以次类推,相信我的意思大家都明白了吧。
我现在这颗树已经可以生成了,但是自动给它们赋编码还没有实现,当然在界面录入的时候自动填上去,然后代码里加上个order by 就可以实现了,但是始终违背了我的初衷,这个编码不能自己填,要自动生成,我心里有点想法,但是组织不起来,希望借CSDN把这个问题给解决了,解决的我送高分,提出好的建议和意见的我也酌情给分,关键是要快点,我已经被他烦了一个星期了,都是半途而废,最好能有赋上代码,谢谢。
解决方案 »
- 急!帮看一个错误!!!!!!!!!!!!!!!!!!!!!!!!!!!
- tchart问题?
- 求源码,在线等
- TServerSocket与TClientSocket的问题?高手啊
- Delphi ListView控件标题怎么画图??????????
- 日期类型字段处理问题:只要年、月部分,怎么解决?
- 别人写的一个组件,现在是一个PAS文件,请问怎样把朋友这组件安装进我的DELPHI中去
- 菜鸟级问题,送分!!
- 有没有谁有P2P的例程,或者资料,谢谢
- 如何去掉datetime中的符号(如/:等)
- TTable的Filter属性设置问题,在SQL查询器下可以返回行,在程序中不行,救救我啊?!
- listview中增加记录,怎么总是写在第一条上?
再主瓣清楚点,你在程序加一个字段为INT记录,当前数据的相同的父ID数据是否>1一条如果>1
那么你就要找出当前数据的相同的父ID+max(自动+1 ID)在其加入的int字段+1
update set 自动编码 = 上一层父ID的自动编码+.int字段+1, int字段 = int字段+1
这样你应该有些思路了吧?
想看看其他人什么个思路,最好语句连贯些,哈哈,我语文学的不好啊。。
数据结构:id,iparent,text,...
主要控件:TADOTable
TTreeView
自定义对象:NodeData--TTreeView节点对象的数据:id,iparent
编程要点:根据父节点,递归查询旗下所有子节点,并插入TreeView,写入NodeData
有很多种实现方法,并且列表可以自动装入
可以把STATE INDEX属性指定为你要的编码值,也可以用1stClass中的fcDBTreeView来实现
采用的是oracle数据库,我组长建的表结构是这样的:
列名 数据类型 允许空 默认值 备注
YEAR Number(4) 年度
EID Varchar2(42) 单位编码
ID1 Number(6) √ 0 一级单位编码
ID2 Number(6) √ 0 二级单位编码
ID3 Number(6) √ 0 三级单位编码
ID4 Number(6) √ 0 四级单位编码
ID5 Number(6) √ 0 五级单位编码
ID6 Number(6) √ 0 六级单位编码
NAME Varchar2(60) √ '' 名称
CODE Varchar2()60 √ '' 简码(如汉语拼音首字母等)
Dorder Number(6) √ 单位显示顺序
isleaf Number(60) √ 1 0为非底级单位,1为底级单位
PEID Varchar2(42)√ 父级单位编码
比如:中国
上海
江苏
广东
你想如何排列,是上海排先,还是广东排先。我看了你的表字段,根本不用加入下列的字段
ID1 Number(6) √ 0 一级单位编码
ID2 Number(6) √ 0 二级单位编码
ID3 Number(6) √ 0 三级单位编码
ID4 Number(6) √ 0 四级单位编码
ID5 Number(6) √ 0 五级单位编码
ID6 Number(6) √ 0 六级单位编码
用增长字段f_item(唯一)来代表一个地方,用F_pitem来代表其父字段ITEM号。然后在程序中用order by f_pitem,f_item就行了。如果你真的想在程序中加入代码(分长代码和短代码),也是可以的。最好是在数据库中新增字段f_shortcode,f_longcode,这样就灵活多了
http://www.hz0752.com/UploadFile/2005-5/200552415463927.jpg
http://www.hz0752.com/UploadFile/2005-5/2005524155546821.jpg
Query.FieldByName('F_Content').AsString+'(长代码:'+
Query.FieldByName('F_Longcode').AsString+')', query.GetBook)图例:http://www.hz0752.com/UploadFile/2005-5/2005524155546821.jpg
编码一定要自动生成的。最近有点忙,没空解决这个问题,大家积极发言啊,我都一一在试了,唉,没好好学编程啊。。如果你有这方面的资料也可以传给我看看的,我的QQ29216551,MSN:[email protected],聊什么都可以,人生,事业,工作,情感,积极向上的就行,谢谢。
中国
上海
四川
北京
海淀
朝阳
美国
加州
佛罗里达------------------
中国:1
上海:1.0
四川:1.1
北京:1.2
海淀:1.2.0
朝阳:1.2.1
美国:2
加州:2.0
佛罗里达:2.1
----------------}
procedure TForm1.GenTreeCode(TreeNode:TTreeNode;Code:string);
var i:integer;
s:string;
cCode:string;
begin
s:=format('%s:%s',[TreeNode.Text,Code]);
memo1.Lines.Add(s);
for i:=0 to TreeNode.Count-1 do
begin
cCode:=format('%s.%d',[Code,i]);
GenTreeCode(TreeNode.item[i],cCode);
end;
if TreeNode.Parent=nil then
if TreeNode.getNextSibling<>nil then
GenTreeCode(TreeNode.getNextSibling,Inttostr(StrToInt(Code)+1));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
GenTreeCode(Treeview1.TopItem,'1');
treeview1.SaveToFile('c:\aa.txt');
end;
FOR insert
AS
declare @maxint int,@longcode varchar(20),@fatherid int,@caption varchar(30),@para varchar(20)
select @maxint=max(f_item) from T_baseinfo
update a set a.f_item =@maxint+1 from T_baseinfo a ,inserted i
where a.f_interid=i.f_interid表的图例如下
http://www.hz0752.com/UploadFile/2005-5/200553020827281.jpg再多的你自己想一想吧。其实都很简单
打个比方:我在界面中录入中国,程序执行后自动给它赋编码,比如说是1.
然后在中国下级有浙江,浙江自动编为1.1.,存放在数据库中,字段为AID
我一共给出了三级编码,ID1,ID2,ID3,像刚才的中国,ID1=1,ID2=0,ID3=0,
像浙江,ID1=1,ID2=1,ID3=0,类推,也就是查询数据库得到以下:
NAME AID ID1 ID2 ID3
中国 1. 1 0 0
浙江 1.1. 1 1 0
我已经将例表数据放在网上了。你自己看吧。http://www.hz0752.com/UploadFile/2005-5/200553020827281.jpgQQ:33877204