祝愿大家身体健康!

 站点注册  找回密码
 站点注册

QQ登录

只需一步,快速开始

查看: 5905|回复: 9

[PB9.X以前] 求助关于如何得到最后记录的内容,并加其加1

[复制链接]

[PB9.X以前] 求助关于如何得到最后记录的内容,并加其加1

[复制链接]
bigfrog

主题

0

回帖

2179

积分

金牌会员

积分
2179
贡献
在线时间
小时
2015-3-17 21:51:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?站点注册

×
不好意思,又来提问题了我的目的是在输入新的编号的时候,得到原来最末尾的编号再加一


这里是主要还是我的编号是由英文和字母构成,是字符型
比如我现在表内最后的编号是HF1256

我用 select max(客户编号) into:c_number from customer;
得到的数据是HF999,并不是跳转到最末尾的值,而且好像也不能将字符型直接+1

这里主要有2个疑问
怎么跳转到末尾记录
第二,怎么将字符记录加1?



共享共进共赢Sharing And Win-win Results
SYBASEBBS - 免责申明1、欢迎访问“SYBASEBBS.COM”,本文内容及相关资源来源于网络,版权归版权方所有!本站原创内容版权归本站所有,请勿转载!
2、本文内容仅代表作者观点,不代表本站立场,作者自负,本站资源仅供学习研究,请勿非法使用,否则后果自负!请下载后24小时内删除!
3、本文内容,包括但不限于源码、文字、图片等,仅供参考。本站不对其安全性,正确性等作出保证。但本站会尽量审核会员发表的内容。
4、如本帖侵犯到任何版权问题,请立即告知本站 ,本站将及时删除并致以最深的歉意!客服邮箱:admin@sybasebbs.com
ehxz

主题

0

回帖

57万

积分

管理员

积分
570724
贡献
在线时间
小时
2015-3-18 00:29:08 | 显示全部楼层
首先楼主的这种记录模式不是很好。最好标准化如HF0000999在记录前保留足够的位数,以方便处理,这样,在加的时候就省事了。

如果使用楼主的模式,可以测试一下:
select max(substr(客户编号,3,20)) into:c_number :i_number from customer ;
c_number = "HF" + c_number
测试一下看
共享共进共赢Sharing And Win-win Results
dusj

主题

0

回帖

312

积分

高级会员

积分
312
贡献
在线时间
小时
2015-3-18 16:30:52 | 显示全部楼层
HF1256和HF999这样的数据同时存在了确实是悲剧,截取掉前面的两个字母得到纯数字部分咯,不过你这样排序还是乱的。参考楼上意见在数字前面补足0。
共享共进共赢Sharing And Win-win Results
ehxz

主题

0

回帖

57万

积分

管理员

积分
570724
贡献
在线时间
小时
2015-3-18 18:31:48 | 显示全部楼层
有时候一个好的数据设计,可以避免一些“垃圾”代码
共享共进共赢Sharing And Win-win Results
bigfrog 楼主

主题

0

回帖

2179

积分

金牌会员

积分
2179
贡献
在线时间
小时
2015-3-19 20:39:35 | 显示全部楼层
ehxz 发表于 2015-3-18 00:29
首先楼主的这种记录模式不是很好。最好标准化如HF0000999在记录前保留足够的位数,以方便处理,这样,在加 ...

真奇怪
select max(substr(客户编号,3,20)) into:i_number from customer ;
c_number="HF"+string(i_number)

还是返回HF999

我也想改啊
主要是几个表涉及的数据太多
现在改工程量太大了

共享共进共赢Sharing And Win-win Results
bigfrog 楼主

主题

0

回帖

2179

积分

金牌会员

积分
2179
贡献
在线时间
小时
2015-3-19 22:52:25 | 显示全部楼层
研究出来了
用游标可以解决这个问题
declare c_n cursor for select "客户编号" from customer;
open c_n;
do While SQLCA.SqlCode = 0
fetch c_n into :c_number;

loop
close c_n;

c_bh="HF"+string(integer(right(c_number,4))+1)
dw_1.setitem(dw_1.rowcount(),"客户编号",c_bh)

不过这里对于客户编号的长度应该进行判断
如果是5位数,就取后面3位,6位就取后面4位,或者更多位数的延伸?这里要怎么写判断语句?

共享共进共赢Sharing And Win-win Results
bigfrog 楼主

主题

0

回帖

2179

积分

金牌会员

积分
2179
贡献
在线时间
小时
2015-4-2 20:39:40 | 显示全部楼层
关于用游标得到最后记录的问题,还是有问题
AHA输入的数据老是出现不按编号排列的情况
比如新的编号是HF1666,输入后最后一条记录还是HF1665,我用PB打开表,HF1666跑到其他地方去了
真是一个很奇怪的事情
不知道有其他方法解决不?
共享共进共赢Sharing And Win-win Results
bigfrog 楼主

主题

0

回帖

2179

积分

金牌会员

积分
2179
贡献
在线时间
小时
2015-4-3 20:54:57 | 显示全部楼层
有想出一种方法
long ll_count
select count(*) into :ll_count from customer ; //获得数据总额
c_bh="HF"+string(ll_count+1)  //将数据+1前面+HF
dw_1.setitem(dw_1.rowcount(),"客户编号",c_bh)
不过这种方法只适用于产生的编号和我一样只递增,永远不删除记录的情况
希望能抛砖引玉
共享共进共赢Sharing And Win-win Results
您需要登录后才可以回帖 登录 | 站点注册

本版积分规则

免责声明:
本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Admin@SybaseBbs.com

QQ|Archiver|PowerBuilder(PB)BBS社区 ( 鲁ICP备2021027222号-1 )

GMT+8, 2024-4-26 01:43 , Processed in 0.337152 second(s), 15 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表