回 帖 发 新 帖 刷新版面

主题:[求助]再问自动填充的问题。

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

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

如下:

B表                             A表

产品名称    包装编号          产品名称    包装编号    产品包装编号
佳能                               佳能    01          佳能01
佳能                               佳能    03          佳能03
奥林巴斯                           佳能    05          佳能05
奥林巴斯                           尼康    01          尼康01
索尼                               尼康    03          尼康03
                                   索尼    01          索尼01
                                   索尼    03          索尼03
                                   索尼    05          索尼05
                                   索尼    07          索尼07
                               奥林巴斯    01          奥林巴斯01
                               奥林巴斯    03          奥林巴斯03
            
A表是一个不断更新的数据库,里面的产品很多。产品包装编号=产品名称+包装编号。
A表中各厂家产品的包装种类的编号依次为:01,03,05......,后一个编号比前一个编号大2。

B表是从当月销售数据中挑出来的产品的新包装。
如何才能将B表中的各厂家产品的新包装依据A表自动填充新的包装编号呢?
如,佳能本月有两个新包装,依据A表中佳能产品包装编号已编到05,本月应该给07,09。

注:A表是只读文件。



有位大侠给的程序如下:

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

 但是运行起来,有时候编号会填的准确无误,有的时候会出现错误编号的情况。不知道是怎么回事。
 还请各位大侠帮忙啊,谢谢啦!呵呵

回复列表 (共14个回复)

11 楼

钢材我用你的附件运行了,没出现你说的问题,我不想花太多的时间去看你的东西,所以只能就你发的东西和你要求的目的做一下示范,供你参考用啊.
另外你可以

*!* set step 命令
*!* 为程序调试打开跟踪窗口并挂起程序。
*!* 语法
*!* SET STEP ON
*!* 参数
将*!* SET STEP ON去掉
变成
*!* set step 命令
*!* 为程序调试打开跟踪窗口并挂起程序。
*!* 语法
   SET STEP ON
*!* 参数
打开跟踪窗口,然后一步步的逐条执行命令,查看问题的原因,我想:这才是你今后主要的解决问题的方法.

12 楼

发个附件给我,我来和你一起研究研究 langzi_net@126.com

13 楼

产品名称 mc    包装编号bh

SELECT mc,MAX(bh) as bh FROM 表a GROUP BY mc INTO CURSOR temp 
SELECT temp
go top
do while .not.eof()
 mcaa=ALLTRIM(mc)
 bhaa=ALLTRIM(bh)
 i=1
select 表b
GO TOP 
LOCATE FOR ALLTRIM(mc)==mcaa
  DO WHILE FOUND()
     repl bh with PADL(INT(VAL((bhaa)))+i*2,2,"0")
     i=i+1
     CONTINUE
  ENDDO
         
SELECT temp
skip
enddo

14 楼

呵呵,多谢各位大侠热心帮忙,问题已解决。俺这菜鸟仍需努力啊,呵呵。

我来回复

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