注册 登录
编程论坛 PowerBuilder

为什么游标会这样,还是PB的原因

zjk_xzh 发布于 2006-04-10 20:01, 1312 次点击

我自己做了个销售图书的软件,用的数据库为sql server2000 sp3a,里面用到了一个游标,
DECLARE cp_cur CURSOR FOR
SELECT book_sale.book_shuliang, book_sale.book_isbn FROM book_sale WHERE book_sale.sale_lsh = :ls_book_lsh;
open cp_cur;
fetch cp_cur into:ld_book_shuliang,:ls_book_isbn;
do while sqlca.sqlcode = 0
SELECT book_ck.book_shuliang INTO :ld_shuliang FROM book_ck WHERE book_ck.book_isbn = :ls_book_isbn ;
ld_zong = ld_shuliang - ld_book_shuliang
UPDATE book_ck SET book_shuliang = :ld_zong WHERE book_ck.book_isbn = :ls_book_isbn ;
fetch cp_cur into :ld_book_shuliang,:ls_book_isbn;
loop
close cp_cur;
现在出现了问题,为什么第一次循环时ld_shuliang老为零,而下面的不论循环多少次就可以准确的检索出数来,在DEBUG下测试时,第一次循环ls_book_isbn也有值,相应的数据库中也有对应值,另外在sybase anywhere 下不出这种错误。请大家看一下。

5 回复
#2
ヤ順祺冄繎ヤ2006-04-11 10:01
游標沒問題,
你試著輸出ld_shuliang的值看一下!
#3
zjk_xzh2006-04-11 10:32
谢谢版主的指教,但是输出也不行啊,加了一条messagebox('',string(ld_shuliang))还是显示为零,另外在sybase上没问题,循环到第二次以后也没有问题,我用的是PB10,是不是它的问题啊。
#4
ヤ順祺冄繎ヤ2006-04-11 10:51
應該不會是PB軟件的問題吧!
我也沒遇到過這種情況,我不知道!
你在每個SQL語句之後判斷一下該SQL語句是否執行成功!
#5
zjk_xzh2006-04-11 20:12
对了,不是pb的问题,是sql的问题,提示sqlstate = s1000
[Microsoft][ODBC SQL Server Driver]连接占线导致另一个hstmt.请问怎么解决啊.很急的。
#6
zjk_xzh2006-04-11 20:54
我把游标改成这样子了,这回变成i=1时提交成功,当i>1时,ls_isbn,也能检索出来,select 时错误提示为空,也就是sqlca.sqlcaerrtext为空,真奇怪啊
for i = 1 to dw_1.rowcount( )
ls_isbn = dw_1.getitemstring( i,'book_isbn')
ld_xssl = dw_1.getitemnumber( i,'book_shuliang')
DECLARE book_cur CURSOR FOR
SELECT book_ck.book_shuliang FROM book_ck WHERE book_ck.book_isbn = :ls_isbn;
if sqlca.sqlcode = 0 then
messagebox('','成功')
else
messagebox('',SQLCA.SQLErrText)
return
end if
open book_cur;
fetch book_cur into :ld_kcsl;
ld_zong = ld_kcsl - ld_xssl
UPDATE book_ck SET book_shuliang = :ld_zong WHERE book_ck.book_isbn = :ls_isbn ;
fetch book_cur into :ld_kcsl;
end for
close book_cur;
1