首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > PB >

pb中sql语句的使用解决方案

2012-02-12 
pb中sql语句的使用写法一:DELETE FROM 表1DELETE FROM 表2;IF SQLcode 1 THENROLLBACKMessageBox(,

pb中sql语句的使用
写法一:
DELETE FROM 表1;
DELETE FROM 表2;
IF SQLcode <> 1 THEN 
  ROLLBACK;
  MessageBox("","error")
  RETURN
ELSE
  COMMIT;
END IF

写法二:
DELETE FROM 表1;
IF sqlca.SQLcode <> 1 THEN 
  ROLLBACK;
  MessageBox("","error")
  RETURN
ELSE
  COMMIT;
END IF

DELETE FROM 表2;
IF sqlca.SQLcode <> 1 THEN 
  ROLLBACK;
  MessageBox("","error")
  RETURN
ELSE
  COMMIT;
END IF

写法一这样会不会有问题?写法二是没问题的。


[解决办法]
写法一这样会不会有问题?

有.

此时的
SQLcode只针对第二句
DELETE FROM 表2; 
起作用.
[解决办法]
写法一:执行后,第一个delete语句是否成功不清楚,因你判断的是第二个delete语句
写法二:你这个两个delete语句都执行了判断,但有可能只执行了其中一个delete语句

总结:sqlca.SQLcode 判断的是最近一个的SQL语句的执行情况。
如果你要两个SQL语句作为一个事务来处理的话,要写成这样的
delete from tablea;
if sqlca.sqlcode=0 then
delete from tableb;
if sqlca.sqlcode=0 then
commit;
else
rollback;
end if
 else
rollback;
end if
这样两个语句要么一起提交,要么一起回滚
[解决办法]
sqlcode 返回的是最近一次sql执行的 code值 

写法二也有点问题吧 ,如果第二个表出错了 ,第一个已经提交了 ,不满足同是提交 ,同是回滚
[解决办法]
写法一:只判断了最后一句,第一句成功没有不知道,所以不可取
写法二:第一句成功就提交了,如果第二句失败,不能实现统一回滚。需要根据需求明确是否保留第一句里的ELSE 
COMMIT; 

另外,sqlcode<>1错误,一般是sqlcode=0 orsqlcode=100 按成功处理,其他按失败处理
[解决办法]

探讨
每个语句都需要判断sqlcode的值呀

热点排行