哎,不会没人能解答吧,帖出脚本:
//=======================
//事件:clicked
//描述:将当前账单作废
//=======================
STRING ls_refno,ls_ccy,ls_cacode
INT li_count,li_i,li_orgca,li_trnca,li_ctry,li_ca
LONG ll_rec,ll_ini,ll_mod,ll_smon,ll_cmon,ll_calls,ll_mins
DECIMAL ld_amt,ld_rate
DATETIME ld_now
li_count=tab_1.tp_2.dw_de.rowcount()
IF li_count=0 THEN return
//插入历史表//这个历史表就是datawindow对应的表的历史表。
FOR li_i=1 to li_count
ls_refno=tab_1.tp_2.dw_de.getitemstring(li_i,"ref_no")
ll_rec=tab_1.tp_2.dw_de.getitemnumber(li_i,"rec_no")
ll_ini=tab_1.tp_2.dw_de.getitemnumber(li_i,"ini_rec_no")
ll_mod=tab_1.tp_2.dw_de.getitemnumber(li_i,"mod_rec_no")
ld_amt=tab_1.tp_2.dw_de.getitemdecimal(li_i,"amount")
INSERT INTO A_GO_TELEX_ACCOUNT_HIS VALUES (:ls_refno,:ll_rec,:ll_ini,:ll_mod,:ld_amt);
IF sqlca.sqlcode<>0 THEN
messagebox("错误","处理第"+string(li_i)+"行时错误!")
rollback;
return
END IF
NEXT
//从当前表中删除
FOR li_i=1 to li_count
tab_1.tp_2.dw_de.deleterow(1)
NEXT
IF tab_1.tp_2.dw_de.update()=1 THEN//想问的就是update()应该不成功,这段代码不可能执行???上面deleterow的后果又是什么?
DELETE FROM ACCOUNT_RECORD WHERE REF_NO=:ls_refno AND TYPE_='TELEX';
SELECT MIN(CARRIER_CODE) INTO :ls_cacode FROM CARRIER_CODE WHERE CARRIER_ID=:li_ca;
DELETE FROM NPHN_MONTH_ACCOUNT_LOG WHERE CARRIER_CODE=:ls_cacode AND SETTLE_MONTH=:ll_smon AND SETTLE_DIRECTION='2' AND TYPE_='TELEX';
COMMIT;
tab_1.tp_1.em_mon.triggerevent("modified")
tab_1.SELECTTAB(1)
ELSE
ROLLBACK;
messagebox("警告","作废操作失败!")
return
END IF
你最好先看一下你的autocommit是真还是假
不过好像代码有问题,看这段代码:
//////////////////////////////////
INSERT INTO A_GO_TELEX_ACCOUNT_HIS VALUES (:ls_refno,:ll_rec,:ll_ini,:ll_mod,:ld_amt);
IF sqlca.sqlcode<>0 THEN
messagebox("错误","处理第"+string(li_i)+"行时错误!")
rollback;
return
////////////////////////////
如果sqlca.autcommit = false 那么它在insert into 成功后没有commit,数据库仍然没有保存进去
如果sqlca.autocomit = true 那么它的rollback就有问题,它是一个循环内的rollback;意思就是说这一条insert into 成功就保存到数据库了,如果没有rollback;假设我有10条数据要insert ,如果我在第5条insert 不成功的话,那我的rollback是给谁的,前4条?但是前4条已经commit了,第5条?它根本就是错误的,还用的着rollback吗?然后程序就return ,于是就产生了前4条已经保存了,后6条没保存,因为是return,所以也就不会执行下面删除当前表的操作,这跟事务的原子性相违背,你的数据库还能保持一致性?至少你历史表跟当前表里相同的数据存在了。