本文利用看實(shí)例學(xué)VFP:利用多個(gè)表中的字段創(chuàng)建新表這個(gè)實(shí)例中的知識(shí)來制作一個(gè)文本式錄入表單的簡單示例,通過這個(gè)表單可以同時(shí)向“數(shù)據(jù)1”數(shù)據(jù)庫中的“網(wǎng)站信息表”和“附加信息表”這兩個(gè)表中添加記錄,并且對錄入的數(shù)據(jù)可以選擇“保存”、“添加”或“撤消”。這兩個(gè)表的索引字段分別是“編號”和“網(wǎng)站編號”,這兩個(gè)字段的內(nèi)容是完全相同的,只是分別處于兩個(gè)表中,并且兩個(gè)表通過這兩個(gè)字段發(fā)生關(guān)聯(lián)。關(guān)于“數(shù)據(jù)1”數(shù)據(jù)庫的情況已經(jīng)在看實(shí)例學(xué)VFP:示例數(shù)據(jù)庫一文中給出,這里不再詳述。
本例要點(diǎn):
在以前的例子中,我們介紹過可以在“數(shù)據(jù)環(huán)境”中拖動(dòng)一個(gè)表的字段到表單上,系統(tǒng)會(huì)自動(dòng)生成一個(gè)標(biāo)簽及一個(gè)文本框控件。不過本例要求對錄入的數(shù)據(jù)可以選擇“保存”、“添加”或“撤消”等操作,如果也這樣設(shè)計(jì)的話,則錄入的數(shù)據(jù)不管你是否保存了都會(huì)寫入到表中,原因是文本框是從數(shù)據(jù)環(huán)境中拖動(dòng)過來而生成的,它們的數(shù)據(jù)源(ControlSource)已經(jīng)自動(dòng)與表中的字段綁定了。這很明顯與我們的設(shè)計(jì)要求不符。
所以本例在設(shè)計(jì)時(shí)采取從“表單設(shè)計(jì)器”上手工向表單中添加文本框等控件,并且將添加上去的各個(gè)文本框的ControlSource屬性值分別設(shè)置為臨時(shí)表lsb中的字段,在表單的init事件中對“網(wǎng)站信息表”和“附加信息表”進(jìn)行連接查詢并將查詢結(jié)果輸出為臨時(shí)表lsb。這樣表單在啟動(dòng)時(shí)各個(gè)文本框就會(huì)顯示臨時(shí)表lsb當(dāng)前記錄的各個(gè)記錄的值,同時(shí)命令按鍵“保存”和“取消”不可用,單擊“第一條”等記錄移動(dòng)按鈕可以依次顯示lsb表的各條記錄的值,如下圖:

單擊了“添加”按鈕后,這個(gè)按鈕本身及“第一條”~“最后一條”這四個(gè)記錄移動(dòng)按鈕不可用,同時(shí)各個(gè)文本框被清零、等待接收數(shù)據(jù),如下圖:

此時(shí)單擊“取消”按鈕可以撤消此次操作,單擊“保存”按鈕后,則對表單上各個(gè)文本框的值進(jìn)行校驗(yàn),如果都不會(huì)空,才會(huì)依據(jù)表單上文本框的值分別在“網(wǎng)站信息表”和“附加信息表”這兩個(gè)表中添加一條記錄。
制作步驟:
一、新建表單,并將其caption屬性值設(shè)置為“設(shè)計(jì)文本式錄入表單”,AutoCenter屬性值設(shè)置為.t.,width屬性值設(shè)置為375,height屬性值設(shè)置為250,并將表單保存為“設(shè)計(jì)文本式錄入表單.scx”。
補(bǔ)充:建好表單后,需要右擊表單選“數(shù)據(jù)環(huán)境”命令,把“網(wǎng)站信息表”和“附加信息表”添加到數(shù)據(jù)環(huán)境中去(或者不使用數(shù)據(jù)環(huán)境、在表單的init事件中把這兩個(gè)表打開也可以)。寫制作過程時(shí)忘記寫這一點(diǎn),今天補(bǔ)充一下。
二、向表單上添加5個(gè)label控件,將這些label控件的AutoSize屬性值都設(shè)為.t.,caption屬性值分別設(shè)置為“編號”、“網(wǎng)站名稱”、“網(wǎng)站網(wǎng)址”、“網(wǎng)站類型”和“網(wǎng)站描述”。
三、向表單上添加5個(gè)文本框控件(Text1~Text5),將這5個(gè)文本框控件(Text1~Text5)的ControlSource屬性值依次設(shè)置為“l(fā)sb.編號”、“l(fā)sb.網(wǎng)站名稱”、“l(fā)sb.網(wǎng)站網(wǎng)址”、“l(fā)sb.網(wǎng)站類型”和“l(fā)sb.網(wǎng)站描述”。
四、向表單上再添加8個(gè)命令按鈕控件。
五、適當(dāng)調(diào)整各控件的大小及它們在表單上的位置,調(diào)整后的表單設(shè)計(jì)器如下圖:

六、將這8個(gè)命令按鈕控件(command1~command8)的caption屬性值依次設(shè)置為“第一條”、“上一條”、“下一條”、“最后一條”、“添加”、“保存”、“取消”和“退出”。
七、添加事件代碼:
(一)表單的init事件:
select 網(wǎng)站信息表 Select 編號,網(wǎng)站名稱,網(wǎng)站網(wǎng)址,網(wǎng)站類型,網(wǎng)站描述; from 網(wǎng)站信息表 Inner Join 附加信息表; on 網(wǎng)站信息表.編號= 附加信息表.網(wǎng)站編號 into cursor lsb thisform.command6.enabled=.f. thisform.command7.enabled=.f. thisform.Text1.value=lsb.編號 thisform.Text2.value=lsb.網(wǎng)站名稱 thisform.Text3.value=lsb.網(wǎng)站網(wǎng)址 thisform.Text4.value=lsb.網(wǎng)站類型 thisform.Text5.value=lsb.網(wǎng)站描述
(二)“第一條”按鈕(command1)的click事件:
if bof()=.f. go top endif thisform.refresh
(三)“上一條”按鈕(command2)的click事件:
if bof()=.f. skip -1 endif thisform.refresh
(四)“下一條”按鈕(command3)的click事件:
if eof()=.f. skip endif thisform.refresh
(五)“最后一條”按鈕(command4)的click事件:
if eof()=.f. go bottom endif thisform.refresh
(六)“添加”按鈕(command5)的click事件:
thisform.Text1.ControlSource="" thisform.Text2.ControlSource="" thisform.Text3.ControlSource="" thisform.Text4.ControlSource="" thisform.Text5.ControlSource="" thisform.Text1.value="" thisform.Text2.value="" thisform.Text3.value="" thisform.Text4.value="" thisform.Text5.value="" this.enabled=.f. thisform.command1.enabled=.f. thisform.command2.enabled=.f. thisform.command3.enabled=.f. thisform.command4.enabled=.f. thisform.command6.enabled=.t. thisform.command7.enabled=.t.
(七)“保存”按鈕(command6)的click事件:
a=alltrim(thisform.Text1.value)
b=alltrim(thisform.Text2.value)
c=alltrim(thisform.Text3.value)
d=alltrim(thisform.Text4.value)
e=alltrim(thisform.Text5.value)
if empty(a).or.empty(b).or.empty(c).or.empty(d).or.empty(e)
messagebox("請輸入完整信息")
return
endif
INSERT INTO 網(wǎng)站信息表;
(編號,網(wǎng)站名稱,網(wǎng)站網(wǎng)址) VALUES(a,b,c)
INSERT INTO 附加信息表;
(網(wǎng)站編號,網(wǎng)站類型,網(wǎng)站描述) VALUES(a,d,e)
messagebox("保存記錄成功!",64,"系統(tǒng)提示")
this.enabled=.f.
thisform.command7.enabled=.f.
thisform.command1.enabled=.t.
thisform.command2.enabled=.t.
thisform.command3.enabled=.t.
thisform.command4.enabled=.t.
thisform.command5.enabled=.t.
select 網(wǎng)站信息表
Select 編號,網(wǎng)站名稱,網(wǎng)站網(wǎng)址,網(wǎng)站類型,網(wǎng)站描述 from 網(wǎng)站信息表 Inner Join;
附加信息表 on 網(wǎng)站信息表.編號= 附加信息表.網(wǎng)站編號 into cursor lsb
thisform.Text1.ControlSource="lsb.編號"
thisform.Text2.ControlSource="lsb.網(wǎng)站名稱"
thisform.Text3.ControlSource="lsb.網(wǎng)站網(wǎng)址"
thisform.Text4.ControlSource="lsb.網(wǎng)站類型"
thisform.Text5.ControlSource="lsb.網(wǎng)站描述"
thisform.refresh
(八)“取消”按鈕(command7)的click事件:
this.enabled=.f. thisform.command6.enabled=.f. thisform.command1.enabled=.t. thisform.command2.enabled=.t. thisform.command3.enabled=.t. thisform.command4.enabled=.t. thisform.command5.enabled=.t. thisform.Text1.ControlSource="lsb.編號" thisform.Text2.ControlSource="lsb.網(wǎng)站名稱" thisform.Text3.ControlSource="lsb.網(wǎng)站網(wǎng)址" thisform.Text4.ControlSource="lsb.網(wǎng)站類型" thisform.Text5.ControlSource="lsb.網(wǎng)站描述" thisform.refresh
(九)“退出”按鈕(command8)的click事件:thisform.release
八、運(yùn)行“設(shè)計(jì)文本式錄入表單.scx”。
本例代碼在Win2003+VFP6.0環(huán)境下調(diào)試通過。





