主题:pb对事务处理?
pb中事务处理的问题?
1.对一组SQL语句要么都执行成功,要么都不执行。
举例:
INSERT INTO TABLEA (F1) VALUES(V1);
INSERT INTO TABLEB (F1) VALUES(V1);
执行上面两条语句。
怎么做事务处理啊。
由于SQLCA.SQLCODE是判断最后执行语句的返回状态,
如果
INSERT INTO TABLEA (F1) VALUES(V1);//-----语句1
INSERT INTO TABLEB (F1) VALUES(V1);//-----语句2
if sqlca.sqlcode = 0 then
commit;
else
rollback;
end if
执行后,如果语句1不成功,语句2成功,程序照样会返回sqlca.sqlcode = 0
,然后会执行commit;
TABLEA TABLEB
=============== ================
F1 F1
程序执行后
TABLEA TABLEB
=============== ================
F1 F1
100
这不是所需要的,系统要么都不写数据成功,要么都写进去
显然,如果语句2执行失败后,程序返回sqlca.sqlcode = -1 ,执行rollback回滚,
取消所有的操作。
但是实际上,并不是语句2才会执行失败,任何sql语句执行都有可能执行失败的。
如何做事务处理呢?
1.目前的做法,只能嵌套if语句了
insert into a (acount) values(100);
if sqlca.sqlcode =0 then
insert into b (acount) values(100);
if sqlca.sqlcode =0 then
commit;
Messagebox("","a")
else
Messagebox("",sqlca.sqlerrtext)
rollback;
Messagebox("",'b')
end if
else
Messagebox("",sqlca.sqlerrtext)
rollback;
Messagebox("",'b')
end if
2.还有一种,就是每执行一条sql,把sqlcode赋个变量,最后变量相加判断是否为0,为0的就commit
<0就rollback
现在提出问题,还有没有其他更好的方法???????????
1.对一组SQL语句要么都执行成功,要么都不执行。
举例:
INSERT INTO TABLEA (F1) VALUES(V1);
INSERT INTO TABLEB (F1) VALUES(V1);
执行上面两条语句。
怎么做事务处理啊。
由于SQLCA.SQLCODE是判断最后执行语句的返回状态,
如果
INSERT INTO TABLEA (F1) VALUES(V1);//-----语句1
INSERT INTO TABLEB (F1) VALUES(V1);//-----语句2
if sqlca.sqlcode = 0 then
commit;
else
rollback;
end if
执行后,如果语句1不成功,语句2成功,程序照样会返回sqlca.sqlcode = 0
,然后会执行commit;
TABLEA TABLEB
=============== ================
F1 F1
程序执行后
TABLEA TABLEB
=============== ================
F1 F1
100
这不是所需要的,系统要么都不写数据成功,要么都写进去
显然,如果语句2执行失败后,程序返回sqlca.sqlcode = -1 ,执行rollback回滚,
取消所有的操作。
但是实际上,并不是语句2才会执行失败,任何sql语句执行都有可能执行失败的。
如何做事务处理呢?
1.目前的做法,只能嵌套if语句了
insert into a (acount) values(100);
if sqlca.sqlcode =0 then
insert into b (acount) values(100);
if sqlca.sqlcode =0 then
commit;
Messagebox("","a")
else
Messagebox("",sqlca.sqlerrtext)
rollback;
Messagebox("",'b')
end if
else
Messagebox("",sqlca.sqlerrtext)
rollback;
Messagebox("",'b')
end if
2.还有一种,就是每执行一条sql,把sqlcode赋个变量,最后变量相加判断是否为0,为0的就commit
<0就rollback
现在提出问题,还有没有其他更好的方法???????????