事務(wù)處理實(shí)現(xiàn)本地表的數(shù)據(jù)更新
事務(wù)處理實(shí)現(xiàn)本地表的數(shù)據(jù)更新
用事務(wù)來緩沖對(duì)磁盤數(shù)據(jù)的更新操作,對(duì)磁盤數(shù)據(jù)更新在事務(wù)結(jié)束之后進(jìn)行,如果系統(tǒng)不能執(zhí)行對(duì)數(shù)據(jù)庫的'更新操作,則取消整個(gè)事務(wù),不執(zhí)行任何更新操作。
首先建立事務(wù)處理自定義類—TRANSACTION,包括本地表事務(wù)處理確認(rèn)(—TRANSCONFIRM)和本地表事務(wù)處理取消(—TRANSCANCEL)兩種方法。這兩種方法的前提條件是訪問共享數(shù)據(jù)的各個(gè)用戶程序都使用行緩沖。用CURSORSETPROP(“Buffering”,3)將表設(shè)置成開放式行緩沖方式。
—TRANSCONFIRM 方法
BEGIN TRANSACTION &&開始事務(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)前記錄被其他用戶改過
=RLOCK() &&記錄加鎖
FOR nField=1 to FCOUNT()
&&依次處理每一字段
cField=FIELD(nField)
IF OLDVAL(cField)<>CURVAL(cField)
o&&字段被改過,確認(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 &&開始事務(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 &&開始事務(wù)1
Isuccess=TABLEUPDATE(.T.,.F.)
&&非強(qiáng)制的更新所有修改記錄
【事務(wù)處理實(shí)現(xiàn)本地表的數(shù)據(jù)更新】相關(guān)文章:
實(shí)現(xiàn)基于網(wǎng)頁的數(shù)據(jù)庫數(shù)據(jù)導(dǎo)入10-06
用SQL實(shí)現(xiàn)查詢數(shù)據(jù)不顯示錯(cuò)誤數(shù)據(jù)的方法11-10
Sql Server、Access數(shù)據(jù)排名的實(shí)現(xiàn)方法11-12
JavaScript數(shù)據(jù)結(jié)構(gòu)與算法中集合的實(shí)現(xiàn)11-18
如何實(shí)現(xiàn)多個(gè)硬盤同步數(shù)據(jù)傳輸07-25
貴州安順實(shí)現(xiàn)社?ㄖ瓶〝(shù)據(jù)自助采集09-22
基于MAPGIS的縣級(jí)土地利用現(xiàn)狀數(shù)據(jù)庫更新研究09-02
淺談基于SOA 的數(shù)據(jù)交換中心的設(shè)計(jì)和實(shí)現(xiàn)論文07-08