回 帖 发 新 帖 刷新版面

主题:求助关于自动填充的问题。

各位大侠帮帮忙。我这儿有两个表,如下:

呵呵,俺的脑子都让这个弄的快成浆糊了,乱啊。再重新描述一下:

如下:

B表                             A表

产品名称    包装种类          产品名称    包装种类    产品包装编号
佳能            07                 佳能    01          佳能01
佳能            09                 佳能    03          佳能03
奥林巴斯        05                 佳能    05          佳能05
奥林巴斯        07                 尼康    01          尼康01
索尼            09                 尼康    03          尼康03
                                   索尼    01          索尼01
                                   索尼    03          索尼03
                                   索尼    05          索尼05
                                   索尼    07          索尼07
                               奥林巴斯    01          奥林巴斯01
                               奥林巴斯    03          奥林巴斯03
            
A表是一个不断更新的数据库,里面的产品很多。产品包装编号=产品名称+包装种类。

B表是从销售数据中挑出来的本月厂家新推出的产品的新包装。本月只有几个厂家的产品有新包装。

现在我想把各产品的新包装,依次给编号,如佳能原来的包装编号是:01,03,05,后一个编号比前一个编号大2。现在的两个新包装应该顺次给07,09。

我现在想要编一个能够把新的包装编号自动添加到B表的包装种类这一列中的程序。
不知道能不能实现?            

回复列表 (共6个回复)

沙发


[em1],大侠们帮帮忙吧!多谢多谢啦!

板凳

如果只是提取A表的最大产品编号加2放到B表中,下列代码可供楼主参考:
USE A表 in 0
USE B表 in 0
SET SAFETY off
ZAP in B表
SELECT A表
INDEX ON 产品包装号 to a
n_bak=ALLTRIM(产品包装号)
FOR i = 1 to RECCOUNT()
    GO i
      IF LEFT(ALLTRIM(产品包装号),3)<>LEFT(n_bak,3)
          APPEND BLANK in B表
          REPLACE 产品 with LEFT(n_bak,3),;
          包装种类 with PADL(ALLTRIM(STR(VAL(RIGHT(n_bak,2))+2)),2,"0") in B表
      ENDIF 
    n_bak=ALLTRIM(产品包装号)
NEXT
          APPEND BLANK in B表
          REPLACE 产品 with LEFT(n_bak,3),;
          包装种类 with PADL(ALLTRIM(STR(VAL(RIGHT(n_bak,2))+2)),2,"0") in B表
SELECT B表
BROWSE

3 楼

[em2],多谢qjbzjp的无私帮助,程序我试了一下,在B表中总是能产生一行空的记录,包装种类对应的是02,不知道是什么原因?
还有一点可能我没有说清楚,A表是一个很大的数据库,里面有很多产品。而B表中是最近遇到的产品的新包装种类,有可能比A表中的产品要少。而且同一产品可能有两个或两个以上的新包装,不知道还有没有更好的办法呢?
拜托大家帮帮我吧,谢谢啦,呵呵。

如下:


A表                                  B表

产品包装编号(字符型)       产品(字符型)  包装种类(字符型)      
ACD01                        ACD                09
ACD03                        ACD                11               
ACD05                        XWY                11 
ACD07                        XWY                13
XWY01                        XWY                15 
XWY03                        BBB                09
XWY05                        
XWY07                         
XWY09                        
BBB01                        
BBB03
BBB05
BBB07
CCC01
CCC03
DDD01
DDD03
[em4][em4][em4][em4][em4][em12][em12][em4][em4][em4][em4]

4 楼

[quote]在B表中总是能产生一行空的记录,包装种类对应的是02,不知道是什么原因?
[/quote]
是A表中有空记录造成的,删除A表中的空记录就好了。

其它问题,……没理解楼主的要求,A表中什么产品不放到B表中,怎样判断“新包装”……

5 楼

呵呵,俺的脑子都让这个弄的快成浆糊了,乱啊。再重新描述一下:

如下:

B表                             A表

产品名称    包装种类          产品名称    包装种类    产品包装编号
佳能            07                 佳能    01          佳能01
佳能            09                 佳能    03          佳能03
奥林巴斯        05                 佳能    05          佳能05
奥林巴斯        07                 尼康    01          尼康01
索尼            09                 尼康    03          尼康03
                                   索尼    01          索尼01
                                   索尼    03          索尼03
                                   索尼    05          索尼05
                                   索尼    07          索尼07
                               奥林巴斯    01          奥林巴斯01
                               奥林巴斯    03          奥林巴斯03
            
A表是一个不断更新的数据库,里面的产品很多。产品包装编号=产品名称+包装种类。

B表是从销售数据中挑出来的本月厂家新推出的产品的新包装。本月只有几个厂家的产品有新包装。

现在我想把各产品的新包装,依次给编号,如佳能原来的包装编号是:01,03,05,后一个编号比前一个编号大2。现在的两个新包装应该顺次给07,09。

我现在想要编一个能够把新的包装编号自动添加到B表的包装种类这一列中的程序。
不知道能不能实现?            

6 楼

如果B表中已有新包装的“产品名称”,只将“包装种类”加2填入:
USE a表 in 0
USE b表 in 0
SELECT a表
INDEX ON 产品包装编号 to a
n_1=""
n_2=""
n_3=""
FOR i = 1 to RECCOUNT("b表")
    foundkg=.f.
    GO i in b表
    LOCATE for ALLTRIM(a表.产品名称)==ALLTRIM(b表.产品名称)
    foundkg=FOUND()
    DO while !EOF()
        n_1=ALLTRIM(a表.产品名称)
        n_2=ALLTRIM(a表.包装种类)
        IF foundkg
            CONTINUE 
            foundkg=FOUND()
        ENDIF 
        IF !foundkg
            IF n_3=n_1
                REPLACE b表.包装种类 with PADL(ALLTRIM(STR(VAL(n_2)+n)),2,"0") in b表
                n=n+2
            ELSE 
                n=2
                REPLACE b表.包装种类 with PADL(ALLTRIM(STR(VAL(CHRTRAN(n_2,CHRTRAN(n_2,"0123456789",""),""))+2)),2,"0") in b表
                n_3=n_1
                n=n+2
            ENDIF 
            EXIT 
        ENDIF 
    ENDDO 
NEXT

我来回复

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