- 相關(guān)推薦
事務(wù)處理實(shí)現(xiàn)本地表的數(shù)據(jù)更新
事務(wù)處理實(shí)現(xiàn)本地表的數(shù)據(jù)更新
用事務(wù)來(lái)緩沖對(duì)磁盤數(shù)據(jù)的更新操作,對(duì)磁盤數(shù)據(jù)更新在事務(wù)結(jié)束之后進(jìn)行,如果系統(tǒng)不能執(zhí)行對(duì)數(shù)據(jù)庫(kù)的更新操作,則取消整個(gè)事務(wù),不執(zhí)行任何更新操作,
事務(wù)處理實(shí)現(xiàn)本地表的數(shù)據(jù)更新
。首先建立事務(wù)處理自定義類—TRANSACTION,包括本地表事務(wù)處理確認(rèn)(—TRANSCONFIRM)和本地表事務(wù)處理取消(—TRANSCANCEL)兩種方法。這兩種方法的前提條件是訪問(wèn)共享數(shù)據(jù)的各個(gè)用戶程序都使用行緩沖。用CURSORSETPROP(“Buffering”,3)將表設(shè)置成開(kāi)放式行緩沖方式。
—TRANSCONFIRM 方法
BEGIN TRANSACTION &&開(kāi)始事務(wù)1
Isuccess=TABLEUPDATE(.T.,.F.)
&&非強(qiáng)制的更新所有修改記錄
IF Isuccess=.F. &&若失敗
oROLLBACK &&取消修改,結(jié)束事務(wù)1
o=AERROR(aErrors) &&取消事務(wù)出錯(cuò)
oDO CASE
ooCASE aErrors[1,1]=1585
&&當(dāng)前記錄被其他用戶改過(guò)
=RLOCK() &&記錄加鎖
FOR nField=1 to FCOUNT()
&&依次處理每一字段
cField=FIELD(nField)
IF OLDVAL(cField)<>CURVAL(cField)
o&&字段被改過(guò),確認(rèn)修改有效
oDO CASE
CASE TYPE(cField)='N'
T1=CURVAL(cField)-LDVAL(cField)
REPL cField WITH T1+EVAL(cField))
oOTHEWISE
oREPL cField WITH CURVAL(cField))
oENDCASE
oENDIF
oENDFOR
oUNLOCK
oBEGIN TRANSACTION &&開(kāi)始事務(wù)2
o=TABLEUPDATE(.T.,.T.) &&強(qiáng)制更新數(shù)據(jù)
oEND TRANSACTION &&結(jié)束事務(wù)2
oENDCASE
ELSE
END TRANSACTION &&結(jié)束事務(wù)1
ENDIF
o— TRANSCANEL方法
BEGIN TRANSACTION &&開(kāi)始事務(wù)1
Isuccess=TABLEUPDATE(.T.,.F.)
&&非強(qiáng)制的更新所有修改記錄
【事務(wù)處理實(shí)現(xiàn)本地表的數(shù)據(jù)更新】相關(guān)文章:
早安心語(yǔ)最新更新09-16
每日更新早安心語(yǔ)大全05-17
每日更新早安心語(yǔ)圖06-25
早安問(wèn)候語(yǔ)每日更新06-29
早安問(wèn)候語(yǔ)大全每日更新06-26
關(guān)于早安問(wèn)候語(yǔ)每日更新08-31
遞歸實(shí)現(xiàn)回文判斷09-27
中小學(xué) 方案最新(更新版)09-28