回 帖 发 新 帖 刷新版面

主题:按钮的代码!

有下表内容:

  编号     序号   。。。。
            1
            1/1
            1/2
            2
            2/1
            2/2
请问我想写一个按钮的代码,功能是把编号的内容加上,现在编号是空的,但是如果序号为1或者2就不加编号,1/1。。。或者2/1.。。。。的时候就加上编号,依次类推循环。(序号的1或者2实际上是个大的号,而1/1或者2/1是小号,我只要求对小号进行编号,大号跳过而且编号是连续的),我想了很多办法都没成功,请高手指教!!

回复列表 (共16个回复)

11 楼

这样吧,因为数据表不能上传我在这里写出来
序号       编号(需要的结果)
1              
1/1        1
1/2        2  
1/3        3
1/4        4
1/5        5 
2          6
3          7 
4          8
5          9
6
6/1        10
6/2        11 
6/3        12
6/4        13
6/5        14
6/6        15 
7          16
8          17
9          18
10         19
11         20 
12       
12/1
12/1-1     21  
12/1-2     22
12/1-3     23  
12/2
12/3       24
12/4       25 
13         26
14         27
15         28
16         29
17         30 
n          n 

以上出现3种情况都是我要涉及到得,分别是序号1.序号6.序号12和序号12/1,这4个序号都是下面有小号的情况,所以要跳过,不编号或者为0

12 楼

序号12/2的编号应该是24,写错了,后面的都+上1。
再说下规律其中序号1/1.。。。1/5是序号1的小号,所有序号1为大号要跳过
序号6/1.。。。6/6是序号6的小号,所有序号6为大号要跳过
序号12/1-1.。。。12/1-3是序号12/1的小号,所有序号12/1为大号要跳过
序号12/2.。。。12/3是序号12的小号,所有序号12为大号要跳过

现在我说的清楚吗,请老师指点!

顺便再问下,在报表中为什么细节部分不能显示数据表中的关联字段(时间和页数能显示),但是在报表其他地方又能显示呢??

13 楼

楼主的数据实际上类似与树状结构,还可以用TreeView控件直观显示出来,问题的实质是如何筛选出所有最终的子节点。
    本人近期正在研究BOM物料清单(Bill of Material)的展开算法,其中遇到与楼主类似的问题。

代码如下,经测试成功:

*筛选出需要编号的数据,并生成临时表
SELECT 序号 FROM test ;
WHERE IIF(OCCURS("/",序号)=0,ALLTRIM(序号)+"/",ALLTRIM(序号)+"-") NOT IN ;
(SELECT 序号 FROM test)  INTO CURSOR tempCursor

*更新编号字段
SCAN 
   UPDATE test SET test.编号=RECNO("tempCursor") WHERE test.序号=tempCursor.序号
ENDSCAN 

注意:
1、将以上“test”改为你自己数据表名称,并注意字段名称
2、以上代码使用了子查询,可查阅相关资料

14 楼

再看是这样吗:
n=1
GO top 
DO while .t.
    REPLACE 编号 with n
    storStr=ALLTRIM(序号)
    IF EOF()
        EXIT 
    ELSE 
        SKIP
    ENDIF 
    n=n+1
    IF LEFT(ALLTRIM(序号),AT("/",ALLTRIM(序号))-1)=storStr
        SKIP -1
        n=n-1
        REPLACE 编号 with 0
        SKIP
    ENDIF 
        
ENDDO

15 楼

很高兴qjbzjp老师能继续指点,你写的代码我试验过了,能解决我前2中情况的问题,但是第3种问题还没有结局,我自己也试着做了下,都没成功,希望qjbzjp老师能继续指点。
 

序号12/1-1.。。。12/1-3是序号12/1的小号,所有序号12/1为大号要跳过 


IF LEFT(ALLTRIM(序号),AT("/",ALLTRIM(序号))-1)=storStr  这句看的不是很明白,但大致意思还是明白,请老师讲解下。

16 楼

把IF LEFT(ALLTRIM(序号),AT("/",ALLTRIM(序号))-1)=storStr 改成:
    IF LEFT(ALLTRIM(序号),AT("/",ALLTRIM(序号))-1)=storStr.or.LEFT(ALLTRIM(序号),AT("-",ALLTRIM(序号))-1)=storStr

我来回复

您尚未登录,请登录后再回复。点此登录或注册