| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2069 人关注过本帖
标题:关于自动编号的问题?
只看楼主 加入收藏
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:5 
VFP中字符串比较,是根据其每个字符的ASC()返回值决定的
如:"078"->"0100"
            左边 关系 右边
第一个字符   0    =    0
第二个字符   7    >    0  
上述字符串比较到第二个字符时(比较到第N个字符不同),就能看出两边的字符的大小了,到此也就决出了胜负,所以"078">"0100"。
从上传的第二个表中可以看出,序号的最大值为[078],而不是[0101]。
为什么TONGDENG版主和我反复强调,让提问题的朋友上传原始文件,而不让其上传虚拟文件,因为只有通过原始文件才能看到存在的问题。希望大家引以为戒。

坚守VFP最后的阵地
2014-08-09 21:10
caolp
Rank: 1
等 级:新手上路
帖 子:160
专家分:5
注 册:2014-7-12
收藏
得分:0 
以下是引用sdta在2014-8-9 21:10:05的发言:

VFP中字符串比较,是根据其每个字符的ASC()返回值决定的
如:"078"->"0100"
            左边 关系 右边
第一个字符   0    =    0
第二个字符   7    >    0   
上述字符串比较到第二个字符时(比较到第N个字符不同),就能看出两边的字符的大小了,到此也就决出了胜负,所以"078">"0100"。
从上传的第二个表中可以看出,序号的最大值为[078],而不是[0101]。
为什么TONGDENG版主和我反复强调,让提问题的朋友上传原始文件,而不让其上传虚拟文件,因为只有通过原始文件才能看到存在的问题。希望大家引以为戒。
在此也感谢sdta老师的热心帮助!
2014-08-09 23:07
caolp
Rank: 1
等 级:新手上路
帖 子:160
专家分:5
注 册:2014-7-12
收藏
得分:0 
以下是引用tlliqi在2014-8-9 20:42:01的发言:

一句即可
先把“序号”宽度设为5
UPDATE 居民信息 SET 序号=PADL(ALLT(STR(recno())),5,'0')
    根据tlliqi老师的一句代码,实现了自动编号。但后来发现自动编号把以前的原有序号打乱了,又重新编上了新号。我的意思是原来序号不变,随着新增记录的逐条增加,序号也相应增大。是否需要增加条件判断语句,怎样增加,还请老师指点,新增序号最好也在表单文本框中显示,如:thisform.txt序号.value=序号。
2014-08-10 01:24
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
多动动脑筋啊

坚守VFP最后的阵地
2014-08-10 01:37
caolp
Rank: 1
等 级:新手上路
帖 子:160
专家分:5
注 册:2014-7-12
收藏
得分:0 
SELECT MAX(序号) FROM 居民信息 INTO ARRA A
IF 序号=A(1)
序号=PADL(ALLT(STR(recno())),6,'0')
repl 序号 with 序号+1
thisform.txt序号.value=序号
endif
以上代码不知错在哪?
2014-08-10 02:12
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
SELECT MAX(序号) AS XH FROM 居民信息 INTO ARRA A
IF VARTYPE(A)=="O"
   XH=PADL(INT(VAL(XH))+1,5,"0")
   REPLACE 序号 WITH XH
   thisform.txt序号.value=XH
ENDIF

坚守VFP最后的阵地
2014-08-10 02:32
caolp
Rank: 1
等 级:新手上路
帖 子:160
专家分:5
注 册:2014-7-12
收藏
得分:0 
以下是引用sdta在2014-8-10 02:32:58的发言:

SELECT MAX(序号) AS XH FROM 居民信息 INTO ARRA A
IF VARTYPE(A)=="O"
   XH=PADL(INT(VAL(XH))+1,5,"0")
   REPLACE 序号 WITH XH
   thisform.txt序号.value=XH
ENDIF
运行老师的这段代码,序号字段里成了空白,不知什么原因?
2014-08-10 03:24
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
帖上你的全部代码

坚守VFP最后的阵地
2014-08-10 04:01
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
以下是引用tlliqi在2014-8-9 20:42:01的发言:

一句即可
先把“序号”宽度设为5
UPDATE 居民信息 SET 序号=PADL(ALLT(STR(recno())),5,'0')

如果删除了其中有的记录,这条语句将会重新编号,后面的记录将会与原来的编号不同。

[ 本帖最后由 hu9jj 于 2014-8-10 07:14 编辑 ]

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2014-08-10 06:56
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
收藏
得分:0 
个人体会仅供参考。此问题看起来很容易,但是确保不出问题是有难度的。单机版好说一点,多机共享模式难度较大。比如:一次性编号后此编号不再变动时,人为删除其中一条编号,再继续编号的时候,删除的需要继续再用。意外的重号,如何自动修正。多人共同编号时,如何保证编号绝对唯一。后者却是经常用到的。比如:超市卖货,要求多机开票,但是,某个售货区的单据号必须从整体上,按照当天时间再加上一个同一的顺序号。 这如何解决
  ...抱歉!有事暂止。如果楼主需要,有空待续..
2014-08-10 21:30
快速回复:关于自动编号的问题?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034557 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved