一、主要問(wèn)題
對(duì)于簡(jiǎn)單的局域網(wǎng)環(huán)境下開(kāi)發(fā)VFP程序,主要須注意的是數(shù)據(jù)共享沖突的問(wèn)題。
二、解決辦法
在明確網(wǎng)絡(luò)設(shè)計(jì)的重點(diǎn)——如何解決兩個(gè)或兩個(gè)以上用戶(hù)同時(shí)修改數(shù)據(jù)時(shí)所產(chǎn)生的沖突——后,我們來(lái)討論解決這個(gè)問(wèn)題的方法。
基本方法有三種:
1、對(duì)數(shù)據(jù)獨(dú)占訪(fǎng)問(wèn);
2、對(duì)數(shù)據(jù)共享訪(fǎng)問(wèn);
3、緩沖數(shù)據(jù)訪(fǎng)問(wèn);
其中1,2兩點(diǎn)在莊稼的中級(jí)教程第十三課網(wǎng)絡(luò)程序設(shè)計(jì)初步中有這方面的介紹,為了方便大家整體閱讀,我在這里再多羅嗦兩句。
1)獨(dú)占方式
以獨(dú)占方式打開(kāi)的表,其他用戶(hù)不能對(duì)該文件讀寫(xiě)。
代碼:
set exclusive on 或 use XXX exclusive
use XXX
只能在獨(dú)占方式下執(zhí)行的命令有index,reindex,pack,zap,alter table,insert,
modi stru等
2)共享方式
以共享方式打開(kāi)的表,多用戶(hù)可同時(shí)訪(fǎng)問(wèn)它。
代碼:
set exclusive off 或 use XXX shared
use XXX
對(duì)于共享的數(shù)據(jù)表,在對(duì)其進(jìn)行添加或更新時(shí),就涉及到鎖定與解鎖的問(wèn)題。
[2-1]鎖定數(shù)據(jù)
鎖定數(shù)據(jù)一般有自動(dòng)鎖定和人工鎖定兩種。
自動(dòng)鎖定就是一些vfp命令在執(zhí)行之前都會(huì)自動(dòng)鎖定一個(gè)記錄或一個(gè)表,如果成功鎖定后才繼續(xù)執(zhí)行該命令,執(zhí)行完后解鎖。(vfp命令的自動(dòng)鎖定范圍可參見(jiàn)相關(guān)書(shū)籍)
人工鎖定是通過(guò)使用鎖定函數(shù)人工鎖定一個(gè)記錄或一個(gè)表??赡苡玫降暮瘮?shù)有:
Rlock() 鎖定記錄(rlock()等同于lock())
Flock() 鎖定表
set reprocess to [嘗試加鎖次數(shù)]
set multilock on 鎖定多條記錄的系統(tǒng)設(shè)置
ISRlocked()/Isflocked() 測(cè)試該記錄是否被鎖定
代碼:
set exclusive off &&共享方式
set reprocess to 1 &&加鎖
use XXX &&打開(kāi)共享表
IF Flock() &&鎖定表并判斷是否成功
&&如果不想鎖記錄,只想測(cè)試記錄是否加鎖,則使用isrlocked()
replace all XX with XX &&鎖定成功執(zhí)行替換
unlock &&解鎖
else
wait window "File in use by another user." nowait
endif
[2-2]數(shù)據(jù)解鎖
數(shù)據(jù)解鎖相對(duì)于加鎖亦有兩種解鎖方式。
對(duì)于自動(dòng)加鎖的記錄,只需移動(dòng)記錄指針就能解鎖。
對(duì)于人工加鎖的記錄,必須使用下面的解鎖命令:
unlock,unlock all
end transaction,tableupdate()
另外在使用set multilocks off或flock()命令建立新的鎖定前,自動(dòng)解除當(dāng)前鎖定還有比較徹底的命令:clear all,close all,quit.怎么樣?徹底吧?。海?BR> [2-3]我還想說(shuō)的一點(diǎn)
設(shè)計(jì)表單時(shí),使用私有數(shù)據(jù)工作期,原因很長(zhǎng),就不說(shuō)了。
3)緩沖方式
緩沖方式包括兩種手段:共享數(shù)據(jù)使用緩沖及事務(wù)處理的概念.
對(duì)于簡(jiǎn)單的局域網(wǎng)環(huán)境下開(kāi)發(fā)VFP程序,主要須注意的是數(shù)據(jù)共享沖突的問(wèn)題。
二、解決辦法
在明確網(wǎng)絡(luò)設(shè)計(jì)的重點(diǎn)——如何解決兩個(gè)或兩個(gè)以上用戶(hù)同時(shí)修改數(shù)據(jù)時(shí)所產(chǎn)生的沖突——后,我們來(lái)討論解決這個(gè)問(wèn)題的方法。
基本方法有三種:
1、對(duì)數(shù)據(jù)獨(dú)占訪(fǎng)問(wèn);
2、對(duì)數(shù)據(jù)共享訪(fǎng)問(wèn);
3、緩沖數(shù)據(jù)訪(fǎng)問(wèn);
其中1,2兩點(diǎn)在莊稼的中級(jí)教程第十三課網(wǎng)絡(luò)程序設(shè)計(jì)初步中有這方面的介紹,為了方便大家整體閱讀,我在這里再多羅嗦兩句。
1)獨(dú)占方式
以獨(dú)占方式打開(kāi)的表,其他用戶(hù)不能對(duì)該文件讀寫(xiě)。
代碼:
set exclusive on 或 use XXX exclusive
use XXX
只能在獨(dú)占方式下執(zhí)行的命令有index,reindex,pack,zap,alter table,insert,
modi stru等
2)共享方式
以共享方式打開(kāi)的表,多用戶(hù)可同時(shí)訪(fǎng)問(wèn)它。
代碼:
set exclusive off 或 use XXX shared
use XXX
對(duì)于共享的數(shù)據(jù)表,在對(duì)其進(jìn)行添加或更新時(shí),就涉及到鎖定與解鎖的問(wèn)題。
[2-1]鎖定數(shù)據(jù)
鎖定數(shù)據(jù)一般有自動(dòng)鎖定和人工鎖定兩種。
自動(dòng)鎖定就是一些vfp命令在執(zhí)行之前都會(huì)自動(dòng)鎖定一個(gè)記錄或一個(gè)表,如果成功鎖定后才繼續(xù)執(zhí)行該命令,執(zhí)行完后解鎖。(vfp命令的自動(dòng)鎖定范圍可參見(jiàn)相關(guān)書(shū)籍)
人工鎖定是通過(guò)使用鎖定函數(shù)人工鎖定一個(gè)記錄或一個(gè)表??赡苡玫降暮瘮?shù)有:
Rlock() 鎖定記錄(rlock()等同于lock())
Flock() 鎖定表
set reprocess to [嘗試加鎖次數(shù)]
set multilock on 鎖定多條記錄的系統(tǒng)設(shè)置
ISRlocked()/Isflocked() 測(cè)試該記錄是否被鎖定
代碼:
set exclusive off &&共享方式
set reprocess to 1 &&加鎖
use XXX &&打開(kāi)共享表
IF Flock() &&鎖定表并判斷是否成功
&&如果不想鎖記錄,只想測(cè)試記錄是否加鎖,則使用isrlocked()
replace all XX with XX &&鎖定成功執(zhí)行替換
unlock &&解鎖
else
wait window "File in use by another user." nowait
endif
[2-2]數(shù)據(jù)解鎖
數(shù)據(jù)解鎖相對(duì)于加鎖亦有兩種解鎖方式。
對(duì)于自動(dòng)加鎖的記錄,只需移動(dòng)記錄指針就能解鎖。
對(duì)于人工加鎖的記錄,必須使用下面的解鎖命令:
unlock,unlock all
end transaction,tableupdate()
另外在使用set multilocks off或flock()命令建立新的鎖定前,自動(dòng)解除當(dāng)前鎖定還有比較徹底的命令:clear all,close all,quit.怎么樣?徹底吧?。海?BR> [2-3]我還想說(shuō)的一點(diǎn)
設(shè)計(jì)表單時(shí),使用私有數(shù)據(jù)工作期,原因很長(zhǎng),就不說(shuō)了。
3)緩沖方式
緩沖方式包括兩種手段:共享數(shù)據(jù)使用緩沖及事務(wù)處理的概念.