回想我們過去開發(fā)過的VisualFoxpro應(yīng)用程序,盡管會(huì)發(fā)現(xiàn)各種不同的應(yīng)用規(guī)模有大小、要求有高低、開發(fā)難點(diǎn)也各有不同,但這些不同的應(yīng)用都有一個(gè)共同的特點(diǎn):即據(jù)表維護(hù)屏幕(包括數(shù)據(jù)錄入)的開發(fā)都是一個(gè)不可缺少的部分,而且占據(jù)了相當(dāng)大的比重,花去了我們不少的開發(fā)時(shí)間與精力。因此對(duì)數(shù)據(jù)表維護(hù)屏幕(包括數(shù)據(jù)錄入)的開發(fā)進(jìn)行總結(jié)與研究是很有必要的。
為了使數(shù)據(jù)表中所存儲(chǔ)數(shù)據(jù)的準(zhǔn)確與及時(shí),并提供正確與及時(shí)的查詢,必須對(duì)數(shù)據(jù)表進(jìn)行人工維護(hù)(包括數(shù)據(jù)錄入),因此必須為之開發(fā)數(shù)據(jù)表維護(hù)屏幕作為人機(jī)對(duì)話的界面。總結(jié)各種數(shù)據(jù)表維護(hù)屏幕,我們會(huì)發(fā)現(xiàn)它們都是大同小異的,既不會(huì)十分復(fù)雜但也不可能非常簡單。一般的數(shù)據(jù)表維護(hù)屏幕都要求有新增(增加新記錄)、編輯(記錄修改)、刪除(記錄刪除)以及漫游(指記錄指針上移、下移、到頂、到底和各種查找記錄定位)功能。另外數(shù)據(jù)表維護(hù)屏幕還必須對(duì)用戶輸入的數(shù)據(jù)進(jìn)行合法性檢查,特別是對(duì)輸入關(guān)鍵字的合法性檢查,我們一定要保持主關(guān)鍵字的完整性與外關(guān)鍵字的參考完整性不然將會(huì)對(duì)整個(gè)數(shù)據(jù)系統(tǒng)造成極大的混亂。請(qǐng)注意,盡管VisualFoxpro對(duì)主關(guān)鍵字的完整性與外關(guān)鍵字的參考完整性提供系統(tǒng)維護(hù),但這只是對(duì)數(shù)據(jù)系統(tǒng)的安全性增加了最后一道防線,并不能替代在開發(fā)數(shù)據(jù)表維護(hù)屏幕中對(duì)輸入關(guān)鍵字的合法性檢查,要不然面對(duì) 著陌生的VisualFoxpro系統(tǒng)錯(cuò)誤對(duì)話框,用戶會(huì)不知所措的。
由于對(duì)輸入關(guān)鍵字的合法性檢查是開發(fā)數(shù)據(jù)表維護(hù)屏幕中不可缺少的一部分增加了開發(fā)數(shù)據(jù)表維護(hù)屏幕的復(fù)雜性,因此有關(guān)數(shù)據(jù)表維護(hù)屏幕的代碼不可能很簡單,一個(gè)代碼非常"簡潔"的數(shù)據(jù)表維護(hù)屏幕其功能總是不健全的,在使用中總是要出問題的。那么如何才能減少開發(fā)數(shù)據(jù)表維護(hù)屏幕的時(shí)間與精力呢?本人的辦法是使用偽代碼。因?yàn)閿?shù)據(jù)表維護(hù)屏幕的代碼雖然比較復(fù)雜,但是它們都有很強(qiáng)的共性,我們可以預(yù)先編寫一套可被各種不同的數(shù)據(jù)表維護(hù)屏幕套用的偽代碼,以后編寫數(shù)據(jù)表維護(hù)屏幕代碼時(shí)就不再從零開始,而是從偽代碼開始。偽代碼雖然不能被直接編譯運(yùn)行,但面對(duì)著具體的數(shù)據(jù)表結(jié)構(gòu)和應(yīng)用要求,大部分開發(fā)人員都能輕松地把偽代碼改寫成正式代碼。
以下筆者向大家介紹本人編寫的數(shù)據(jù)表維護(hù)屏幕偽代碼,它由一個(gè)Custum類和一些Procdure構(gòu)成。為了方便套用偽代碼,筆者盡可能地把Form中的嵌入代碼外移,在嵌入代碼中使用do...。以下偽代碼絕大部分無需修 梢閱美詞褂茫櫳薷牡慕鍪且恍〔糠鄭庖恍〔糠鐘炙坪跏羌虻サ摹?
下面是使用偽代碼設(shè)計(jì)數(shù)據(jù)表維護(hù)屏幕的具體步驟:
1.先建立如下一個(gè)工作面表格
編 號(hào)工 作 面 名 稱主 索 引 名 稱注 釋
1
2
3
4
...
16
這個(gè)表格是對(duì)整個(gè)應(yīng)用程序的,這里所說的工作面與我們平時(shí)所說的有些不一樣,它把處于同一工作面但不同主索引的情況也作為不同的工作面,使 用不同的編號(hào)。
2.根據(jù)工作面表格改寫以下偽代碼,使之成為可以編譯與運(yùn)行的正式代碼。
{ 偽代碼開始}
public theWorkStat
theWorkStat=CreateObject("WorkStat")
**== 以下工作狀態(tài)類==**
define class WorkStat as custom
curWS=1
declare Ai[16],Or[16]
** 以下工作狀態(tài)定義
**1
{
Ai[1]="A1" && 工作面
Or[1]="O1" &&ORDER 序
Ai[2]="A2" && 工作面
Or[2]="" && 自然序,無主索引
...
**16
Ai[16]="A16"
Or[16]="O16"
}
func Get
retu curWS
endfunc
proc Set
para p
sele (Ai[p])
set order to (Or[p])
curWS=p
endproc
為了使數(shù)據(jù)表中所存儲(chǔ)數(shù)據(jù)的準(zhǔn)確與及時(shí),并提供正確與及時(shí)的查詢,必須對(duì)數(shù)據(jù)表進(jìn)行人工維護(hù)(包括數(shù)據(jù)錄入),因此必須為之開發(fā)數(shù)據(jù)表維護(hù)屏幕作為人機(jī)對(duì)話的界面。總結(jié)各種數(shù)據(jù)表維護(hù)屏幕,我們會(huì)發(fā)現(xiàn)它們都是大同小異的,既不會(huì)十分復(fù)雜但也不可能非常簡單。一般的數(shù)據(jù)表維護(hù)屏幕都要求有新增(增加新記錄)、編輯(記錄修改)、刪除(記錄刪除)以及漫游(指記錄指針上移、下移、到頂、到底和各種查找記錄定位)功能。另外數(shù)據(jù)表維護(hù)屏幕還必須對(duì)用戶輸入的數(shù)據(jù)進(jìn)行合法性檢查,特別是對(duì)輸入關(guān)鍵字的合法性檢查,我們一定要保持主關(guān)鍵字的完整性與外關(guān)鍵字的參考完整性不然將會(huì)對(duì)整個(gè)數(shù)據(jù)系統(tǒng)造成極大的混亂。請(qǐng)注意,盡管VisualFoxpro對(duì)主關(guān)鍵字的完整性與外關(guān)鍵字的參考完整性提供系統(tǒng)維護(hù),但這只是對(duì)數(shù)據(jù)系統(tǒng)的安全性增加了最后一道防線,并不能替代在開發(fā)數(shù)據(jù)表維護(hù)屏幕中對(duì)輸入關(guān)鍵字的合法性檢查,要不然面對(duì) 著陌生的VisualFoxpro系統(tǒng)錯(cuò)誤對(duì)話框,用戶會(huì)不知所措的。
由于對(duì)輸入關(guān)鍵字的合法性檢查是開發(fā)數(shù)據(jù)表維護(hù)屏幕中不可缺少的一部分增加了開發(fā)數(shù)據(jù)表維護(hù)屏幕的復(fù)雜性,因此有關(guān)數(shù)據(jù)表維護(hù)屏幕的代碼不可能很簡單,一個(gè)代碼非常"簡潔"的數(shù)據(jù)表維護(hù)屏幕其功能總是不健全的,在使用中總是要出問題的。那么如何才能減少開發(fā)數(shù)據(jù)表維護(hù)屏幕的時(shí)間與精力呢?本人的辦法是使用偽代碼。因?yàn)閿?shù)據(jù)表維護(hù)屏幕的代碼雖然比較復(fù)雜,但是它們都有很強(qiáng)的共性,我們可以預(yù)先編寫一套可被各種不同的數(shù)據(jù)表維護(hù)屏幕套用的偽代碼,以后編寫數(shù)據(jù)表維護(hù)屏幕代碼時(shí)就不再從零開始,而是從偽代碼開始。偽代碼雖然不能被直接編譯運(yùn)行,但面對(duì)著具體的數(shù)據(jù)表結(jié)構(gòu)和應(yīng)用要求,大部分開發(fā)人員都能輕松地把偽代碼改寫成正式代碼。
以下筆者向大家介紹本人編寫的數(shù)據(jù)表維護(hù)屏幕偽代碼,它由一個(gè)Custum類和一些Procdure構(gòu)成。為了方便套用偽代碼,筆者盡可能地把Form中的嵌入代碼外移,在嵌入代碼中使用do...。以下偽代碼絕大部分無需修 梢閱美詞褂茫櫳薷牡慕鍪且恍〔糠鄭庖恍〔糠鐘炙坪跏羌虻サ摹?
下面是使用偽代碼設(shè)計(jì)數(shù)據(jù)表維護(hù)屏幕的具體步驟:
1.先建立如下一個(gè)工作面表格
編 號(hào)工 作 面 名 稱主 索 引 名 稱注 釋
1
2
3
4
...
16
這個(gè)表格是對(duì)整個(gè)應(yīng)用程序的,這里所說的工作面與我們平時(shí)所說的有些不一樣,它把處于同一工作面但不同主索引的情況也作為不同的工作面,使 用不同的編號(hào)。
2.根據(jù)工作面表格改寫以下偽代碼,使之成為可以編譯與運(yùn)行的正式代碼。
{ 偽代碼開始}
public theWorkStat
theWorkStat=CreateObject("WorkStat")
**== 以下工作狀態(tài)類==**
define class WorkStat as custom
curWS=1
declare Ai[16],Or[16]
** 以下工作狀態(tài)定義
**1
{
Ai[1]="A1" && 工作面
Or[1]="O1" &&ORDER 序
Ai[2]="A2" && 工作面
Or[2]="" && 自然序,無主索引
...
**16
Ai[16]="A16"
Or[16]="O16"
}
func Get
retu curWS
endfunc
proc Set
para p
sele (Ai[p])
set order to (Or[p])
curWS=p
endproc