星期天休息没上网,谢谢icevi(按钮工厂)热心回答。
可是,我的库与icevi(按钮工厂)的基本差不多,但是这种有个麻烦,我在实现插入和删除时会有问题,我无法解决。
插入时:如果插入一条项目,就必须更改其后项目的序号,而若有的有子项的话,则会找不到其父项。
删除时:比如项目级长为2时(01-99),删除后若不更新后续项目序号的话,会导致可新添项目越来越少,若更新的话也会出现插入时的问题。

解决方案 »

  1.   

    你可以采用以下方案,引入父级工程编号字段,如下所示:
    工程编号 父级工程编号 年度  月份  类型编号  计划数 完成数
    工程编号用于唯一确定该项,而父级工程编号则用于寻找其父级项
    另外,如果存在多层问题,可以通过使用特定的工程编号来解决,如:
    工程编号   父级工程编号
    1          0                第一层                     
    11         1                第二层
    12         1                第二层 
    121        12               第三层
    2          0                第一层
    21         2                第二层
    那么项目1的所有子项查询条件为:
    设当前工程编号为current_id,
    where 工程编号=substr(工程编号,1,length(current_id))
    根据以上条件即可汇总当前项的概算值
      

  2.   

    上述条件应加上
    and length(工程编号)>length(current_id)
      

  3.   

    1:"插入时:如果插入一条项目,就必须更改其后项目的序号,而若有的有子项的话,则会找不到其父项。"是什么意思?
    你的工程项目编号应该是有规则的吧,比如A0001,A0002。这之类的,不设及到新增加项目会需要修改以前项目的序号吧?若你的系统这样处理项目编号,是很不好的。一般一个工程项目立项时设定的工程编号,以后一般都不允许再改的,不可能新加一个项目,以前的序号全部重整一次,系统开销大,数据不好管理,真的不合理。若你的系统中一定要这样,也不是不行,比如一个项目的序号被修改了,将其子项的“上级项目编号 ”也更新为新的编号就可以了。我建议你可以加一个无意义的ID号(自动增加):
    工程定义表:
    工程ID号 工程编号 名称描述 是否有下级项目 上级项目ID号  。概算类型表:
    类型编号 类型描述 工程概算数据表:
    工程ID号 年度  月份  类型编号  计划数 完成数这样工程编号的更改维护起来就简单了,子项目与上级项目是通过ID号来联系的,不会受影响。2:“删除时:比如项目级长为2时(01-99),删除后若不更新后续项目序号的话,会导致可新添项目越来越少,若更新的话也会出现插入时的问题。 ”:
    这倒是一个要注意的问题,不过我想告诉你,按上面的表结构,你不需要按级长来判断一个项目是第几级及是否有下级项目。因为表中已经有字段来区别的。若你一定要在工程编号上来区分的话,建议不要用编号长度来区分,你可以参考一下某软件中科目代码的定义,级次是用“.”来区分的。比如一级科目“1001”“1002”,二级科目“1001.01”“1001.02”“1002.101”“1002.02”,这样,级次与长度无关,更灵活些。希望你能明白:)
      

  4.   

    icevi(按钮工厂)真是高人, 我想我的问题可以解决了, 再多问一句,级次用“.”来区分时顺序会乱吗?