没有查询到记录为何SQLCA.SQLCODE=100?

jzbest 2009-08-03 04:12:54
select A.ID,A,XM,B.DW FROM A ,B WHERE A.ID=B.XMID AND B.ID>100;
CONNECT;
DECLARE MY_CUR dynamic CURSOR FOR SQLSA;
PREPARE SQLSA FROM :SQLSTR;
DESCRIBE SQLSA INTO SQLDA;
open dynamic my_cur USING DESCRIPTOR SQLDA;
//若查询失败
IF SQLCA.SQLCODE<0 THEN
RETURN ''
END IF

IF SQLCA.SQLCODE=100 THEN
RETURN '100'
ELSE
RETURN 'ABC'
END IF
————————————————————————————————————

现在查询结果为空(用“select count(*) FROM A ,B WHERE A.ID=B.XMID AND B.ID>100;”,显示count(*)值为“0”)。但是,返回值却是“100”。

为什么呢?

是不是我执行了两遍“SQLCA.SQLCODE”的缘故呢?
...全文
1176 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sun1976 2009-08-20
  • 打赏
  • 举报
回复
少瞎扯了,select A.ID,A,XM,B.DW FROM A ,B WHERE A.ID=B.XMID AND B.ID>100;
你的程序里有这个语句吗?有这个语句你根本就不能保存
语法都不对,在这蒙谁呢?
jzbest 2009-08-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sun1976 的回复:]
不fetch其实没有执行select呢
你就直接fetch,
然后判断sqlca.sqlcode,在100那个分支写 (执行其他语句)

[/Quote]

  这个解释貌似有道理。但是,程序运行这个语句后:select A.ID,A,XM,B.DW FROM A ,B WHERE A.ID=B.XMID AND B.ID>100; 实际上并没有执行SQL查询吗?

  那么要是语句改为:select count(A.ID) FROM A ,B WHERE A.ID=B.XMID AND B.ID>100;
执行到这个语句后,也是没有执行SQL吗?



希望能够听到更进一步的解答。

jzbest 2009-08-04
  • 打赏
  • 举报
回复
  1、在下代码中第一行应当为:

  SQLSTR ='select A.ID,A,XM,B.DW FROM A ,B WHERE A.ID=B.XMID AND B.ID>100' 。

  2、在下想先判断是否查询出数据,若有,则fetch,否则,执行其他语句……

  衷心感谢各位网友鼎力支持!!
sun1976 2009-08-04
  • 打赏
  • 举报
回复
可以在=0的分支做个变量累加,在100那个分支判断这个变量有没有增加
有就是执行到最后了
没有增加就是没数据,走你那个执行其他语句
sun1976 2009-08-04
  • 打赏
  • 举报
回复
不fetch其实没有执行select呢
你就直接fetch,
然后判断sqlca.sqlcode,在100那个分支写 (执行其他语句)
sun1976 2009-08-03
  • 打赏
  • 举报
回复
你只是open?不fetch?
zhanghua_1228 2009-08-03
  • 打赏
  • 举报
回复
。。。。
那就对了么,sqlca.sqlcode = 0 你不是反回'ABC'么
sun1976 2009-08-03
  • 打赏
  • 举报
回复
SQLSTR是什么?

select A.ID,A,XM,B.DW FROM A ,B WHERE A.ID=B.XMID AND B.ID>100;
CONNECT;

为什么这里有个connect?select A.ID,A,XM,B.DW FROM A ,B WHERE A.ID=B.XMID AND B.ID>100; 没有连接数据库吗?先连库后执行sql
DECLARE MY_CUR dynamic CURSOR FOR SQLSA;
PREPARE SQLSA FROM :SQLSTR;
DESCRIBE SQLSA INTO SQLDA;
messagebox('',SQLSTR)//看看你实际用的sql,贴出来
open dynamic my_cur USING DESCRIPTOR SQLDA;
//若查询失败
IF SQLCA.SQLCODE <0 THEN
RETURN ''
END IF

IF SQLCA.SQLCODE=100 THEN
RETURN '100'
ELSE
RETURN 'ABC'
END IF
jzbest 2009-08-03
  • 打赏
  • 举报
回复

楼主更正!!

因本人不慎,问题表述出现重大失误,特此更正:

现在查询结果为空(用“select count(*) FROM A ,B WHERE A.ID=B.XMID AND B.ID>100;”,显示count(*)值为“0”)。但是,返回值却是“ABC”。
liubocy 2009-08-03
  • 打赏
  • 举报
回复
SqlCode:
0 Success
100 Fetched row not found
-1 Error; the statement failed. Use SQLErrText or SQLDBCode to obtain the detail.
sun1976 2009-08-03
  • 打赏
  • 举报
回复
没有查到结果sqlca.sqlcode就是100
出错了返回小于0的值
语句没错误,但是遍历所有记录已经到末尾还没有附和条件的数据就是返回100
比如你自己写个函数,输入一个整型数字参数,函数里写
if al_input<0 then
return 0
else
return al_input
end if
你是不是也要问输入了-1怎么返回0呢?

754

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧