用游标取不到数据!

我用游标在表里取一个最大顺序号(此顺序号为键码),但是取不到最大的,有时根本取不到数,不知道为什么,请大家指点!
[56 byte] By [yikesii-yikesi] at [2007-12-13]
# 1
代码贴出来
# 2
declare aaa cursor for
select zkzh
from zc_jbzk_lsb
where qxdm=:qxdm and kslbdm=:kslb and zcq=:zcq;
open aaa;
fetch aaa into :zkzhtemp;
zkzht=right(zkzhtemp,5)
do while sqlca.sqlcode=0
fetch aaa into :zkzhtemp;
zkzht1=right(zkzhtemp,5)
if zkzht1>zkzht then
zkzht=zkzht1
end if
fetch aaa into :zkzhtemp;
loop
close aaa;
n=5 - len(string(long(zkzht)))
zkzhtemp=fill("0",n)+string(long(zkzht)+1)
zkzh=qxdm+kslb+zcq+zkzhtemp
dw_1.setitem(dw_1.getrow(),"zkzh",zkzh)
yikesii-yikesi at 2007-10-27 > top of Msdn China Tech,PowerBuilder,基础类...
# 3
declare aaa cursor for
select zkzh
from zc_jbzk_lsb
where qxdm=:qxdm and kslbdm=:kslb and zcq=:zcq
order by zkzh Ase; //试试
open aaa;
fetch aaa into :zkzhtemp;
zkzht=right(zkzhtemp,5)
do while sqlca.sqlcode=0
fetch aaa into :zkzhtemp;
zkzht1=right(zkzhtemp,5)
if zkzht1>zkzht then
zkzht=zkzht1
end if
fetch aaa into :zkzhtemp;
loop
close aaa;
n=5 - len(string(long(zkzht)))
zkzhtemp=fill("0",n)+string(long(zkzht)+1)
zkzh=qxdm+kslb+zcq+zkzhtemp
dw_1.setitem(dw_1.getrow(),"zkzh",zkzh)
banalman-IT解放者 at 2007-10-27 > top of Msdn China Tech,PowerBuilder,基础类...
# 4
请试试以下的代码:

string zkzhtemp

declare aaa cursor for
select zkzh
from zc_jbzk_lsb
where qxdm=:qxdm and kslbdm=:kslb and zcq=:zcq
order by zkzh desc; //按从大到小的顺序排序,则最大的排在最前面
open aaa;
//以下三条语句对条件中的变量赋初值
qxdm = 'POB'
kslb = '200205'
zcq = '14'
if sqlca.sqlcode = 0 then
fetch aaa into :zkzhtemp;
else
messagebox('提示','打开游标时出错')
return
end if
close qqq;
if zkzhtemp = '' then
messagebox('提示','没有找到所需要的数据')
return
end if
kzht=right(zkzhtemp,5)
n=5 - len(string(long(zkzht)))
zkzhtemp=fill("0",n)+string(long(zkzht)+1)
zkzh=qxdm+kslb+zcq+zkzhtemp
dw_1.setitem(dw_1.getrow(),"zkzh",zkzh)
另外,还有一种方案,那就是把zkzh字段分为两个字段来存放在数据库的表中,一个字段是前半部分,为字符型,另一个字段为后五位数,为long型,则在处理最大号码时我觉得好处理一点。
以上只是我的一点想法,看能不能解决实际的问题
flyerlxg-飞鸟 at 2007-10-27 > top of Msdn China Tech,PowerBuilder,基础类...
# 5
注意pb中的数据类型有可能与数据库中的数据类型不匹配
常常是这样的
xiaha3-夏 at 2007-10-27 > top of Msdn China Tech,PowerBuilder,基础类...
# 6
select max(substirng(zkzh,1,5)) into :li_max
from zc_jbzk_lsb
where qxdm=:qxdm and kslbdm=:kslb and zcq=:zcq;
就这么简单,不要cursor的
programbcb-datawindow at 2007-10-27 > top of Msdn China Tech,PowerBuilder,基础类...
# 7
do while sqlca.sqlcode=0
fetch aaa into :zkzhtemp;
zkzht1=right(zkzhtemp,5)
if zkzht1>zkzht then
zkzht=zkzht1
end if
fetch aaa into :zkzhtemp;
loop
连续fetch两遍不丢值吗,还是你故意的?
另外,fetch以后一定要先判断成功与否,在进行数据处理,会有好处的,以
后你就会发现!
# 8
datawindow大侠的建议不错,语句简练。还可以用类似的语句:
select max(right(zkzh,5)) into :li_max
from zc_jbzk_lsb
where qxdm=:qxdm and kslbdm=:kslb and zcq=:zcq;
试试看
flyerlxg-飞鸟 at 2007-10-27 > top of Msdn China Tech,PowerBuilder,基础类...
# 9
好多人跟你的贴啊:)
yan_anny-anny at 2007-10-27 > top of Msdn China Tech,PowerBuilder,基础类...
# 10
结贴,我用了飞鸟的建议,解决了问题,多谢多谢!
yikesii-yikesi at 2007-10-27 > top of Msdn China Tech,PowerBuilder,基础类...