主题:求助关于自动填充的问题。
tian_2008
[专家分:0] 发布于 2009-09-16 13:51:00
各位大侠帮帮忙。我这儿有两个表,如下:
呵呵,俺的脑子都让这个弄的快成浆糊了,乱啊。再重新描述一下:
如下:
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表的包装种类这一列中的程序。
不知道能不能实现?
最后更新于:2009-09-17 16:52:00
回复列表 (共6个回复)
沙发
tian_2008 [专家分:0] 发布于 2009-09-17 10:00:00
[em1],大侠们帮帮忙吧!多谢多谢啦!
板凳
qjbzjp [专家分:8830] 发布于 2009-09-17 11:35:00
如果只是提取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 楼
tian_2008 [专家分:0] 发布于 2009-09-17 14:10:00
[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 楼
qjbzjp [专家分:8830] 发布于 2009-09-17 15:41:00
[quote]在B表中总是能产生一行空的记录,包装种类对应的是02,不知道是什么原因?
[/quote]
是A表中有空记录造成的,删除A表中的空记录就好了。
其它问题,……没理解楼主的要求,A表中什么产品不放到B表中,怎样判断“新包装”……
5 楼
tian_2008 [专家分:0] 发布于 2009-09-17 16:17:00
呵呵,俺的脑子都让这个弄的快成浆糊了,乱啊。再重新描述一下:
如下:
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 楼
qjbzjp [专家分:8830] 发布于 2009-09-18 18:12:00
如果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
我来回复