本文利用看實例學VFP:利用多個表中的字段創(chuàng)建新表這個實例中的知識來制作一個文本式錄入表單的簡單示例,,通過這個表單可以同時向“數(shù)據(jù)1”數(shù)據(jù)庫中的“網(wǎng)站信息表”和“附加信息表”這兩個表中添加記錄,,并且對錄入的數(shù)據(jù)可以選擇“保存”,、“添加”或“撤消”。這兩個表的索引字段分別是“編號”和“網(wǎng)站編號”,,這兩個字段的內(nèi)容是完全相同的,,只是分別處于兩個表中,并且兩個表通過這兩個字段發(fā)生關(guān)聯(lián),。關(guān)于“數(shù)據(jù)1”數(shù)據(jù)庫的情況已經(jīng)在看實例學VFP:示例數(shù)據(jù)庫一文中給出,,這里不再詳述。
本例要點:
在以前的例子中,,我們介紹過可以在“數(shù)據(jù)環(huán)境”中拖動一個表的字段到表單上,,系統(tǒng)會自動生成一個標簽及一個文本框控件。不過本例要求對錄入的數(shù)據(jù)可以選擇“保存”,、“添加”或“撤消”等操作,,如果也這樣設計的話,則錄入的數(shù)據(jù)不管你是否保存了都會寫入到表中,,原因是文本框是從數(shù)據(jù)環(huán)境中拖動過來而生成的,,它們的數(shù)據(jù)源(ControlSource)已經(jīng)自動與表中的字段綁定了。這很明顯與我們的設計要求不符,。
所以本例在設計時采取從“表單設計器”上手工向表單中添加文本框等控件,,并且將添加上去的各個文本框的ControlSource屬性值分別設置為臨時表lsb中的字段,在表單的init事件中對“網(wǎng)站信息表”和“附加信息表”進行連接查詢并將查詢結(jié)果輸出為臨時表lsb,。這樣表單在啟動時各個文本框就會顯示臨時表lsb當前記錄的各個記錄的值,,同時命令按鍵“保存”和“取消”不可用,單擊“第一條”等記錄移動按鈕可以依次顯示lsb表的各條記錄的值,,如下圖:
單擊了“添加”按鈕后,,這個按鈕本身及“第一條”~“最后一條”這四個記錄移動按鈕不可用,同時各個文本框被清零,、等待接收數(shù)據(jù),,如下圖:
此時單擊“取消”按鈕可以撤消此次操作,,單擊“保存”按鈕后,則對表單上各個文本框的值進行校驗,,如果都不會空,,才會依據(jù)表單上文本框的值分別在“網(wǎng)站信息表”和“附加信息表”這兩個表中添加一條記錄。
制作步驟:
一,、新建表單,,并將其caption屬性值設置為“設計文本式錄入表單”,AutoCenter屬性值設置為.t.,,width屬性值設置為375,,height屬性值設置為250,并將表單保存為“設計文本式錄入表單.scx”,。
補充:建好表單后,,需要右擊表單選“數(shù)據(jù)環(huán)境”命令,把“網(wǎng)站信息表”和“附加信息表”添加到數(shù)據(jù)環(huán)境中去(或者不使用數(shù)據(jù)環(huán)境,、在表單的init事件中把這兩個表打開也可以),。寫制作過程時忘記寫這一點,今天補充一下,。
二,、向表單上添加5個label控件,將這些label控件的AutoSize屬性值都設為.t.,,caption屬性值分別設置為“編號”,、“網(wǎng)站名稱”、“網(wǎng)站網(wǎng)址”,、“網(wǎng)站類型”和“網(wǎng)站描述”,。
三、向表單上添加5個文本框控件(Text1~Text5),,將這5個文本框控件(Text1~Text5)的ControlSource屬性值依次設置為“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個命令按鈕控件,。
五,、適當調(diào)整各控件的大小及它們在表單上的位置,調(diào)整后的表單設計器如下圖:
六,、將這8個命令按鈕控件(command1~command8)的caption屬性值依次設置為“第一條”,、“上一條”、“下一條”,、“最后一條”,、“添加”,、“保存”、“取消”和“退出”,。
七,、添加事件代碼:
(一)表單的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
八,、運行“設計文本式錄入表單.scx”,。
本例代碼在Win2003+VFP6.0環(huán)境下調(diào)試通過。