




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第5章
數(shù)
據(jù)
庫
數(shù)據(jù)庫簡介VisualFoxPro管理系統(tǒng),其實就是對數(shù)據(jù)進行管理和處理的系統(tǒng)。VisualFoxPro系統(tǒng)對數(shù)據(jù)的管理是通過項目管理器來實現(xiàn)的。用戶可以在項目管理器中建立、修改數(shù)據(jù),也可以刪除、更新和處理數(shù)據(jù)。VisualFoxPro中的數(shù)據(jù)集中在“項目管理器”對話框的“數(shù)據(jù)”選項卡中,而主要的數(shù)據(jù)則建立在“數(shù)據(jù)”選項卡上的“數(shù)據(jù)庫”容器中。因此,本章首先介紹數(shù)據(jù)庫的創(chuàng)建與使用,然后給出數(shù)據(jù)庫的相關(guān)知識:數(shù)據(jù)庫表與視圖等。
5.1創(chuàng)建數(shù)據(jù)庫用戶可以在項目管理器中建立一個屬于項目的數(shù)據(jù)庫。建立方法是:打開一個項目(如xm.pjx)或新建一個項目(參閱2.2節(jié)),在“項目管理器”對話框的“數(shù)據(jù)”選項卡中,選定“數(shù)據(jù)庫”項,單擊“新建”按鈕,系統(tǒng)打開“新建數(shù)據(jù)庫”對話框,如圖5-1所示。在“新建數(shù)據(jù)庫”對話框中,選擇“新建數(shù)據(jù)庫”項或“數(shù)據(jù)庫向?qū)А表椂伎梢越⒁粋€數(shù)據(jù)庫,但建立的過程不同。用“新建數(shù)據(jù)庫”項建立數(shù)據(jù)庫比較直接、簡單,用“數(shù)據(jù)庫向?qū)А表椊?shù)據(jù)庫比較復(fù)雜、規(guī)范。在一般情況下,用“新建數(shù)據(jù)庫”項比較方便、有效,是一種常用的方法。
5.1.1利用“新建數(shù)據(jù)庫”項建立數(shù)據(jù)庫
在圖5-l中,如果選擇“新建數(shù)據(jù)庫”項,則打開“創(chuàng)建”對話框,如圖5-2所示。在“創(chuàng)建”對話框中選擇保存目錄位置(如E:\vf)和確定數(shù)據(jù)庫文件名(如學(xué)生管理)后單擊“保存”按鈕,打開數(shù)據(jù)庫設(shè)計器,如圖5-3所示。剛建立的數(shù)據(jù)庫是一個沒有數(shù)據(jù)的數(shù)據(jù)庫,用戶可以通過數(shù)據(jù)庫設(shè)計器向數(shù)據(jù)庫中添加表或視圖。如果不向數(shù)據(jù)庫中添加表或視圖,可以關(guān)閉數(shù)據(jù)庫設(shè)計器,系統(tǒng)將回到“項目管理器”對話框。在“項目管理器”對話框上將顯示建立的數(shù)據(jù)庫。通過“項目管理器”對話框,用戶可以再向數(shù)據(jù)庫中添加表或視圖。在“新建數(shù)據(jù)庫”對話框中,如果選擇“數(shù)據(jù)庫向?qū)А表?,系統(tǒng)將引導(dǎo)用戶建立一個數(shù)據(jù)庫,并引導(dǎo)用戶向數(shù)據(jù)庫中添加數(shù)據(jù)表或視圖。詳細過程限于篇幅不再敘述。5.1.2數(shù)據(jù)庫設(shè)計器
可以使用以下3種方法打開數(shù)據(jù)庫設(shè)計器:①在“項目管理器”對話框中選擇要修改的數(shù)據(jù)庫,單擊“修改”按鈕;②在“項目管理器”對話框中選擇要修改的數(shù)據(jù)庫,雙擊該數(shù)據(jù)庫;③在有數(shù)據(jù)庫表被打開的情況下,在“項目管理器”對話框中選擇要修改的數(shù)據(jù)庫或該數(shù)據(jù)庫下的表,通過“顯示”菜單,選擇“數(shù)據(jù)庫設(shè)計器”命令。數(shù)據(jù)庫設(shè)計器顯示數(shù)據(jù)庫中包含的全部表、視圖和關(guān)系。在數(shù)據(jù)庫設(shè)計器活動時,主菜單欄顯示“數(shù)據(jù)庫”菜單項,如圖5-4所示。圖5-5所示為有數(shù)據(jù)的數(shù)據(jù)庫設(shè)計器,其中每個表或視圖都是一個可調(diào)整大小的窗口,窗口中列出表的字段和索引(如果存在)??梢酝蟿颖砗鸵晥D來移動位置,或者使用“數(shù)據(jù)庫”菜單中的“重排”命令。如果要顯示或隱藏窗口中的對象,可以使用“數(shù)據(jù)庫”菜單中的“屬性”命令來顯示不同的內(nèi)容。
1.工具欄“數(shù)據(jù)庫設(shè)計器”工具欄在數(shù)據(jù)庫設(shè)計器激活時顯示,或通過“顯示”菜單中的“工具欄”命令,選中“數(shù)據(jù)庫設(shè)計器”項,單擊“確定”按鈕激活?!皵?shù)據(jù)庫設(shè)計器”工具欄中包括的按鈕,2.快捷菜單數(shù)據(jù)庫設(shè)計器中提供一些有用命令的快捷方式。如果右鍵單擊數(shù)據(jù)庫設(shè)計器的空白處或某一表內(nèi)的不同位置,則打開數(shù)據(jù)庫設(shè)計器的快捷菜單??旖莶藛伟韵逻x項。(1)全部展開:展開所有在數(shù)據(jù)庫設(shè)計器中折疊的表。(2)全部折疊:折疊所有的表,只有表的標題是可見的。(3)查找對象:顯示“查找表或視圖”對話框。使用這個對話框,可以在數(shù)據(jù)庫中找到對象的位置。(4)新建表:顯示“新建表”對話框。利用這個對話框,可以通過表向?qū)Щ虮碓O(shè)計器來創(chuàng)建一個新表。(5)添加表:顯示“打開”對話框。利用這個對話框可以將已有的表添加到數(shù)據(jù)庫中,也可以把任何一個不屬于數(shù)據(jù)庫的表加到該數(shù)據(jù)庫中。在同一時間,一個表只能屬于一個數(shù)據(jù)庫,如果要把一個屬于其他數(shù)據(jù)庫的表添加到數(shù)據(jù)庫中,需要先從別的數(shù)據(jù)庫中移去它。(6)新建遠程視圖:顯示“新建遠程視圖”對話框。利用這個對話框,可以通過遠程視圖向?qū)Щ蛞晥D設(shè)計器創(chuàng)建新的遠程視圖。(7)新建本地視圖:顯示“新建本地視圖”對話框。利用這個對話框,可以通過本地視圖向?qū)Щ蛞晥D設(shè)計器創(chuàng)建新的本地視圖。(8)編輯參照完整性:顯示“參照完整性生成器”對話框。在這個對話框內(nèi)可以設(shè)置規(guī)則來控制記錄的插入、更新或刪除。(9)編輯存儲過程:在編輯窗口顯示當前數(shù)據(jù)庫所有的VisualFoxPro存儲過程。(10)連接:顯示“連接”對話框。利用這個對話框,可以選擇是否修改連接遠程數(shù)據(jù)源的現(xiàn)有連接,或者創(chuàng)建新的連接。(11)屬性:顯示“數(shù)據(jù)庫屬性”對話框。在這個對話框中,可以選擇要顯示方案中的對象,或者向數(shù)據(jù)庫增加一條注釋。(12)刪除關(guān)系:刪除選中的表的關(guān)系。在數(shù)據(jù)庫設(shè)計器中,在兩表之間的關(guān)系上單擊鼠標右鍵,該命令便會出現(xiàn)。(13)編輯關(guān)系:顯示“編輯關(guān)系”對話框。利用這個對話框可以修改兩個表之間的永久關(guān)系。在數(shù)據(jù)庫設(shè)計器中,選中一條關(guān)系直線可以激活此命令。(14)瀏覽:在瀏覽窗口顯示被選中的表,以便查詢和編輯。(15)刪除:從數(shù)據(jù)庫設(shè)計器中刪除一個表。這個命令在數(shù)據(jù)庫設(shè)計器中只有通過快捷菜單才能訪問。(16)折疊:折疊選中的表,只有表的標題是可見的。(17)展開:展開折疊的表,可以觀察表的字段名字。(18)修改:在表設(shè)計器中打開選中的表,或者在視圖設(shè)計器中打開選中的視圖。用表設(shè)計器來創(chuàng)建和修改表、字段、索引、默認字段值、有效性規(guī)則、觸發(fā)器和注釋。(19)幫助:顯示被選菜單項的幫助窗口。5.1.3常用操作
數(shù)據(jù)庫創(chuàng)建后,若還不是項目的一部分,可以把它加入到項目中;若該數(shù)據(jù)庫已經(jīng)是項目的一部分,也可以將它從項目中移走;若不再需要此數(shù)據(jù)庫,也可以將它刪除。項目管理器中的數(shù)據(jù)庫如圖
1.添加數(shù)據(jù)庫要把數(shù)據(jù)庫添加到項目中,只能通過“項目管理器”對話框來實現(xiàn)。若要把數(shù)據(jù)庫添加到項目中,在“項目管理器”對話框中選擇“數(shù)據(jù)”選項卡,在“數(shù)據(jù)”選項卡中選擇“數(shù)據(jù)庫”項,然后單擊“添加”按鈕,通過“打開”對話框選擇需要添加的數(shù)據(jù)庫。2.修改數(shù)據(jù)庫若要修改數(shù)據(jù)庫,在“項目管理器”對話框中選定要修改的數(shù)據(jù)庫并單擊“修改”按鈕,系統(tǒng)打開數(shù)據(jù)庫設(shè)計器。可以通過數(shù)據(jù)庫設(shè)計器修改數(shù)據(jù)庫。3.關(guān)閉數(shù)據(jù)庫若要關(guān)閉數(shù)據(jù)庫,在“項目管理器”對話框中選定要關(guān)閉的數(shù)據(jù)庫并單擊“關(guān)閉”按鈕。要關(guān)閉的數(shù)據(jù)庫必須是目前打開的數(shù)據(jù)庫。一個項目中允許有多個數(shù)據(jù)庫,也允許有多個數(shù)據(jù)庫被打開或關(guān)閉。當一個數(shù)據(jù)庫被關(guān)閉后,數(shù)據(jù)庫中的表、視圖等內(nèi)容將被凍結(jié),不能被調(diào)用,除非數(shù)據(jù)庫再次被打開。當打開一個項目而項目中的數(shù)據(jù)庫沒有被操作時,項目中的數(shù)據(jù)庫屬于關(guān)閉狀態(tài)。4.打開數(shù)據(jù)庫若要打開數(shù)據(jù)庫,在“項目管理器”對話框中選定要打開的數(shù)據(jù)庫并單擊“打開”按鈕。要打開的數(shù)據(jù)庫必須是目前關(guān)閉的數(shù)據(jù)庫。當一個數(shù)據(jù)庫被打開后,數(shù)據(jù)庫中的表、視圖等可以被調(diào)用和更新。當打開一個項目而數(shù)據(jù)庫中的項目沒有被操作時,項目中的數(shù)據(jù)庫屬于關(guān)閉狀態(tài),但當單擊數(shù)據(jù)庫名前的“+”號或者通過命令打開數(shù)據(jù)庫時,數(shù)據(jù)庫將被打開。5.移去數(shù)據(jù)庫要從項目中移去數(shù)據(jù)庫,只能通過“項目管理器”對話框來實現(xiàn)。若要從項目中移去數(shù)據(jù)庫,在“項目管理器”對話框中選定要移去的數(shù)據(jù)庫并單擊“移去”按鈕,然后再次單擊“移去”按鈕。6.刪除數(shù)據(jù)庫若要刪除數(shù)據(jù)庫,在“項目管理器”對話框中選定要刪除的數(shù)據(jù)庫并單擊“移去”按鈕,然后再單擊“刪除”按鈕。
5.1.4相關(guān)命令和函數(shù)
1.CREATEDATABASE作用:創(chuàng)建一個數(shù)據(jù)庫,并打開它。語法:CREATEDATABASE[數(shù)據(jù)庫名]【例5-1】在命令窗口中,用CREATEDATABASE命令,在E盤xl目錄下data子目錄中創(chuàng)建databaseTWO數(shù)據(jù)庫。CREATEDATABASEE:\xl\data\databaseTWO2.OPENDATABASE作用:打開一個數(shù)據(jù)庫。語法:OPENDATABASE[數(shù)據(jù)庫名|?]【例5-2】在命令窗口中,用OPENDATABASE命令,打開E盤vf目錄下學(xué)生管理數(shù)據(jù)庫。OPENDATABASEE:\vf\學(xué)生管理4.CLOSEDATABASE作用:關(guān)閉當前指定的數(shù)據(jù)庫。語法:CLOSEDATABASE用CLOSEDATABASE命令只能關(guān)閉當前操作的數(shù)據(jù)庫,可以使用CLOSEALL命令關(guān)閉數(shù)據(jù)庫及所有其他已打開的對象。5.DELETEDATABASE作用:從磁盤上刪除數(shù)據(jù)庫。語法:DELETEDATABASE數(shù)據(jù)庫名【例5-4】在命令窗口中,刪除E盤xl目錄下data子目錄中的databaseTWO數(shù)據(jù)庫。DELETEDATABASEE:\xl\data\databaseTWO6.DBC()函數(shù)作用:返回當前數(shù)據(jù)庫的名稱和路徑。語法:DBC()返回值類型:字符型如果沒有當前數(shù)據(jù)庫,則DBC()返回空字符串?!纠?-5】執(zhí)行命令,打開E盤vf目錄下的學(xué)生管理數(shù)據(jù)庫,顯示DBC()函數(shù)值。OPENDATABASEE:\vf\學(xué)生管理 &&打開數(shù)據(jù)庫學(xué)生管理?DBC() &&顯示結(jié)果:E:\vf\學(xué)生管理.dbc5.2數(shù)據(jù)庫表與自由表
一個VisualFoxPro表文件,有兩種存在狀態(tài),分別是:數(shù)據(jù)庫中的表,即數(shù)據(jù)庫表(與數(shù)據(jù)庫相關(guān)聯(lián)的表);不屬于任何數(shù)據(jù)庫的表,即自由表(與數(shù)據(jù)庫無關(guān)聯(lián)的表)。可以將自由表添加到數(shù)據(jù)庫中,使之成為數(shù)據(jù)庫表;也可以將數(shù)據(jù)庫表從數(shù)據(jù)庫中移出,使之成為自由表。
5.2.1數(shù)據(jù)庫表的特性與創(chuàng)建
1.數(shù)據(jù)庫表的特性數(shù)據(jù)庫表比自由表獲得更規(guī)范的管理,并具有以下自由表沒有的特性:①
長表名和表中的長字段名;②
表中字段的標題和注釋;③
默認值、輸入掩碼和表中字段格式化;④
表字段的默認控件類;⑤
字段級規(guī)則和記錄級規(guī)則;⑥
支持參照完整性的主關(guān)鍵字索引和表間關(guān)系;⑦
具有INSERT、UPDATE或DELETE事件的觸發(fā)器。
2.創(chuàng)建數(shù)據(jù)庫表通過菜單系統(tǒng)、項目管理器或者使用命令,都可以在數(shù)據(jù)庫中創(chuàng)建新表。建立數(shù)據(jù)庫表常用的方法是使用項目管理器,具體操作如下。(1)在“項目管理器”對話框中選定數(shù)據(jù)庫,如學(xué)生管理,然后選定“表”選項,再單擊““新建”按鈕(2)在“新建表”對話框中選擇“新建表”項或“表向?qū)А表棧ㄍ杂杀?,不再敘述)。如果選擇了“新建表”項,系統(tǒng)將打開一個“創(chuàng)建”對話框,在“創(chuàng)建”對話框中確定存放位置和表文件名。(3)單擊“保存”按鈕,系統(tǒng)將打開數(shù)據(jù)庫表的表設(shè)計器。通過表設(shè)計器定義表的結(jié)構(gòu),定義結(jié)束后,單擊“確定”按鈕,系統(tǒng)將建立一個只有表結(jié)構(gòu)的表文件。表的結(jié)構(gòu)建立后,用戶可以輸入數(shù)據(jù),也可以放棄輸入數(shù)據(jù),待以后再添加數(shù)據(jù)。5.2.2添加或移去表
1.將自由表添加到數(shù)據(jù)庫在項目管理器或數(shù)據(jù)庫設(shè)計器中都可以很方便地將自由表添加到數(shù)據(jù)庫中在“項目管理器”對話框中,將要添加自由表的數(shù)據(jù)庫展開至表,并確認當前選“表”項,如圖5-7所示。單擊“添加”按鈕,然后從彈出的“打開”對話框中選擇要填加到當前數(shù)據(jù)庫的自由表,即擴展名為.dbf的文件。在數(shù)據(jù)庫設(shè)計器中,可以從“數(shù)據(jù)庫”菜單中選擇“添加表”命令,然后從“打開”話框中選擇要添加到當前數(shù)據(jù)庫的自由表。另外,還可以用ADDTABLE命令添加一個自由表到當前數(shù)據(jù)庫中,具體命令格式是:ADDTABLE表名|?[NAME長表名]選擇“?”號,則顯示“打開”對話框,從中選擇要添加到數(shù)據(jù)庫中的表?!纠?-6】把自由表xsh1.dbf添加到當前數(shù)據(jù)庫,并給出具有說明意義的長表名。執(zhí)行如下語句:ADDTABLExsh1NAME學(xué)生入學(xué)登記表以后在數(shù)據(jù)庫中使用命令“USExsh1”和使用命令“USE學(xué)生入學(xué)登記表”是等價的。注意:一個表只能屬于一個數(shù)據(jù)庫。當一個自由表添加到某個數(shù)據(jù)庫后,就不再是自由表了,所以不能把已經(jīng)屬于某個數(shù)據(jù)庫的表添加到當前數(shù)據(jù)庫,否則會有出錯提示。2.從數(shù)據(jù)庫中移出表當數(shù)據(jù)庫不再使用某個表,而其他數(shù)據(jù)庫要使用該表時,必須將該表從當前數(shù)據(jù)庫中移出,使之成為自由表。在項目管理器或數(shù)據(jù)庫設(shè)計器中都可以很方便地將數(shù)據(jù)庫表移出數(shù)據(jù)庫。在“項目管理器”對話框中,將“數(shù)據(jù)庫”下的“表”項展開,并選擇所要移出的具體表(如xsh1),接著單擊“移去”按鈕,彈出提示對話框,單擊“移去”按鈕即可,圖5-8所示為將表xsh1.dbf從學(xué)生管理數(shù)據(jù)庫中移出。在數(shù)據(jù)庫設(shè)計器中要移出一個表,首先選擇該表,然后可以從“數(shù)據(jù)庫”菜單中選擇“移去”命令,或者單擊鼠標右鍵從快捷菜單中選擇“刪除”項,最后在提示的對話框中單擊“移去”按鈕即可。另外,還可以用REMOVETABLE命令將一個表從數(shù)據(jù)庫中移出,具體命令格式是:REMOVETABLE表名|?[DELETE][RECYCLE]DELETE:除把所選表從數(shù)據(jù)庫中移出之外,還將其從磁盤上刪除。RECYCLE:把所選表從數(shù)據(jù)庫中移出之后,放到Windows的回收站中,而并不立即從磁盤上刪除。注意:①以上操作從數(shù)據(jù)庫中移出表,使被移出的表成為自由表,所以應(yīng)該單擊“移去”按鈕;如果單擊“刪除”按鈕,則不僅從數(shù)據(jù)庫中將表移出,并且還從磁盤上刪除該表文件。②一旦某個表從數(shù)據(jù)庫中移出,那么與之聯(lián)系的所有主索引、默認值及有關(guān)的規(guī)則都隨之消失,因此,將某個表移出的操作會影響當前數(shù)據(jù)庫中與該表有聯(lián)系的其他表。③如果移出的表在數(shù)據(jù)庫中使用了長表名,那么表一旦移出了數(shù)據(jù)庫,長表名將不可再使用。
5.3
數(shù)據(jù)詞典與VisualFoxPro視圖
5.3.1數(shù)據(jù)詞典數(shù)據(jù)詞典(DataDictionary)用于保存對數(shù)據(jù)庫中各種數(shù)據(jù)的定義或設(shè)置信息,包括表的屬性、字段屬性、記錄規(guī)則、表間關(guān)系及參照完整性等,這些屬性或信息均可通過數(shù)據(jù)庫設(shè)計器來設(shè)置、顯示或修改。需要指出,當設(shè)計自由表時,表設(shè)計器也用來設(shè)置字段、索引和表的各種屬性。但若所設(shè)計的是數(shù)據(jù)庫表,設(shè)計的內(nèi)容要豐富得多。1.長表名、長字段名與注釋表和字段通常使用較短的名稱,但有時其含義難以表達清楚。為了使用戶便于將表或字段的含義表達出來,VisualFoxPro允許在數(shù)據(jù)詞典中為表或字段設(shè)置不超過128個字符的長名,還可以為表或字段增加適當?shù)淖⑨?。長表名、長字段名和注釋在創(chuàng)建表的過程中創(chuàng)建,存儲在.dbc文件中。長表名或長字段名可以在瀏覽窗口或各種設(shè)計器(如數(shù)據(jù)庫設(shè)計器、查詢設(shè)計器、視圖設(shè)計器等)的標題欄內(nèi)顯示。而注釋則通常出現(xiàn)在項目管理器中,當用戶在項目管理器中選定了一個表或一個字段后,項目管理器的底部就會出現(xiàn)事先在數(shù)據(jù)詞典中設(shè)置的注釋。2.設(shè)置字段屬性打開“學(xué)生管理”數(shù)據(jù)庫設(shè)計窗口,選定表xsh,執(zhí)行“顯示”菜單中的“表設(shè)計器”命令,顯示“表設(shè)計器”對話框,打開“字段”選項卡,如圖5-9所示。1)格式在圖5-9中,“顯示”區(qū)的“格式”文本框用于輸入格式表達式,確定字段在瀏覽窗口、表單或報表中顯示時采用的大小寫、字體和樣式。例如,輸入一個字符“A”,表示只能輸入字母;輸入一個字符“!”,表示使用瀏覽窗口輸入/輸出時將字母都轉(zhuǎn)換為大寫。2)輸入掩碼“顯示”區(qū)的“輸入掩碼”文本框用于輸入掩碼,指定字段的輸入格式,限制輸入數(shù)據(jù)的范圍,控制輸入數(shù)據(jù)的正確性,提高輸入速度。輸入掩碼可以是以下字符:X允許輸入字符9允許輸入數(shù)字#允許輸入數(shù)字、空格、+、
$顯示SETCURRENCY命令指出的貨幣號*在指定寬度中,值的左面顯示星號.指出小數(shù)點的位置,分隔小數(shù)點左面的數(shù)字與“格式”文本框不同的是,“輸入掩碼”文本框中必須按位指定格式。例如,字段“學(xué)號”的輸入掩碼設(shè)置為999999,對應(yīng)的9只允許輸入數(shù)字,不能輸入字母或其他符號。3)標題“顯示”區(qū)的“標題”文本框用于為瀏覽窗口、表單或報表中的字段標簽輸入表達式。例如,若在該文本框中輸入“學(xué)生編號”字樣,則在瀏覽窗口中,“學(xué)號”字段的列標題將顯示“學(xué)生編號”。4)字段有效性“字段有效性”區(qū)包括“規(guī)則”、“信息”和“默認值”3個文本框。可以直接在文本框中輸入數(shù)據(jù),也可以通過文本框右邊的對話按鈕顯示出“表達式生成器”對話框,在其中進行設(shè)置?!耙?guī)則”文本框用于輸入對字段數(shù)據(jù)有效性進行檢查的規(guī)則,即一個條件。例如,在“規(guī)則”文本框中輸入“LEFT(學(xué)號,1)<>"0"”。對于在學(xué)號字段輸入的數(shù)據(jù),VisualFoxPro會自動檢查它是否符合該條件,如果不符合則必須進行修改,直到符合條件,才允許光標離開學(xué)號字段。“信息”文本框用于指定出錯提示信息,當在字段中輸入的數(shù)據(jù)違反條件時,將顯示出錯提示信息。例如,在“信息”文本框中輸入“學(xué)號首位不能為0”,如果輸入的學(xué)號首位為0,則顯示出錯提示信息“學(xué)號首位不能為0”?!澳J值”文本框用于指定字段的默認值。當增加記錄時,字段默認值會在新記錄中顯示出來,從而提高輸入速度。例如,將學(xué)號字段的默認值設(shè)置為“890000”。3.設(shè)置記錄規(guī)則在圖5-9中,打開“表”選項卡,如圖5-10所示。在該選項卡中可以設(shè)置記錄有效性規(guī)則及出錯提示信息,還可以指定記錄插入、更新及刪除規(guī)則。1)記錄驗證記錄級有效性檢查規(guī)則用于檢查同一記錄中不同字段之間的邏輯關(guān)系?!坝涗浻行浴眳^(qū)中的“規(guī)則”文本框用于指定記錄級有效性檢查規(guī)則,光標離開當前記錄時進行校驗。“信息”文本框用于指定出錯提示信息,在校驗記錄級有效性規(guī)則時,發(fā)現(xiàn)輸入內(nèi)容與規(guī)則不符的情況時將顯示該出錯提示信息。例如,在“規(guī)則”文本框中輸入記錄級有效性規(guī)則為:LEFT(學(xué)號,2)=“89”ANDYEAR(入學(xué)年月)=1989該規(guī)則表示1989年入學(xué)的學(xué)生,學(xué)號前兩位為89。在“信息”文本框中輸入出錯提示信息:“不是89級學(xué)生”。如果在瀏覽窗口中輸入新記錄或修改出生日期,當學(xué)號與入學(xué)年月之間不符合上述有效性規(guī)則時,便自動顯示出錯提示信息“不是89級學(xué)生”。2)觸發(fā)器圖5-10所示“表”選項卡中的3個觸發(fā)器分別用于指定記錄的插入、更新和刪除規(guī)則?!安迦胗|發(fā)器”用于指定一個規(guī)則,每次向表中插入或追加記錄時觸發(fā)該規(guī)則,檢查新輸入的記錄是否滿足該規(guī)則。例如,在“插入觸發(fā)器”文本框中輸入條件:年齡>10AND年齡<=50表示向表中插入或追加記錄時,如果輸入的年齡不在指定范圍之內(nèi),則當光標離開該記錄時會顯示觸發(fā)器失敗信息框?!案掠|發(fā)器”用于指定一個規(guī)則,每次更新記錄時觸發(fā)該規(guī)則。例如,在“更新觸發(fā)器”文本框中輸入條件:RECNO()>=3表示從第3條記錄起才符合條件,即前兩條記錄不允許修改,只允許修改第3條及其以后的記錄。“刪除觸發(fā)器”用于指定一個規(guī)則,每次在表中刪除記錄(添加刪除標記)時觸發(fā)該規(guī)則。例如,在“刪除觸發(fā)器”文本框中輸入條件:LEFT(學(xué)號,2)#"89"表示89級的學(xué)生記錄不能刪除,而只能刪除非89級學(xué)生的記錄。4.主索引與永久關(guān)系1)主索引如果打開的是自由表,則“表設(shè)計器”對話框的“索引”選項卡的“類型”組合框中僅有3種索引類型:“普通索引”、“唯一索引”和“候選索引”。如果打開的是數(shù)據(jù)庫表,則“類型”組合框中有4種索引類型,即除了上述3種類型外,還有“主索引”。主索引的作用是不允許出現(xiàn)重復(fù)值,發(fā)現(xiàn)重復(fù)值則禁止存盤,故可以用作主關(guān)鍵字。另外,可以利用主索引建立永久關(guān)系,從而建立參照完整性。建立主索引的命令是:ALTERTABLE表名
ADD|DROPPRIMARYKEY索引關(guān)鍵字[TAG索引標識名]其中,ADD用于添加主索引,DROP用于刪除主索引。省略TAG短語時表示索引關(guān)鍵字同字段名。例如,為數(shù)據(jù)庫表xsh添加以“學(xué)號”字段為索引關(guān)鍵字的主索引,可使用命令:ALTERTABLExshADDPRIMARYKEY學(xué)號
TAGxh由于一個數(shù)據(jù)庫表只有一個主索引,所以刪除主索引不必指明索引關(guān)鍵字。例如,刪除數(shù)據(jù)庫表xsh主索引的命令為:ALTERTABLExshDROPPRIMARYKEY2)永久關(guān)系一個數(shù)據(jù)庫中可以包含多個數(shù)據(jù)庫表,它們彼此之間不是孤立的,而是存在著各種聯(lián)系。通過這種聯(lián)系,可以將數(shù)據(jù)庫中的表在邏輯上形成一個整體。在數(shù)據(jù)庫設(shè)計器中可以方便地建立表與表之間的關(guān)系,這種關(guān)系將作為數(shù)據(jù)庫的組成部分而被永久保存,故稱為永久關(guān)系??梢?,永久關(guān)系是數(shù)據(jù)庫表與數(shù)據(jù)庫表之間的關(guān)系。要建立數(shù)據(jù)庫表與數(shù)據(jù)庫表之間的關(guān)系,必須先在父表中建立主索引。例如,在“學(xué)生管理”數(shù)據(jù)庫中,有學(xué)生表(xsh.dbf,見圖4-1)和選課表(xke.dbf,見圖5-11):xke(學(xué)號C(6),課號C(3),成績N(5,2))。xsh表的關(guān)鍵字段“學(xué)號”定義為主索引xhl,xke表的關(guān)鍵字段也是“學(xué)號”,將其定義為普通索引xh2。在數(shù)據(jù)庫表xsh和xke之間建立永久關(guān)系的方法如下。將鼠標指針指向數(shù)據(jù)庫表xsh的主索引xh1,并將它拖動到數(shù)據(jù)庫表xke中的普通索引xh2即可。二者之間畫出一條連線,稱為關(guān)系線,如圖
建立了兩個數(shù)據(jù)庫表之間的關(guān)系后,系統(tǒng)將根據(jù)兩個相關(guān)聯(lián)的關(guān)鍵字在各表中的索引類型自動確定其關(guān)系類型:一對一或者一對多關(guān)系。圖5-12中的關(guān)系線一端為1根,另一端為3根,表示一對多關(guān)系的一端與多端。雙擊關(guān)系線,則顯示“編輯關(guān)系”對話框,如圖5-13所示,在該對話框中可以修改數(shù)據(jù)庫表之間的關(guān)系。5.參照完整性以上介紹了字段級和記錄級驗證規(guī)則。參照完整性屬于表間規(guī)則。對于永久關(guān)系的相關(guān)表,在更新、插入或刪除記錄時,若只改其一不改其二,則必然會影響數(shù)據(jù)的完整性。例如,修改父表中關(guān)鍵字(學(xué)號)值后,子表中關(guān)鍵字(學(xué)號)值未做相應(yīng)修改;刪除父表中某記錄后,子表中相應(yīng)記錄未刪除,使這些記錄成為孤立記錄;對于子表插入的記錄,父表中沒有相應(yīng)關(guān)鍵字值的記錄等。這些涉及表間數(shù)據(jù)的完整性,統(tǒng)稱之為參照完整性(ReferentialIntegrity,簡稱RI)。為保證參照完整性,可以手工調(diào)整,但操作方法相當繁瑣。VisualFoxPro提供了參照完整性規(guī)則,我們可以利用參照完整性生成器來選擇要不要保持參照完整性,并可控制在相關(guān)表中更新、插入或刪除記錄。1)“參照完整性生成器”對話框打開數(shù)據(jù)庫設(shè)計器后,可以利用以下3種方法之一打開“參照完整性生成器”對話框:①
執(zhí)行“數(shù)據(jù)庫”菜單中的“編輯參照完整性”命令。②
在數(shù)據(jù)庫設(shè)計器中雙擊兩個表之間的關(guān)系線,彈出“編輯關(guān)系”對話框,單擊該對話框中的“參照完整性”按鈕(見圖5-13)。③
在數(shù)據(jù)庫設(shè)計器中空白處右擊,在彈出的快捷菜單中選擇“編輯參照完整性”命令。利用上述方法打開的“參照完整性生成器”對話框如圖5-14所示。在該對話框中,有3個選項卡:①“更新規(guī)則”選項卡用于指定修改父表中關(guān)鍵字值時所用的規(guī)則。②“刪除規(guī)則”選項卡用于指定刪除父表中的記錄時所用的規(guī)則。③
“插入規(guī)則”選項卡用于指定在子表中插入新記錄或更新已存在的記錄時所用的規(guī)則。此外,“參照完整性生成器”對話框中的表格表達了表的連接情況及是否要保持參照完整性的規(guī)則。其中,“父表”列顯示連接表的父表名;“子表”列顯示連接表的子表名;“更新”列、“刪除”列和“插入”列顯示所選定的單選鈕的名稱,當單擊這3列的單元格(即表格中由橫線和豎線分割成的小長方形格子)時,會出現(xiàn)一個組合框,供用戶選擇級聯(lián)、限制或忽略功能;“父標記”列顯示父表的索引標識名;“子標記”列顯示子表的索引標識名。2)設(shè)置參照完整性為了確保相關(guān)表之間數(shù)據(jù)的一致性,需要設(shè)置參照完整性規(guī)則,設(shè)置方法如下(請參考圖5-14):①選定某一規(guī)則選項卡。②選定某一單選鈕。③在表格中選定某行并設(shè)置兩表的連接。④瀏覽有關(guān)表的內(nèi)容,檢查設(shè)置的正確性。例如,選定“更新規(guī)則”選項卡,選定“級聯(lián)”單選鈕,單擊表格第1行行首的按鈕(即選定xsh與xke兩表的連接),瀏覽xsh表,并將學(xué)號字段值980012改為980000,再瀏覽xke表,可以看到學(xué)號字段值980012已自動改為980000,從而保證了相關(guān)表之間數(shù)據(jù)的一致性。
5.3.2VisualFoxPro視圖
VisualFoxPro視圖是從SQL語言移植而來的,所以又稱SQL視圖。VisualFoxPro中的視圖數(shù)據(jù)在調(diào)用或刷新視圖時建立,在關(guān)閉視圖時消失。視圖的數(shù)據(jù)只能存在于內(nèi)存中,而不能記錄在磁盤上,視圖的表示形式和數(shù)據(jù)特性與數(shù)據(jù)庫表一樣,具有與數(shù)據(jù)庫表一樣的操作方法。由于視圖的數(shù)據(jù)來自于已存在的數(shù)據(jù)庫表或其他視圖,所以可將視圖視為虛擬表。VisualFoxPro視圖的引入便于數(shù)據(jù)的檢索和重組。通過視圖可以查詢表,也可以更新表。但只有在包含視圖的數(shù)據(jù)庫打開時,才能使用視圖。如果視圖中有取自遠程數(shù)據(jù)源(如網(wǎng)絡(luò)服務(wù)器)的數(shù)據(jù),則該視圖稱為遠程視圖,否則稱為本地視圖。
1.視圖的創(chuàng)建可以使用以下方法建立視圖。①
用CREATEVIEW命令打開視圖設(shè)計器建立視圖。②
選擇“文件”菜單下的“新建”命令,或單擊“常用”工具欄上的“新建”按鈕,打開“新建”對話框,然后選擇“視圖”項并單擊“新建文件”按鈕打開視圖設(shè)計器建立視圖。③
在“項目管理器”對話框的“數(shù)據(jù)”選項卡下將要建立視圖的數(shù)據(jù)庫分支展開,并選擇“本地視圖”項或“遠程視圖”項,然后單擊“新建”按鈕打開視圖設(shè)計器建立視圖。④如果熟悉SQLSELECT(第6章介紹),還可以直接用建立視圖的SQL命令建立視圖。用命令方式創(chuàng)建視圖前,必須先打開數(shù)據(jù)庫。命令格式為:CREATESQLVIEW視圖名[REMOTE][CONNECTION新建連接名;[SHARE]|已連接數(shù)據(jù)源名][ASSELECT-SQL命令]該命令的功能是按照AS子句中的SELECT-SQL命令提出的查詢要求,創(chuàng)建本地或遠程的SQL視圖。AS子句中的SELECT-SQL命令用于指定視圖從哪些數(shù)據(jù)庫表中提取數(shù)據(jù),提取哪些字段的數(shù)據(jù)及條件。使用REMOTE選項可創(chuàng)建遠程視圖,并用CONNECTION子句創(chuàng)建一個新的連接或指定一個已連接的數(shù)據(jù)源。【例5-7】從學(xué)生管理數(shù)據(jù)庫所屬的xsh和xke兩個表中抽取學(xué)號、姓名和課號3個字段,組成名稱為“xhkh”的SQL視圖。使用的命令如下:SETDEFATOE:\vfCREATESQLVIEWxhkhASSELECTxsh.學(xué)號,xsh.姓名,;xke.課號FROMxsh,xkeWHERExsh.學(xué)號=xke.學(xué)號本例創(chuàng)建的視圖可以在項目管理器中瀏覽或修改。在項目管理器中,選定“學(xué)生管理”數(shù)據(jù)庫及“xhkh”視圖后,單擊“瀏覽”按鈕即可打開視圖瀏覽窗口,單擊“修改”按鈕即可打開視圖設(shè)計器,來修改視圖。2.視圖設(shè)計器可以用視圖設(shè)計器來建立和修改視圖。視圖設(shè)計器是建立和修改視圖最直接、最方便、最有效的工具。視圖設(shè)計器有十分強大的功能和友好的操作界面,使得在設(shè)計視圖時得心應(yīng)手。視圖設(shè)計器界面如圖5-15所示,它所包含的各選項卡內(nèi)容如下1)“字段”選項卡列出可選的字段,指定查詢或視圖輸出的字段,合計函數(shù)和其他表達式。圖5-15所示為“字段”選項卡。
“可用字段”列表框:列出目前可用的字段,這些字段可能來自一個表或視圖,也可能來自多個表或視圖,字段名前的字符為表名,表名與字段名之間用“.”相隔。“函數(shù)和表達式”文本框:指定一個函數(shù)或表達式。在“函數(shù)和表達式”文本框中輸入一個函數(shù)或表達式,或通過表達式生成器生成一個表達式,單擊“添加”按鈕后,該表達式將被添加到選定字段中。當視圖運行時,該表達式將以字段的形式在視圖中顯示。例如,添加一個表達式:xsh.姓名+xsh.性別則在視圖輸出中將有一列exp_4,顯示姓名和性別內(nèi)容,如圖“選定字段”列表框:列出出現(xiàn)在視圖運行結(jié)果中的字段、合計函數(shù)和其他表達式,可以拖動字段左邊的垂直雙箭頭來調(diào)整輸出順序?!皩傩浴卑粹o:顯示“視圖字段屬性”對話框,指定視圖中的字段選項,這與在數(shù)據(jù)庫表中的字段操作相同。此選項只能在視圖設(shè)計器中使用。2)“聯(lián)接”選項卡指定連接表達式,用來匹配多個表或視圖中的記錄。為一個或多個表或視圖中匹配和選擇記錄指定連接條件。“聯(lián)接”選項卡如圖
“條件”列:在查詢中,如果有多個表連接在一起,則會顯示此按鈕。在“聯(lián)接條件”下拉列表中,單擊水平雙箭頭,系統(tǒng)將打開“聯(lián)接條件”窗口,通過該窗口可以修改連接?!邦愋汀绷校褐付ㄟB接條件的類型。在默認情況下,連接條件的類型為內(nèi)部連接(InnerJoin)。新建一個連接條件時,單擊該字段可顯示一個連接類型的下拉列表。InnerJoin:指定只有滿足連接條件的記錄包含在結(jié)果中。此類型是默認的,也是最常使用的連接類型。RightOuterJoin:指定滿足連接條件的記錄,以及連接條件右側(cè)的表中記錄(即使不匹配連接條件)都包含在結(jié)果中。LeftOuterJoin:指定滿足連接條件的記錄,以及連接條件左側(cè)的表中記錄(即使不匹配連接條件)都包含在結(jié)果中。FullJoin:指定所有滿足和不滿足連接條件的記錄都包含在結(jié)果中?!白侄蚊绷校褐付ㄟB接條件的第一個字段。在創(chuàng)建一個新的連接條件時,單擊字段,顯示可用字段的下拉列表。否”列:反轉(zhuǎn)條件,排除與該條件相匹配的記錄?!皸l件”列:指定比較類型。“值”列:指定連接條件中的其他表和字段?!斑壿嫛绷校涸谶B接條件列表中添加AND或OR條件?!安迦搿卑粹o:在所選定條件之上插入一個空連接條件?!耙迫ァ卑粹o:從查詢中刪除選定的條件。3)“篩選”選項卡指定視圖列出記錄的條件,視圖運行后從數(shù)據(jù)源中選擇篩選條件來篩選記錄,從而實現(xiàn)記錄的檢索?!昂Y選”選項卡如圖5-18所示。移動按鈕(最左側(cè)的上下箭頭):拖動移動按鈕,可以在列表內(nèi)上下移動選定的項?!皩嵗绷校褐付ū容^條件,可以是表達式,也可以是一個變量。如果是變量,則在變量前要加一個“?”號。如果“字段名”列選擇“Xsh.性別”,“條件”列選擇“=”,“實例”列選擇“”男“”,同時,“字段名”列選擇“Xke.課號”,“條件”列選擇“=”,“實例”列選擇“”1“”,“否”列選中,則視圖的運行結(jié)果如果將“實例”列改為“?kh”,則視圖運行后要求為變量kh輸入一個變量值。如果kh變量為全局變量,則可以通過改變變量值來改變篩選條件,從而實現(xiàn)檢索出不同的記錄,這就是視圖的檢索功能“大小寫”列:指定在條件中是否與實例的大小寫(大寫或小寫)相匹配?!斑壿嫛绷校涸谶M行多個條件篩選時,指定各個條件間關(guān)系,條件列表中有AND或OR條件關(guān)系。AND表示同時滿足條件,OR表示任一個滿足條件。4)“排序依據(jù)”選項卡指定關(guān)鍵字段,使得視圖輸出按關(guān)鍵字段進行排序?!芭判驐l件”:指定用于排序查詢的字段和表達式,每一個字段左側(cè)的箭頭指定排序規(guī)則,箭頭左側(cè)顯示的移動框可以更改字段的順序?!芭判蜻x項”:升序,指定以升序排列“排序條件”框中的選定項;降序,指定以降序排列選定項。5)“分組依據(jù)”選項卡對視圖結(jié)果進行分組,使輸出組做進一步的篩選?!胺纸M字段”:列出確定查詢結(jié)果分組的字段、合計函數(shù)和其他表達式。字段按照它們在列表中顯示的順序分組??梢酝蟿幼侄巫筮叺拇怪彪p箭頭,更改字段順序和分組層次。“滿足條件”:顯示“滿足條件”對話框,從而可以為記錄組而不是單個記錄設(shè)置選擇條件。6)“更新條件”選項卡指定條件,將視圖中所做的修改傳送到視圖所使用的數(shù)據(jù)源記錄中,修改數(shù)據(jù)源的數(shù)據(jù)。該選項卡僅顯示于“視圖設(shè)計器”對話框中?!案聴l件”選項卡“表”下拉列表:指定視圖所使用的哪些表可以修改。此列表中所顯示的表,包含了“字段”選項卡“選定字段”列表中的所有字段,如果選擇“全部”項,則在“字段名”列表框中顯示視圖全部字段?!爸刂藐P(guān)鍵字”按鈕:從每個表中選擇主關(guān)鍵字字段作為視圖的關(guān)鍵字字段。對于“字段名”列表框中的每個主關(guān)鍵字字段,在鑰匙符號下面單擊,打一個“”。關(guān)鍵字字段可用來使視圖中的修改與表中的原始記錄相匹配。一個數(shù)據(jù)表或視圖至少要有一個關(guān)鍵字段,才能設(shè)定視圖對數(shù)據(jù)源的更新。如果要設(shè)定需要更新的字段,可以單擊字段前鉛筆符號對應(yīng)的位置。“全部更新”按鈕:選擇除關(guān)鍵字字段以外的所有字段進行更新,并在“字段名”列表框的鉛筆符號下打一個“”?!鞍l(fā)送SQL更新”復(fù)選框:指定是否將視圖記錄中的修改傳送給原始表。如果要通過視圖的更新來更新數(shù)據(jù)表或視圖數(shù)據(jù)源的數(shù)據(jù),在選定關(guān)鍵字段和更新字段后,一定也要把該復(fù)選框選中?!白侄蚊绷斜砜颍猴@示所選的、用來輸出的也是可更新的字段。
關(guān)鍵字段(使用鑰匙符號作為標記)列:指定該字段是否為關(guān)鍵字段。
可更新字段(使用鉛筆符號作為標記)列:指定該字段是否為可更新字段。
“字段名”列:顯示可標志為關(guān)鍵字字段或可更新字段的輸出字段名?!癝QLWHERE子句包括”區(qū):控制將哪些字段添加到WHERE子句中,這樣在將視圖修改傳送到原始表時,就可以檢測服務(wù)器上的更新沖突。沖突是由視圖中的舊值和原始表的當前值之間的比較結(jié)果決定的,如果兩個值相等,則認為原始值未做修改,不存在沖突;如果它們不相等,則存在沖突,數(shù)據(jù)源返回一條錯誤信息?!瓣P(guān)鍵字段”單選鈕:如果在原始表中有一個關(guān)鍵字字段被改變,則設(shè)置是否使用WHERE子句檢測沖突。如果由另一用戶對表中原始記錄的其他字段做修改,則不進行比較?!瓣P(guān)鍵字和可更新字段”單選鈕:如果其他用戶修改了任何可更新的字段,則設(shè)置是否使用WHERE子句來檢測沖突。“關(guān)鍵字和已修改字段”單選鈕:如果在視圖首次檢索(默認)以后,關(guān)鍵字字段或原始表記錄的已修改字段中,某個字段做過修改,則設(shè)置是否使用WHERE子句來檢測沖突?!瓣P(guān)鍵字段和時間戳”單選鈕:如果自原始表記錄的時間戳首次檢索以后,它被修改過,則設(shè)置是否使用WHERE子句來檢測沖突?!笆褂酶隆眳^(qū):指定字段如何進行更新。
“SQLDELETE然后INSERT”單選鈕:如果一條記錄被修改,則首先刪除原始表中的這條記錄,然后在原始表中再創(chuàng)建一條記錄,而創(chuàng)建的記錄就是在視圖中被修改的記錄。“SQLUPDATE”單選鈕:用視圖字段中的數(shù)據(jù)來修改原始表中有改變的字段數(shù)據(jù),對于沒有改變數(shù)值的字段系統(tǒng)不進行更新。這種更新方法效率最高,是默認方法。
3.視圖的維護視圖的維護主要包括對視圖的重命名、修改和刪除等操作。1)重命名視圖(1)進入項目管理器,先選定一個數(shù)據(jù)庫名,如“學(xué)生管理”,再選定一個視圖名,如“xhkh”。(2)在“項目”菜單中選擇“重命名文件”命令(或從快捷菜單中選擇),彈出“重命名文件”對話框。在該對話框中輸入新名,單擊“確定”按鈕即可,也可以利用RENAMEVIEW命令重命名一個視圖。上例可以使用以下命令序列:OPENDATABASE學(xué)生管理RENAMEVIEWXHKHTO學(xué)生選課2)修改視圖修改視圖可以使用視圖設(shè)計器,也可以利用命令方式。(1)進入項目管理器,選定要修改的視圖所在的數(shù)據(jù)庫,再選定視圖,單擊“修改”按鈕,打開視圖設(shè)計器。(2)在視圖設(shè)計器中,選定要修改的視圖,打開“字段”選項卡,選擇需要修改的字段名(例如,將“Xsh.姓名+Xsh.性別”字段移去)。也可以使用如下命令對“學(xué)生選課”視圖進行修改:OPENDATABASE學(xué)生管理MODIFYVIEW學(xué)生選課
3)刪除視圖在項目管理器中,利用“移去”按鈕可以刪除視圖,也可以利用命令方式刪除視圖。例如,刪除“學(xué)生選課”視圖使用的命令是:OPENDATABASE學(xué)生管理DELETEVIEW學(xué)生選課4.使用視圖 視圖建立之后,不僅可以用它來顯示和更新數(shù)據(jù),而且還可以通過調(diào)整它的屬性來提高性能。視圖的使用類似于表。1)視圖操作視圖允許以下操作:①在數(shù)據(jù)庫中使用USE命令打開或關(guān)閉視圖;②在瀏覽器窗口中顯示或修改視圖中的記錄;③使用SQL語句操作視圖;④在文本框、表格控件、表單或報表中使用視圖作為數(shù)據(jù)源等。2)使用視圖可以在項目管理器中瀏覽視圖,也可以通過命令來使用視圖。一個視圖在使用時,將作為臨時表在自己的工作區(qū)中打開。如果此視圖基于本地表,即本地視圖,則在另一個工作區(qū)中同時打開基本表。視圖的基本表是由定義視圖的SQLSELECT語句訪問的。在項目管理器中使用視圖的方式是:先選擇一個數(shù)據(jù)庫,接著再選擇視圖名,然后選擇“瀏覽”按鈕,則在瀏覽窗口中顯示視圖,并可對視圖進行操作。對視圖的更新是否反映在了基本表里,取決于在建立視圖時是否在“更新條件”選項卡中選擇了“發(fā)送SQL更新”項??偟膩碚f,視圖一經(jīng)建立就基本可以像基本表一樣使用,適用于基本表的命令大都可以用于視圖。例如,在視圖上也可以建立索引,此索引當然是臨時的,視圖一旦關(guān)閉,索引自動刪除,多工作區(qū)時也可以建立聯(lián)系等。但視圖不可以用MODIFYSTRUCTURE命令修改結(jié)構(gòu)。因為視圖畢竟不是獨立存在的基本表,它是由基本表派生出來的,只能修改視圖的定義。
5.4多個表同時使用
前面各節(jié)總是強調(diào)對當前表進行操作,似乎默認了在同一時刻只能使用一個表、只能對一個表進行操作,實際不是這樣。在VisualFoxPro中,一次可以打開多個數(shù)據(jù)庫,在每個數(shù)據(jù)庫中都可以打開多個表,另外還可以打開多個自由表。
5.4.1
多工作區(qū)的概念
在FoxPro以前版本中,一直沿用了多工作區(qū)的概念,在每個工作區(qū)中可以打開一個表,即在一個工作區(qū)中不能同時打開多個表。如果在同一時刻需要打開多個表,則需要在不同的工作區(qū)中打開不同的表。系統(tǒng)默認總是在第1個工作區(qū)中工作,以前沒有指定工作區(qū),實際上都是在第1個工作區(qū)打開表和操作表。指定工作區(qū)的命令是:SELECT工作區(qū)號|表別名其中,工作區(qū)號最小是1,最大是32767,即同一時刻最多允許打開32767個表。如果這里指定為0,則選擇編號最小的可用工作區(qū),即尚未使用的工作區(qū)。如果在某個工作區(qū)中已經(jīng)打開了表,若要回到該工作區(qū)操作該表,可以使用參數(shù)表名或表的別名。
【例5-8】
分別在第1、2工作區(qū)打開學(xué)生表和選課表,并選擇當前工作區(qū)。OPENDATABASE學(xué)生管理SELECT1USExshSELECT2USExke如果要到第1個工作區(qū)操作學(xué)生表,則命令SELECTXSH和SELECT1是等價的。也可以在USE命令中直接指定在哪個工作區(qū)中打開表,例如,OPENDATABASE學(xué)生管理USExshIN1USExkeIN2每個表打開后都有兩個默認的別名,一個是表名自身,另一個是工作區(qū)所對應(yīng)的別名。在前10個工作區(qū)中指定的默認別名是工作區(qū)字母A~J,工作區(qū)11~32767中指定的別名是W11~W32767。另外,還可以在USE命令中用ALIAS短語指定別名。例如,命令“USExshIN1ALIASstudent”為學(xué)生表指定了別名student。
5.4.2使用不同工作區(qū)的表
除了可以用SELECT命令切換工作區(qū)使用不同的表外,也允許在一個工作區(qū)中使用另外一個工作區(qū)中的表。實際上,前面介紹過的某些命令有相關(guān)的選項,即短語:IN工作區(qū)號|別名例如,當前使用的是第2個工作區(qū)中的選課表,現(xiàn)在要將第1個工作區(qū)中的學(xué)生表定位在學(xué)號為890239的記錄上,可以使用命令:SEEK"890239"ORDERxh1INxshSELE1DISP在一個工作區(qū)中,還可以直接利用表名或表的別名引用另一個表中的數(shù)據(jù),具體方法是:在別名后加上“.”分隔符或“->”操作符,然后再接字段名。例如,當前使用的是第2個工作區(qū)中的選課表,現(xiàn)在要顯示第1個工作區(qū)中的學(xué)生表的學(xué)號和姓名字段的值,可以使用命令:?xsh.學(xué)號,xsh->姓名&&如果有別名,不用表名而要用別名5.4.3
表之間的關(guān)聯(lián)
前面介紹數(shù)據(jù)參照完整性時介紹了表之間的關(guān)聯(lián)或聯(lián)系,它們是基于索引建立的一種永久聯(lián)系。這種聯(lián)系存儲在數(shù)據(jù)庫中,可以在查詢設(shè)計器或視圖設(shè)計器中自動作為默認聯(lián)系條件保持數(shù)據(jù)庫表之間的聯(lián)系。永久聯(lián)系在數(shù)據(jù)庫設(shè)計器中顯示為表索引之間的連接線。雖然永久聯(lián)系在每次使用表時不需要重新建立,但永久聯(lián)系不能控制不同工作區(qū)中表記錄指針的聯(lián)動。所以在開發(fā)VisualFoxPro應(yīng)用程序時,不僅需用永久聯(lián)系,有時也需使用能夠控制表間記錄指針關(guān)系的臨時聯(lián)系,這種臨時聯(lián)系稱為關(guān)聯(lián)。使用SETRELATION命令建立,格式為:SETRELATIONTO表達式
INTO工作區(qū)號|別名其中,表達式指定建立臨時聯(lián)系的索引關(guān)鍵字,一般應(yīng)該是父表的主索引、子表的普通索引。用工作區(qū)號或表的別名說明臨時聯(lián)系是由當前工作區(qū)表到哪個表的。【例5-9】
設(shè)當前工作區(qū)是1號區(qū),通過“學(xué)號”索引建立學(xué)生表和選課表之間的臨時聯(lián)系。OPENDATABASE學(xué)生管理USExshIN1ORDERxh1USExkeIN2ORDERxh2SELECT1SETRELATIONTO學(xué)號
INTOxke這樣,當學(xué)生表記錄的指針變動時,選課表記錄的指針也隨之變動。SEEK"890239"DISP學(xué)號,姓名,xke.課號SELECT2GO3DISPxsh.學(xué)號,xsh.姓名,選課當臨時聯(lián)系不再需要時可以取消,命令SETRELATIONTO將取消當前表到所有表的臨時聯(lián)系。如果只是取消某個具體的臨時聯(lián)系,應(yīng)該使用命令:SETRELATIONOFFINTO工作區(qū)號|別名5.4.4數(shù)據(jù)工作期與視圖文件
數(shù)據(jù)工作期是一個用于設(shè)置工作環(huán)境的交互操作窗口,所設(shè)置的環(huán)境可以包括打開的表及其索引,多個表之間的關(guān)聯(lián)等狀態(tài)。這種環(huán)境可以作為視圖文件保存起來,需要時打開視圖文件就可恢復(fù)原來的環(huán)境。1.數(shù)據(jù)工作期窗口可以用菜單方式或命令方式打開數(shù)據(jù)工作期窗口。1)菜單方式選擇“窗口”→“數(shù)據(jù)工作期”命令,即打開數(shù)據(jù)工作期窗口,2)命令方式在命令窗口中直接執(zhí)行下列兩條命令之一即可打開數(shù)據(jù)工作期窗口:SET或 SETVIEWON數(shù)據(jù)工作期窗口包括3部分。左邊的“別名”列表框用于顯示目前已打開的表,并可從中選定一個表作為當前表;右邊的“關(guān)系”列表框用于顯示表之間的關(guān)聯(lián)狀況;中間是6個按鈕,其功能簡介如下?!皩傩浴卑粹o:用于打開“工作區(qū)屬性”對話框。在該對話框中可以對表進行各種設(shè)置。單擊“修改”按鈕則顯示表設(shè)計器,可以修改當前表的結(jié)構(gòu)、建立或修改索引。在“索引順序”組合框中可以選擇主控索引。選定“允許數(shù)據(jù)緩沖”復(fù)選框可以對多用戶操作進行記錄鎖定,修改之前進行記錄鎖定可以防止因其他用戶訪問而發(fā)生沖突?!盀g覽”按鈕:為當前表打開瀏覽窗口,用戶可以瀏覽或編輯數(shù)據(jù)。“打開”按鈕:顯示“打開”對話框來打開表。如果數(shù)據(jù)庫已打開,則可打開數(shù)據(jù)庫表。“關(guān)閉”按鈕:關(guān)閉當前表?!瓣P(guān)系”按鈕:以當前表為父表建立關(guān)聯(lián)。“一對多”按鈕:如果要建立一對多關(guān)系,可單擊該按鈕。系統(tǒng)默認表之間以多對一關(guān)系關(guān)聯(lián)。2.視圖文件數(shù)據(jù)工作期設(shè)置的環(huán)境可以作為視圖文件保存起來,需要時打開視圖文件可恢復(fù)原來的環(huán)境。1)視圖文件的建立①
菜單方式。在數(shù)據(jù)工作期窗口打開的情況下,執(zhí)行“文件”→“另存為”命令即可建立視圖文件,其默認擴展名為.vue。②
命令方式。當數(shù)據(jù)工作期窗口打開時,在命令窗口中執(zhí)行命令:CREATEVIEW視圖文件名2)視圖文件的打開打開視圖文件就相當于重新執(zhí)行一系列命令,恢復(fù)原來所設(shè)置的環(huán)境。利用菜單打開視圖文件的方法與打開其他類型的文件一樣。在命令窗口中執(zhí)行下列命令同樣可以打開視圖文件:SETVIEWTO視圖文件名打開視圖文件后,再打開數(shù)據(jù)工作期窗口,就可以看到以前所設(shè)置的環(huán)境了。
【例5-10】
視圖文件操作示例。在圖5-23所示的“數(shù)據(jù)工作期”窗口中,選定“別名”列表框中的表xke,單擊“屬性”按鈕,打開“工作區(qū)屬性”對話框,
在該對話框中,單擊“字段篩選”按鈕,打開“字段選擇器”對話框,在“所有字段”列表框中選定字段,單擊“添加”按鈕,添加到“選定字段”框內(nèi),確定后返回“工作區(qū)屬性”對話框。確定后返回“工作區(qū)屬性”對話框。在該對話框中,再選定“字段篩選指定的字段”單選鈕,并在“數(shù)據(jù)過濾器”文本框中輸入條件:“成績>=85”或單擊其右邊的省略號,打開“表達式生成器”對話框輸入條件后單擊“確定”按鈕,返回數(shù)據(jù)工作期窗口,單擊“瀏覽”按鈕,即可看到圖5-27所示的過濾結(jié)果。選擇“文件”→“保存”命令,將視圖文件保存為cji.vue。命令操作方式如下。建立視圖文件cji.vue命令:CREATEVIEWcji &&命令CLOSEALL關(guān)閉所有文件如果想重新瀏覽視圖,只要執(zhí)行打開視圖文件cji.vue的命令:SETVIEWTOcji
再打開數(shù)據(jù)工作期窗口,單擊“瀏覽”按鈕即可。
5.5實戰(zhàn)演練
5.5.1建立數(shù)據(jù)庫新建項目:rs.pjx,并按要求建立一個數(shù)據(jù)庫。①
數(shù)據(jù)庫名為職工管理。②
數(shù)據(jù)庫存放在E:\xl目錄中。操作方法如下:(1)首先,設(shè)置默認目錄為E:\xl(“工具”→“選項”→“文件位置”)。(2)執(zhí)行菜單命令:“文件”→“新建”→“項目”,建立項目文件rs。(3)在“項目管理器”對話框中選擇“數(shù)據(jù)”選項卡的數(shù)據(jù)庫項,單擊“新建”按鈕,系統(tǒng)打開“新建數(shù)據(jù)庫”對話框,如圖5-1所示。(4)單擊“新建”按鈕,再單擊“新建數(shù)據(jù)庫”按鈕,打開“創(chuàng)建”對話框。在“創(chuàng)建”對話框中確定數(shù)據(jù)庫存放位置(E:\xl)和數(shù)據(jù)庫文件名(職工管理),如圖5-2所示。(5)單擊“保存”按鈕,關(guān)閉數(shù)據(jù)庫設(shè)計器。至此,一個基于項目rs.pjx的“職工管理”數(shù)據(jù)庫(空庫)創(chuàng)建完畢。
5.5.2建立數(shù)據(jù)庫表
在上例創(chuàng)建的數(shù)據(jù)庫“職工管理”中,按照以下要求建立一個數(shù)據(jù)庫表(該表參見4.5節(jié)的圖4-14)。①
表名:zgda.dbf,注釋“職工檔案表”,保存位置:E:\xl文件夾。②
表結(jié)構(gòu):zgda(bhC(4),xmC(6),gzrqD(8),hfL(1),gzN(6,2),jjN(5,2),bmC(8),zpG(4))。③
對“bh”字段進行如下設(shè)置。
按位指定格式:9999
標題:編號
默認值:1000
字段有效性檢查:編號前兩位為“10”,并且能給出出錯提示信息。
字段注釋內(nèi)容:“該字段是職工內(nèi)部編號。同名者,用不同的編號來區(qū)別?!雹?/p>
記錄級有效性檢查。姓名不能為空,且工資在450~1000元之間,并能給出出錯提示信息。⑤
觸發(fā)器。
插入、追加規(guī)則:每月的28日前進行插入、追加操作。
更新規(guī)則:前4條記錄不得修改。
刪除規(guī)則:部門為“財務(wù)部”的記錄可以刪除,其他記錄不能刪除。
⑥
創(chuàng)建索引。
按部門建立普通索引,標識為zgda_bm。
按編號建立主索引,標識為zgda_bh。⑦
由表zgda.dbf中的編號、工資與獎金組成新表zggz.dbf,且以編號建立普通索引。⑧創(chuàng)建自由表E:\xl\zgdm.dbf(dwC(8),dmC(2))(dw代表單位,dm代表代碼)。按單位建立候選索引,并使它成為數(shù)據(jù)庫表,添加到數(shù)據(jù)庫“職工管理”中。⑨為數(shù)據(jù)庫“職工管理”建立永久關(guān)系:zgdm的dw與zgda的部門,zgda的編號與zggz的編號。⑩設(shè)定參照完整性規(guī)則:zgdm與zgda數(shù)據(jù)更新設(shè)置為級聯(lián),其他為忽略。操作步驟如下。(1)先創(chuàng)建數(shù)據(jù)庫表zgda.dbf。在“項目管理器”中打開數(shù)據(jù)庫“職工管理”,選中“表”,單擊“新建”按鈕,在打開的對話框中單擊“新建表”按鈕。選擇保存位置:E:\xl,并輸入文件名:zgda.dbf,單擊“保存”按鈕,打開“表設(shè)計器”對話框,如圖5-28所示。按照要求輸入各字段名,類型和寬度等。對“bh”字段,需在“顯示”區(qū)的“格式”框和“輸入掩碼”框中輸入為9999,“標題”框中輸入“編號”;在“字段有效性”區(qū)的“規(guī)則”框中輸入LEFT(bh,2)=“10”,“信息”框中輸入“編號前兩位為10”,“默認值”框中輸入“1000”;在“字段注釋”框中輸入注釋信息。記錄級有效性檢查和觸發(fā)器的設(shè)置在“表”選項卡中完成,如圖5-29所示。填寫內(nèi)容如下。“規(guī)則”框中輸入.NOT.EMPTY(xm).AND.gz>450ANDgz<=1000。“信息”框中輸入"xm不為空,gz在450與1000元之間"?!安迦胗|發(fā)器”框中輸入DAY(DATE())<28?!案掠|發(fā)器”框中輸入RECNO()>4?!皠h除觸發(fā)器”框中輸入bm="財務(wù)部"。
創(chuàng)建索引在“索引”選項卡中完成,將各條記錄按次序輸入。至此,數(shù)據(jù)庫表已經(jīng)建好,通過瀏覽查看結(jié)果。(2)復(fù)制表。在命令窗口輸入命令:copytozggz.dbf
fiel
bh,gz,jj。利用“項目管理器”將表zggz.dbf添加到“職工管理”數(shù)據(jù)庫中,使之成為數(shù)據(jù)庫表。選中該表,單擊“修改”按鈕,打開“表設(shè)計器”對話框,在“索引”選項卡中建立對“bh”的索引,索引名為zggz_bh。
(3)建立自由表。在項目管理器中,選“自由表”項,單擊“新建”按鈕,在打開對話框中單擊“新建表”,保存位置為E:\xl,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 凈水機租賃合同版
- 最簡易采購合同模板
- 消防設(shè)施安裝工程承包合同安全協(xié)議書
- 度標準施工合同范本
- 勞動合同續(xù)簽合同補充條款正規(guī)范本
- 演出服裝租賃合同范本
- Module 2 Unit 3 About me(教學(xué)設(shè)計)-2024-2025學(xué)年牛津上海版(試用本)英語三年級上冊
- 翻譯行業(yè)合同范本大全
- 學(xué)生公寓租房合同樣本
- 石油產(chǎn)品運輸合同范本
- 現(xiàn)代漢語(黃伯榮、廖序東版)課件-第四章語法課件
- 統(tǒng)編版小學(xué)語文五年級下冊第四單元解讀與大單元設(shè)計思路
- 壓瘡護理質(zhì)控反饋
- 山東春季高考Photoshop考試復(fù)習(xí)題庫(含答案)
- 湖南省長沙市2023-2024學(xué)年八年級下學(xué)期入學(xué)考試英語試卷(附答案)
- 一年級美術(shù)課后輔導(dǎo)教案-1
- 智慧社區(qū)建設(shè)中的智能化醫(yī)療與康養(yǎng)服務(wù)
- 2023-2024年人教版八年級上冊數(shù)學(xué)期末模擬試卷(含答案)
- 數(shù)據(jù)采集管理制度范文
- 幼兒園小班開學(xué)家長會課件
- 中藥抗骨質(zhì)疏松作用
評論
0/150
提交評論