第6章 如何獲取數(shù)據(jù)庫(kù)中的數(shù)據(jù)教學(xué)內(nèi)容:6.1 案例引入——從商品信息管理數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)6.2 查詢商品信息管理數(shù)據(jù)庫(kù)6.3 應(yīng)用SELECT—SQL命令進(jìn)行“查詢”6.4 用“視圖”方法查看商品信息管理數(shù)據(jù)庫(kù)教學(xué)時(shí)間: 第九、十周教學(xué)方法: 演示文稿演示教學(xué)和實(shí)際操作演示教學(xué)相結(jié)合教學(xué)目的: 本章介紹數(shù)據(jù)庫(kù)及自由表一個(gè)重要應(yīng)用——查詢和視圖。查詢和視圖是根據(jù)用戶的需要從數(shù)據(jù)庫(kù)或自由表中按一定要求選擇出部分?jǐn)?shù)據(jù)及計(jì)算統(tǒng)計(jì)組成一個(gè)虛擬數(shù)據(jù)表。查詢(Query)是從數(shù)據(jù)庫(kù)或自由表中檢索或統(tǒng)計(jì)出所需數(shù)據(jù)。視圖(View)除具有查詢所有的檢索、統(tǒng)計(jì)功能外,還可以改變視圖中記錄值以及源數(shù)據(jù)庫(kù)或自由表的值。教學(xué)重點(diǎn)難點(diǎn): 1、建立、使用、修改查詢2、應(yīng)用SELECT—SQL命令進(jìn)行“查詢”3、建立、使用、修改視圖教學(xué)過(guò)程: Visual FoxPro 提供了查詢和視圖的工具: 查詢?cè)O(shè)計(jì)器和視圖設(shè)計(jì)器。通過(guò)查詢?cè)O(shè)計(jì)器和視圖設(shè)計(jì)器進(jìn)行設(shè)計(jì),使用戶很方便地從數(shù)據(jù)庫(kù)或自由表中檢索及統(tǒng)計(jì)出所需要的數(shù)據(jù)。查詢(Query)是從數(shù)據(jù)庫(kù)或自由表中檢索或統(tǒng)計(jì)出所需數(shù)據(jù)。視圖(View)除具有查詢所有的檢索、統(tǒng)計(jì)功能外,還可以改變視圖中記錄值以及源數(shù)據(jù)庫(kù)或自由表的值。6.1 案例引入——從商品信息管理數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)建立數(shù)據(jù)庫(kù)表或自由表后,在數(shù)據(jù)表中保存了大量數(shù)據(jù),如何靈活使用這些數(shù)據(jù),是充分利用數(shù)據(jù)資源、提高管理水平的一個(gè)重要問(wèn)題。在實(shí)際應(yīng)用中用戶常常需要根據(jù)要求選擇其中一部分?jǐn)?shù)據(jù)構(gòu)成所需的新的數(shù)據(jù)組合。如員工表yg.dbf,表中有6個(gè)字段: 員工編號(hào)ygbh、姓名xm、性別xb、基本工資jbgz、職務(wù)zw和密碼mm。員工表中的部分記錄內(nèi)容顯示在表6-1中。<參見(jiàn)教材P167表6--1>利用員工表yg.dbf中的記錄數(shù)據(jù),選擇其中的部分?jǐn)?shù)據(jù)構(gòu)成各種不同的表。如選擇員工編號(hào)ygbh、員工姓名ygxm、性別xb、職務(wù)zw等字段列出表6-2所示數(shù)據(jù)。<參見(jiàn)教材P168表6--2>又如選擇列出所有女職工的數(shù)據(jù)表6-3。<參見(jiàn)教材P168表6--3>還可以用多個(gè)表中的數(shù)據(jù)構(gòu)成新的表,使用員工表yg.dbf和銷售情況表xsqk.dbf構(gòu)成員工的銷售情況表ygxsqk.dbf,如表6-4所示。表中選擇了員工表的員工編號(hào)yg.ygbh、姓名字段yg.xm,選擇了銷售情況表的商品編號(hào)xsqk.spbh、銷售數(shù)量xsqk.xssl和總金額xsqk.zje等字段。多表之間的數(shù)據(jù)通過(guò)表之間的關(guān)系聯(lián)接。如列出員工的銷售情況,計(jì)算出每個(gè)員工的銷售總金額作為一輸出項(xiàng)。<參見(jiàn)教材P169表6--4>從上面幾個(gè)表格的例子可知,開(kāi)發(fā)人員可以靈活使用數(shù)據(jù)庫(kù)中各表的數(shù)據(jù)組成不同需要的數(shù)據(jù)表,除了選擇字段還可以設(shè)置條件,如選擇性別是“女”的記錄;也可以進(jìn)行統(tǒng)計(jì)計(jì)算,如計(jì)算出每位職工銷售商品的總的金額等。Visual FoxPro 為用戶提供了從數(shù)據(jù)表中按一定的條件獲取部分?jǐn)?shù)據(jù)的工具,有“查詢”和“視圖”兩種。“查詢”和“視圖”都是對(duì)數(shù)據(jù)表進(jìn)行檢索及統(tǒng)計(jì)出所需的數(shù)據(jù)。用“視圖”構(gòu)成的表可以視為一數(shù)據(jù)表保存在數(shù)據(jù)庫(kù)中,可對(duì)源數(shù)據(jù)表記錄進(jìn)行修改或直接被作為數(shù)據(jù)表引用。而用“查詢”構(gòu)成的表不能直接對(duì)源表進(jìn)行操作。“查詢”和“視圖”對(duì)多個(gè)相關(guān)的數(shù)據(jù)表進(jìn)行檢索統(tǒng)計(jì)時(shí)顯得特別方便。“查詢”是通過(guò)“查詢?cè)O(shè)計(jì)器”、“視圖”通過(guò)“視圖設(shè)計(jì)器”進(jìn)行設(shè)計(jì)操作,在后面的幾節(jié)中將詳細(xì)介紹“查詢”和“視圖”的操作方法。6.2 查詢商品信息管理數(shù)據(jù)庫(kù)用“查詢?cè)O(shè)計(jì)器”對(duì)數(shù)據(jù)表進(jìn)行各種查詢操作,獲得用戶所需要的不同結(jié)果。本節(jié)中通過(guò)對(duì)商品信息管理數(shù)據(jù)庫(kù)進(jìn)行查詢來(lái)介紹“查詢?cè)O(shè)計(jì)器”的操作。6.2.1 單表“查詢”日銷售商品情況對(duì)單個(gè)數(shù)據(jù)表進(jìn)行查詢,這里以商品信息管理數(shù)據(jù)庫(kù)中的銷售情況表xsqk.dbf獲得某一天的商品銷售情況為例,查詢?nèi)珍N售情況。所要選取的字段有:商品編號(hào)spbh、銷售數(shù)量xssl、總金額zje。 獲得某日商品銷售情況的操作如下:1. 打開(kāi)“查詢?cè)O(shè)計(jì)器”從項(xiàng)目管理器打開(kāi)“查詢?cè)O(shè)計(jì)器”。打開(kāi)項(xiàng)目管理器,在“數(shù)據(jù)”選項(xiàng)欄列表中選擇“查詢”項(xiàng)。再單擊“新建”按鈕,出現(xiàn)“新建查詢”對(duì)話框。在對(duì)話框中選擇“新建查詢”即打開(kāi)“查詢?cè)O(shè)計(jì)器”。如圖6-1所示。隨“查詢?cè)O(shè)計(jì)器”打開(kāi)的有“查詢”菜單和“查詢?cè)O(shè)計(jì)器”工具欄,如圖6-2所示。2. 添加數(shù)據(jù)表打開(kāi)“查詢?cè)O(shè)計(jì)器”后,一般將出現(xiàn)“添加表或視圖”對(duì)話框,如未出現(xiàn)“添加表或視圖”對(duì)話框時(shí),可選擇“查詢?cè)O(shè)計(jì)器”工具欄或執(zhí)行“查詢”菜單中的“添加表”命令打開(kāi)。“添加表或視圖”對(duì)話框如圖6-3所示。在對(duì)話框內(nèi)的“數(shù)據(jù)庫(kù)”欄和“數(shù)據(jù)庫(kù)中的表”欄中選擇所需的數(shù)據(jù)庫(kù)sp和銷售情況表xsqk.dbf。選擇了數(shù)據(jù)表xsqk.dbf后,單擊“添加”按鈕。將所需的表添加到“查詢?cè)O(shè)計(jì)器”,再單擊“關(guān)閉”按鈕,進(jìn)入“查詢?cè)O(shè)計(jì)器”。圖6-3 “添加表或視圖”對(duì)話框3. 選擇所需的輸出字段“查詢?cè)O(shè)計(jì)器”的下半部有多個(gè)選項(xiàng)卡,選擇“字段”選項(xiàng)卡。“字段”選項(xiàng)卡上包含了“可用字段”列表、“選定字段”列表和將字段從“可用字段”列表調(diào)入“選定字段”列表中的“添加”和“全部添加”按鈕,以及將選定輸出的字段從“選定字段”列表中釋放回“可用字段”列表中的“移去”和“全部移去”按鈕。“可用字段”列表中列出了可供選用的數(shù)據(jù)表字段,每個(gè)字段前面標(biāo)出了字段所屬的數(shù)據(jù)表。在“查詢?cè)O(shè)計(jì)器”的“可用字段”列表中分別選擇商品編號(hào)xsqk.spbh、銷售數(shù)量xsqk.xssl、總金額xsqk.zje等字段,每選定一個(gè)字段后單擊“添加”按鈕,則將選定的字段一一添加到“選定字段”列表中。4. 設(shè)置篩選日期的條件案例中要求選擇某日的銷售情況,篩選條件通過(guò)“篩選”選項(xiàng)卡進(jìn)行設(shè)置,如圖6-4所示。在此選項(xiàng)卡中建立“銷售日期xsqk.xsrq”字段的篩選關(guān)系: xsqk.xsrq=日期。如選擇2003年10月29日的銷售情況。表達(dá)式則為:xsqk.xsrq={^2003/10/29}在“篩選”選項(xiàng)卡中設(shè)置篩選條件的方法是: 表達(dá)式等號(hào)左邊的內(nèi)容列在選項(xiàng)卡的“字段名”欄中,單擊“字段名”右邊的下拉箭頭,出現(xiàn)所有的可選字段和一個(gè)<表達(dá)式…>項(xiàng)。如果表達(dá)式左邊選用的是字段,可直接在列表中單擊選用。如果還要構(gòu)成一定的表達(dá)式關(guān)系,則可選擇<表達(dá)式…>項(xiàng)。本例中的xsqk.xsrq可直接從“字段名”欄中選出。表達(dá)式等號(hào)右邊的內(nèi)容列在“實(shí)例”欄中。在“條件”欄中選擇“=”關(guān)系符號(hào)。5. 運(yùn)行查詢結(jié)果單擊工具欄中的“運(yùn)行”按鈕或選擇“查詢”菜單中的“運(yùn)行查詢”命令,以默認(rèn)的瀏覽狀態(tài)顯示出日銷售情況表,如圖6-5所示。6.2.2 多表“查詢”日銷售商品情況上面的查詢?nèi)珍N售商品情況是應(yīng)用一個(gè)數(shù)據(jù)表進(jìn)行查詢的,如果希望銷售商品情況表表達(dá)得更完善,這里可增加一個(gè)商品信息表spxx.dbf參與查詢,從中獲得商品名稱.spxx.spmc字段,使查詢結(jié)果更加直觀,如圖6-6所示?,F(xiàn)介紹多表的“查詢”操作。1. 打開(kāi)“查詢?cè)O(shè)計(jì)器”單擊“文件”菜單中的“新建”命令,在“新建”對(duì)話框中選擇“查詢”選項(xiàng),單擊“新建文件”按鈕,打開(kāi)“查詢?cè)O(shè)計(jì)器”。2. 添加數(shù)據(jù)表按工具欄“添加表”按鈕,打開(kāi)“添加表或視圖”對(duì)話框,在“數(shù)據(jù)庫(kù)”欄中選擇數(shù)據(jù)庫(kù)sp。從“數(shù)據(jù)庫(kù)中的表”欄中分別選擇商品信息表spxx.dbf和銷售情況表xsqk.dbf添加到“查詢?cè)O(shè)計(jì)器”中。3. 建立兩表的聯(lián)接關(guān)系在“查詢?cè)O(shè)計(jì)器”中選擇“聯(lián)接”選項(xiàng)卡,建立商品信息表spxx和銷售情況表xsqk兩表的聯(lián)接關(guān)系: spxx.spbh=xsqk.spbh,如圖6-7所示。如果兩表在數(shù)據(jù)庫(kù)中已建立了永久關(guān)聯(lián)的關(guān)系,“聯(lián)接”選項(xiàng)卡中會(huì)自動(dòng)建立起聯(lián)接關(guān)系。4. 選擇輸出字段選擇“字段”選項(xiàng)卡。“可用字段”列表中列出了商品信息表spxx.dbf和銷售情況表xsqk.dbf兩表的全部字段。在其中分別選擇商品信息表spxx.dbf的商品編號(hào)spxx.spbh、商品名稱spxx.spmc字段和銷售情況表xsqk.dbf的銷售數(shù)量xsqk.xssl、總金額xsqk.zje字段添加到“選定字段”列表中。5. 設(shè)置篩選日期的條件在“篩選”選項(xiàng)卡中建立銷售日期xsqk.xsrq字段的日篩選關(guān)系。同樣選擇表達(dá)式:xsqk.xsrq={^2003/10/29}6. 運(yùn)行查詢結(jié)果單擊工具欄中的“運(yùn)行”按鈕或選擇“查詢”菜單中的“運(yùn)行查詢”命令,出現(xiàn)如圖6-6所示的日商品銷售查詢情況表。6.2.3 查詢員工銷售業(yè)績(jī)情況通過(guò)查詢每個(gè)員工的銷售情況,表現(xiàn)每個(gè)員工的工作業(yè)績(jī)。本例中以月為時(shí)間單位查詢員工在某一月的銷售情況,需要用到銷售情況表xsqk.dbf和員工表yg.dbf。查詢操作如下:(1) 打開(kāi)查詢?cè)O(shè)計(jì)器,添加銷售情況表xsqk.dbf和員工表yg.dbf。(2) 選擇輸出字段。選擇的字段應(yīng)該有: 員工編號(hào)xsqk.ygbh、姓名yg.xm、銷售金額小計(jì)。其中銷售金額小計(jì)是對(duì)每一個(gè)員工的當(dāng)月銷售總值進(jìn)行統(tǒng)計(jì)。“銷售金額小計(jì)”的設(shè)置: 銷售金額小計(jì)是按員工編號(hào)xsqk.ygbh對(duì)銷售總金額xsqk.zje字段進(jìn)行求和,求和計(jì)算表達(dá)式為SUM(xsqk.zje),并按員工編號(hào)分組計(jì)算。銷售金額小計(jì)的設(shè)置是使用查詢?cè)O(shè)計(jì)器“字段”選項(xiàng)卡中的“函數(shù)和表達(dá)式”生成。具體操作為:① 單擊“函數(shù)和表達(dá)式”欄右邊的按鈕,出現(xiàn)“表達(dá)式生成器”對(duì)話框。② 在對(duì)話框的“表達(dá)式”欄中生成表達(dá)式: SUM(xsqk.zje) AS “銷售金額小計(jì)”。 SUM()求和符號(hào)從“表達(dá)式生成器”的函數(shù)“數(shù)據(jù)”欄中選擇獲得,在函數(shù)“數(shù)學(xué)”欄中尋找到“SUM()”求和符號(hào),雙擊該求和符號(hào),符號(hào)立即顯示到“表達(dá)式”欄中。③ 在“來(lái)源于表”欄中選擇銷售情況表xsqk。在“字段”欄中選擇總金額xsqk.zje字段并雙擊,xsqk.zje(總金額)字段顯示在“表達(dá)式”欄中的SUM()的括號(hào)中間。④ 用AS引出該字段的標(biāo)題“銷售金額小計(jì)”,完成表達(dá)式SUM(xsqk.zje) AS “銷售金額小計(jì)”的設(shè)置。⑤ 按“表達(dá)式生成器”的“確定”按鈕,退出表達(dá)式生成器。表達(dá)式SUM(xsqk.zje) AS “銷售金額小計(jì)”顯示在“函數(shù)和表達(dá)式”欄中。⑥ 單擊“添加”按鈕將表達(dá)式添加到“選定字段”欄中。(3) 分組統(tǒng)計(jì)的控制。“銷售金額小計(jì)”項(xiàng)是對(duì)每一個(gè)員工的銷售情況求和。這里按員工編號(hào)分組對(duì)每個(gè)員工的銷售情況進(jìn)行統(tǒng)計(jì)。分組統(tǒng)計(jì)通過(guò)查詢?cè)O(shè)計(jì)器的“分組依據(jù)”選項(xiàng)卡進(jìn)行設(shè)置。在“可用字段”欄中選擇員工編號(hào)xsqk.ygbh添加到“分組字段”中,如圖6-8所示。根據(jù)分組依據(jù)的設(shè)置,則可分別按照員工編號(hào)對(duì)總金額字段進(jìn)行分組求和統(tǒng)計(jì)出每個(gè)員工的“銷售金額小計(jì)”值。(4) 設(shè)置篩選月份條件。案例中要求的統(tǒng)計(jì)某月的銷售情況通過(guò)“篩選”選項(xiàng)卡進(jìn)行。在此項(xiàng)中獲得銷售日期xsqk.xsrq字段的年份和月份篩選關(guān)系:YEAR(xsqk.xsrq)=年 AND MONTH(xsqk.xsrq)=月份例如這里選擇2003年及9月份,表達(dá)式則為:YEAR(xsqk.xsrq)=2003 AND MONTH(xsqk.xsrq)=9在“篩選”選項(xiàng)卡中獲得表達(dá)式的方法是: 等號(hào)左邊的內(nèi)容置于“篩選”選項(xiàng)卡中的“字段名”欄中,單擊“字段名”欄右邊的下拉箭頭,出現(xiàn)所有可選字段和一個(gè)<表達(dá)式…>項(xiàng)。如果表達(dá)式左邊選用的是字段,可直接在列表中單擊選擇。如果還要構(gòu)成一定的表達(dá)式關(guān)系,則可選擇<表達(dá)式…>項(xiàng)進(jìn)行設(shè)計(jì)。本例中的YEAR(xsqk.xsrq)和MONTH(xsqk.xsrq)都須通過(guò)<表達(dá)式…> 項(xiàng)進(jìn)行設(shè)置。等號(hào)右邊的內(nèi)容在“實(shí)例”欄中輸入。關(guān)系符等于號(hào)在“條件”欄中選擇。第一個(gè)表達(dá)式YEAR(xsqk.xsrq) =2003設(shè)置在第1行,第2個(gè)表達(dá)式MONTH(xsqk.xsrq)=9設(shè)置在第2行,兩個(gè)表達(dá)式之間的“與”關(guān)系在第1行表達(dá)式后的“邏輯”項(xiàng)中選擇。“篩選”選項(xiàng)卡顯示在圖6-9所示。(5) 運(yùn)行查詢結(jié)果。單擊工具欄中的“運(yùn)行”按鈕,運(yùn)行上面設(shè)置的“查詢”,得到每個(gè)員工在9月份中的銷售情況表,如圖6-10所示。6.2.4 “查詢?cè)O(shè)計(jì)器”的各功能設(shè)計(jì)方法掌握了查詢的作用和基本操作后,我們來(lái)全面了解一下“查詢?cè)O(shè)計(jì)器”的各種功能的設(shè)計(jì)方法。1. 打開(kāi)“查詢?cè)O(shè)計(jì)器”的方法① 用“文件”菜單中的“新建”命令打開(kāi)“查詢?cè)O(shè)計(jì)器”。單擊“文件”菜單中的“新建”命令,在出現(xiàn)“新建”對(duì)話框中選擇“查詢”,并單擊“新建文件”按鈕,打開(kāi)“查詢?cè)O(shè)計(jì)器”。② 從項(xiàng)目管理器打開(kāi)“查詢?cè)O(shè)計(jì)器”。打開(kāi)項(xiàng)目管理器,如圖6-11所示。在“數(shù)據(jù)”選項(xiàng)欄列表中選擇“查詢”項(xiàng)。再單擊“新建”按鈕,出現(xiàn)“新建查詢”對(duì)話框。在對(duì)話框中選擇“新建查詢”即打開(kāi)“查詢?cè)O(shè)計(jì)器”。打開(kāi)“查詢管理器”后的同時(shí)在菜單欄上出現(xiàn)“查詢”菜單,在查詢?cè)O(shè)計(jì)器窗口出現(xiàn)“查詢?cè)O(shè)計(jì)器”工具欄。如果“查詢?cè)O(shè)計(jì)器”工具欄未出現(xiàn),可選擇“顯示”菜單中的“工具欄”命令,從“工具欄”對(duì)話框中選擇“查詢?cè)O(shè)計(jì)器”打開(kāi)“查詢?cè)O(shè)計(jì)器”工具欄。2. 添加或移除數(shù)據(jù)庫(kù)表或自由表選擇“查詢”菜單中的“添加表”或單擊“查詢?cè)O(shè)計(jì)器”工具欄中的“添加表”按鈕,調(diào)出圖6-3的“添加表或視圖”對(duì)話框。在“添加表或視圖”對(duì)話框中選擇所要添加的數(shù)據(jù)庫(kù)和數(shù)據(jù)表,按“確定”按鈕,將選定的表添加到“查詢?cè)O(shè)計(jì)器”中。要添加多個(gè)數(shù)據(jù)表時(shí),則重復(fù)進(jìn)行上述操作。如果所需要的表在數(shù)據(jù)表欄中未列出,可按“其他”按鈕,從“打開(kāi)”對(duì)話框中尋找所需的表。所需添加的表加到“查詢?cè)O(shè)計(jì)器”中后,按“關(guān)閉”按鈕,退出“添加表”對(duì)話框,完成添加表的操作。從“查詢?cè)O(shè)計(jì)器”中移除數(shù)據(jù)表的方法是: 先選定要移去的表,再按“查詢”菜單中的“移去表”命令或“查詢?cè)O(shè)計(jì)器”工具欄的“移去表”按鈕,即可移去選擇的表。3. 選擇“查詢”輸出字段選擇“查詢?cè)O(shè)計(jì)器”的“字段”選項(xiàng)卡,該選項(xiàng)卡上的“可用字段”列表框中列出了“查詢?cè)O(shè)計(jì)器”中數(shù)據(jù)表的全部字段,從中單擊選擇要輸出的字段。選擇所需要的字段后單擊“添加”按鈕,將選定的字段添加到“選定字段”中。“全部添加”可將“可用字段”列表中的所有字段同時(shí)添加到“選定字段”中。“移去”按鈕將“選定字段”列表框中選擇的字段移回到“可用字段”列表框中。“全部移去”按鈕將“選定字段”列表中的全部字段移回到“可用字段”列表框中。利用“函數(shù)和表達(dá)式”欄構(gòu)成一定的表達(dá)式作為一個(gè)字段,用AS引導(dǎo)該表達(dá)式的標(biāo)題。單擊“添加”按鈕將表達(dá)式添加到“選定字段”欄中。4. 建立多表聯(lián)接關(guān)系如果使用多個(gè)相關(guān)的數(shù)據(jù)表須建立聯(lián)接關(guān)系,建立聯(lián)接關(guān)系的方法是: 單擊“聯(lián)接”選項(xiàng)卡,如圖6-12。在“聯(lián)接”選項(xiàng)卡的“字段名”中選擇第一個(gè)數(shù)據(jù)表的一個(gè)字段,在“值”中選擇另一個(gè)數(shù)據(jù)表與第一個(gè)數(shù)據(jù)表所選的字段相關(guān)聯(lián)的字段。選項(xiàng)中的“條件”是確定所選兩表的字段以什么條件關(guān)聯(lián)。關(guān)聯(lián)的條件有多種,關(guān)聯(lián)條件在表6-5中列出。選項(xiàng)卡中的“否”表示與所選擇的條件相反。選項(xiàng)中“類型”確定關(guān)聯(lián)的關(guān)系類型,關(guān)聯(lián)的類型有內(nèi)聯(lián)接(Inner Join)、左聯(lián)接(Left Outer Join)、右聯(lián)接(Right Outer Join)和完全聯(lián)接(Full Join)四種。四種聯(lián)接類型的關(guān)系列在表6-6中。5. 確定查詢條件選擇查詢的數(shù)據(jù)需要滿足一定的條件時(shí),在“查詢?cè)O(shè)計(jì)器中”使用“篩選”選項(xiàng)卡。“篩選”選項(xiàng)卡如圖6-13所示。查詢條件根據(jù)字段滿足的條件來(lái)確定,在“篩選”卡中設(shè)置字段符合的條件。“字段名”中選擇所設(shè)計(jì)的字段,“實(shí)例”中輸入滿足的條件值??蛇x擇的“條件”與表6-5中列出的條件相同。6. 設(shè)置查詢的排序當(dāng)需要對(duì)查詢結(jié)果按某一字段進(jìn)行排序時(shí),選擇“查詢?cè)O(shè)計(jì)器”的“排序依據(jù)”選項(xiàng)卡。“排序依據(jù)”選項(xiàng)卡如圖6-14所示。在此選擇卡中,“選定字段”列表框中列出可選擇的字段,其字段是前面選定的輸出字段。在“選定字段”列表中選擇需要排序的字段,按“添加”按鈕將其添加到“排序條件”列表中。同時(shí)在“排序選項(xiàng)”欄中確定排序的字段是升序還是降序。7. 確定查詢的分組在查詢時(shí)有時(shí)需要對(duì)記錄的某些數(shù)據(jù)進(jìn)行分組統(tǒng)計(jì)計(jì)算,如對(duì)銷售出的商品按相同的商品進(jìn)行銷售量的統(tǒng)計(jì)。對(duì)此使用“分組依據(jù)”選項(xiàng)卡。“分組依據(jù)”選項(xiàng)卡在如圖6-15中顯示。8. 其他項(xiàng)目的設(shè)定應(yīng)用“查詢?cè)O(shè)計(jì)器”的“雜項(xiàng)”選項(xiàng)卡對(duì)查詢結(jié)果排除重復(fù)記錄、選擇查詢范圍等操作。“雜項(xiàng)”選項(xiàng)卡如圖6-16所示。(1) 查詢結(jié)果排除重復(fù)數(shù)據(jù)的記錄當(dāng)記錄中的某一字段有相同記錄時(shí),查詢使用“無(wú)重復(fù)記錄”選項(xiàng)可以使查詢結(jié)果排除該字段的重復(fù)記錄,只顯示排在最前面的一個(gè)記錄。(2) 設(shè)置查詢的記錄范圍使用查詢“雜項(xiàng)”選項(xiàng)卡中的“列在前面的記錄”選項(xiàng),可以選擇查詢范圍。查詢的范圍有下面幾種情況:① 全部: 查詢?nèi)坑涗洝?/font>② 部分記錄: 查詢記錄中前n個(gè)記錄。在“記錄個(gè)數(shù)”選項(xiàng)中設(shè)定記錄的前面n個(gè)記錄。③ 前n%個(gè)記錄: 按百分比選擇記錄的范圍,選擇n值后,再選定“百分比”項(xiàng)確定選擇記錄的百分比。選擇后兩種情況時(shí),需要先對(duì)記錄進(jìn)行排序。9. 查詢結(jié)果的輸出方向查詢?cè)O(shè)置完成后,其查詢結(jié)果可有多個(gè)去向。查詢結(jié)果主要去向有: 瀏覽、臨時(shí)表、表、圖形、屏幕、報(bào)表、標(biāo)簽。查詢輸出去向的設(shè)置通過(guò)“查詢”工具欄中的“查詢?nèi)ハ?/font>”按鈕或“查詢”菜單中的“查詢?nèi)ハ?/font>”命令。單擊“查詢?nèi)ハ?/font>”按鈕或命令后出現(xiàn)“查詢?nèi)ハ?/font>”對(duì)話框,如圖6-17所示。在對(duì)話框中選擇查詢輸出結(jié)果的去向后,按“確定”完成設(shè)置。設(shè)置查詢結(jié)果去向后執(zhí)行查詢,將以設(shè)定的去向產(chǎn)生查詢結(jié)果,如設(shè)置了查詢結(jié)果去向?yàn)?/font>“表”,則查詢的輸出結(jié)果存入指定的數(shù)據(jù)表中,而不顯示在“瀏覽”框中。10. 運(yùn)行查詢使用“查詢?cè)O(shè)計(jì)器”完成查詢?cè)O(shè)置后,用“查詢”菜單中的“運(yùn)行查詢”命令或“常用”工具欄的“運(yùn)行”按鈕來(lái)運(yùn)行“查詢”結(jié)果。查詢文件的擴(kuò)展名為.qpr,編譯后的查詢文件擴(kuò)展名為.qpx。使用命令執(zhí)行查詢,使用 DO 查詢文件名.qpr 命令進(jìn)行查詢。6.2.5 部門月銷售情況交叉表的設(shè)計(jì)月銷售情況表的記錄如表6-7中所示,表中反映了各銷售部門每個(gè)月的銷售情況,從表中查看部門各月份銷售情況時(shí)不夠直觀,Visual FoxPro 提供了一種更直觀查看這類表的設(shè)計(jì)方法: 交叉表設(shè)計(jì)。交叉表將兩個(gè)字段的值分作為表格的行標(biāo)題和列標(biāo)題,如將月份字段的值作為行標(biāo)題、部門字段的值作為列標(biāo)題。另一個(gè)字段作為前兩個(gè)字段交叉單元的值,查詢結(jié)果構(gòu)成一種三維表,如表6-7所示。設(shè)計(jì)交叉表應(yīng)用“交叉表向?qū)?/font>”工具,“交叉表向?qū)?/font>”設(shè)計(jì)方法如下:① 選擇“文件”菜單中的新建命令,打開(kāi)“新建”對(duì)話框。在對(duì)話框中選擇“查詢”項(xiàng),并單擊“向?qū)?/font>”按鈕,打開(kāi)“向?qū)нx取”對(duì)話框。在“向?qū)нx取”對(duì)話框中選擇“交叉表向?qū)?/font>”,即打開(kāi)“交叉表向?qū)?/font>”。② 字段選擇。在交叉表設(shè)計(jì)步驟1中選擇數(shù)據(jù)表和設(shè)計(jì)交叉表所需的字段,如字段選擇 : 部門、月份和銷售額。③ 定義布局。交叉表設(shè)計(jì)步驟2中設(shè)計(jì)查詢表的行標(biāo)題、列標(biāo)題和數(shù)據(jù)欄內(nèi)容,如圖6-18所示。將“部門”字段拖到“行”框中,把“月份”字段拖到“列”框中,“銷售額”拖到“數(shù)據(jù)”框中。④ 加入總結(jié)信息。交叉表設(shè)計(jì)步驟3是加入總結(jié)信息,總結(jié)信息為查詢?cè)黾右粋€(gè)統(tǒng)計(jì)計(jì)算列,對(duì)查詢的數(shù)據(jù)進(jìn)行總結(jié)計(jì)算??偨Y(jié)計(jì)算的類型分別有: 求和、計(jì)數(shù)、平均值、最大值、最小值等。匯總分類有數(shù)據(jù)求和、包含數(shù)據(jù)的單元格數(shù)目、占整張表的總計(jì)的百分比、不統(tǒng)計(jì)等各項(xiàng)。加入總結(jié)信息設(shè)計(jì)對(duì)話框如圖6-19所示。計(jì)算各部門的銷售總金額時(shí)總結(jié)項(xiàng)選擇“求和”,分類匯總項(xiàng)選擇“數(shù)據(jù)求和”。⑤ 完成設(shè)計(jì)。在保存交叉表查詢、保存并運(yùn)行交叉表查詢和保存交叉表查詢并在查詢?cè)O(shè)計(jì)器中修改該查詢中選擇一項(xiàng),完成交叉表設(shè)計(jì)。部門月銷售情況交叉表的運(yùn)行結(jié)果如圖6-20所示。6.3 應(yīng)用SELECT—SQL命令進(jìn)行“查詢”使用“查詢?cè)O(shè)計(jì)器”工具對(duì)數(shù)據(jù)表進(jìn)行的查詢也可以使用SELECT—SQL命令實(shí)現(xiàn)。實(shí)質(zhì)上使用“查詢?cè)O(shè)計(jì)器”的查詢?cè)O(shè)計(jì)最終也是生成一組SELECT—SQL命令。6.3.1 SELECT—SQL查詢命令SELECT—SQL查詢命令的格式如下:SELECT [ALL / DISTINCT] [TOP nExpr [PERCENT]][Alias.]Select-Item [AS Column-Name][,[Alias.]Select-Item [AS Column-Name]…]FROM [FORCE][DatabaseName!] table [lacal-Alias][INNER/LEFT/[OUTER]/RIGHT[OUTER]/FULL[OUTER]JOIN [DatabaseName!]Table [Local-Alias] ON JoinCondition [[INTO Destination] /[TO FILE FileName[ADDITIVE]/TO PRINTER [PROMPT]/TO SCREEN]][PREFERENCE PreferenceName][NOCONSOLE] [PLAIN][NOWAIT][WHERE JoinCondition [AND JoinCondition…] [AND/ORFilterCondition [AND /OR FilterCondition….]]][GROUP BY GroupColumn [,GroupColumn…]][HAVING FilterCondition UNION[ALL] SELECTCommand][ORDER BY Order-Item [ASC/DESE] [,Order-Item [ASC/DESC]…]]SELECT—SQL命令可以分解為多個(gè)部分,每一部分分別對(duì)應(yīng)“查詢?cè)O(shè)計(jì)器”的一種操作。SELECT—SQL命令主要分為下列各部分:1. 指定輸出字段SELECT [ALL / DISTINCT] [TOP nExpr [PERCENT]][Alias.]Select-Item [AS Column-Name][,[Alias.]Select-Item [AS Column-Name]…]命令中的參數(shù):[Alias.]Select-Item: 指定查詢結(jié)果的輸出字段、常量或表達(dá)式。Alias表示數(shù)據(jù)表別名。如果選擇一個(gè)數(shù)據(jù)表的全部字段可用“*”表示。[AS Column-Name]: 設(shè)置查詢輸出字段或表達(dá)式項(xiàng)的標(biāo)題。[ALL / DISTINCT]: 確定有無(wú)重復(fù)記錄。ALL表示所有記錄,ALL可以省略。DISTINCT表示當(dāng)有重復(fù)記錄時(shí)只輸出重復(fù)記錄中第一個(gè)記錄。[TOP nExpr [PERCENT]]: 確定記錄范圍。TOP nExpr表示記錄數(shù),TOP nExpr PERCENT表示記錄的百分?jǐn)?shù)。2. 指定查詢的數(shù)據(jù)表FROM [DatabaseName!] table [lacal-Alias]table: 指定查詢的數(shù)據(jù)表。[DatabaseName!]: 當(dāng)數(shù)據(jù)源是數(shù)據(jù)庫(kù)表時(shí)的數(shù)據(jù)庫(kù)名。[lacal-Alias]: 本地表的別名。如數(shù)據(jù)表取自sp數(shù)據(jù)庫(kù)的xsqk表表示為: FROM sp!xsqk。例: 顯示sp數(shù)據(jù)庫(kù)中xsqk表的所有記錄,輸出商品編號(hào)spbh和銷售數(shù)量xssl字段。SELECT xsqk.spbh, xsqk.xssl FROM sp! xsqk3. 確定多表間的聯(lián)接[INNER / LEFT [OUTER] / RIGHT[OUTER] / FULL[OUTER]JOIN DatabaseName!]Table [Local-Alias] ON JoinCondition命令中的參數(shù):[INNER/LEFT [OUTER]/RIGHT [OUTER]/FULL[OUTER]: 確定是內(nèi)聯(lián)接、左聯(lián)接、右聯(lián)接還是完全聯(lián)接。INNER OUTER: 內(nèi)聯(lián)接LEFT OUTER: 左聯(lián)接RIGHT OUTER: 右聯(lián)接FULL OUTER: 完全聯(lián)接。DatabaseName!]Table: 指定被聯(lián)接的數(shù)據(jù)庫(kù)和數(shù)據(jù)表名。JoinCondition: 確定聯(lián)接條件。例: 查詢數(shù)據(jù)庫(kù)源sp的spxx表和xsqk表。其中spxx表和xsqk表以內(nèi)聯(lián)接方式聯(lián)接。FROM sp!spxx INNER JOIN sp!xsqk ON spxx.spbh= xsqk.spbh4. 確定查詢輸出去向[[INTO Destination] / [TO FILE FileName [ADDITIVE] / TO PRINTER [PROMPT] / TO SCREEN]]命令中的參數(shù):INTO Destination中Destination代表下列輸出去向:① ARRAY ArrayName: 將查詢結(jié)果保存到內(nèi)存變量數(shù)組中。ArrayName表示內(nèi)存變量名。② CURSOR CursorName: 將查詢結(jié)果保存到臨時(shí)表中。CursorName表示臨時(shí)表名。③ DBF TableName / TABLE TableName: 將查詢結(jié)果保存到一數(shù)據(jù)表中。TableName是數(shù)據(jù)表名。TO FILE FileName [ADDITIVE] / TO PRINTER [PROMPT] / TO SCREEN]: 輸出到文件、打印機(jī)或屏幕。ADDITIVE表示數(shù)據(jù)輸入到文件時(shí)不刪除原有數(shù)據(jù),而是從數(shù)據(jù)后面增加記錄。如果沒(méi)有ADDITIVE,則數(shù)據(jù)輸入到文件中時(shí)不保留原數(shù)據(jù),原數(shù)據(jù)被新數(shù)據(jù)覆蓋。5. 篩選源表記錄條件[WHERE JoinCondition [AND JoinCondition….][AND/OR FilterCondition [AND /OR FilterCondition….]]]命令中的參數(shù):FilterCondition: 篩選條件。JoinCondition: 多表查詢時(shí)的聯(lián)接條件,作用同JOIN ON JoinCondition語(yǔ)句中的JoinCondition。例如: 篩選員工表yg.dbf中性別為“男”的子命令: WHERE yg.xb = ″男″6. 定義記錄的分組[GROUP BY GroupColumn [,GroupColumn…]]GroupColumn: 分組的列或字段。例如: 以員工表中的員工編號(hào)分組的子命令: GROUP BY yg.ygbh。7. 指定分組滿足條件[HAVING FilterCondition UNION [ALL] SELECTCommand]指定包含在查詢結(jié)果中的組必須滿足的篩選條件。8. 指定輸出記錄的排序順序[ORDER BY Order—Item [ASC/DESE] [,Order-Item [ASC/DESC]…]]Order—Item: 排序的字段等項(xiàng)目ASC: 升序DESE: 降序例如: 以銷售情況表中銷售數(shù)量xssl字段以降序排序命令:ORDER BY xsqk.xssl DESC6.3.2 SELECT—SQL查詢命令應(yīng)用舉例SELECT—SQL查詢命令比較復(fù)雜,下面通過(guò)一些例子介紹SELECT—SQL查詢命令的應(yīng)用。1. 單表查詢【例6-1】查詢銷售商品管理數(shù)據(jù)庫(kù)sp.dbc中商品信息表spxx.dbf的商品編號(hào)spbh、商品名稱spmc和銷售單價(jià)xsdj。SELECT spxx.spbh, spxx.spmc, spxx.xsdj FROM sp!spxx【例6-2】查詢商品信息表spxx.dbf銷售單價(jià)大于1000元的商品,輸出商品編號(hào)spbh、商品名稱spmc和銷售單價(jià)xsdj等字段。SELECT spxx.spbh, spxx.spmc, spxx.xsdj FROM sp!spxx ;WHERE spxx.xsdj > 1000【例6-3】按商品編號(hào)順序從小到大查詢商品信息表spxx.dbf的商品編號(hào)spbh、商品名稱spmc和銷售單價(jià)xsdj。SELECT spxx.spbh, spxx.spmc, spxx.xsdj ;FROM sp!spxx ORDER BY spxx.spbh【例6-4】將庫(kù)存表kc.dbf的查詢輸出到庫(kù)存情況表kcqk.dbf中。查詢的字段為: 商品編號(hào)spbh、進(jìn)貨日期jhrq和庫(kù)存數(shù)量kcsl。SELECT kc.spbh, kc.jhrq, kc.kcsl FROM sp!kc;INTO TABLE kcqk.dbf2. 多表查詢【例6-5】查詢銷售商品管理數(shù)據(jù)庫(kù)sp.dbc的員工表yg.dbf和銷售情況表xsqk.dbf的員工編號(hào)yg.ygbh、員工姓名yg.xm、銷售金額xsqk.zje和銷售日期xsqk.xsrq等字段。SELECT yg.ygbh, yg.xm, xsqk.zje, xsqk.xsrq ;FROM sp!yg INNER JOIN sp!xsqk ;ON yg.ygbh = xsqk.ygbh【例6-6】查詢某一日銷售情況表xsqk.dbf和商品信息表spxx.dbf的商品銷售情況,輸出字段有: 商品編號(hào)xsqk.spbh、商品名稱spxx.spmc、銷售單價(jià)spxx.xsdj、銷售數(shù)量xsqk.xssl、總金額xsqk.zje和銷售日期xsqk.xsrq等字段。SELECT xsqk.spbh, spxx.spmc, spxx.xsdj, xsqk.xssl, xsqk.zje, xsqk.xsrq;FROM sp!spxx INNER JOIN sp!xsqk ON spxx.spbh = xsqk.spbh;WHERE xsqk.xsrq = {^2003/10/29}3. 包含計(jì)算字段的查詢【例6-7】查詢銷售情況表xsqk.dbf中各種銷售商品的總金額小計(jì),輸出為商品編號(hào)spbh、以商品編號(hào)分組統(tǒng)計(jì)的總金額小計(jì)。SELECT xsqk.spbh , SUM(xsqk.zje) AS 銷售金額小計(jì) FROM sp!xsqk;GROUP BY xsqk.spbh【例6-8】查詢銷售情況表xsqk.dbf中同一種銷售商品成交價(jià)最高的商品交易情況。輸出字段有: 成交編號(hào)xsqk.cjbh、商品編號(hào)xsqk.spbh、以商品編號(hào)分組查找的同商品交易中最高成交金額的記錄。SELECT xsqk.cjbh, xsqk.spbh, MAX(xsqk.zje) AS 交易最高價(jià)FROM sp!xsqk;GROUP BY xsqk.spbh6.4 用“視圖”方法查看商品信息管理數(shù)據(jù)庫(kù)在數(shù)據(jù)庫(kù)中,可以建立與“查詢”相同功能的“視圖”,通過(guò)“視圖”從數(shù)據(jù)表中查詢所需的數(shù)據(jù)信息,組成新的數(shù)據(jù)集合表存放于數(shù)據(jù)庫(kù)中,所以“視圖”也稱為“虛表”。“視圖”與“查詢”很相似,在數(shù)據(jù)表的基礎(chǔ)上,構(gòu)成一組檢索和計(jì)算結(jié)果。支持“視圖”的數(shù)據(jù)表稱為“源數(shù)據(jù)表”,也稱為“基表”。“查詢”不能改變?cè)磾?shù)據(jù)表中數(shù)據(jù),而與“查詢”不同的是,通過(guò)“視圖”可以改變?cè)磾?shù)據(jù)表中的記錄值。“視圖”是在“數(shù)據(jù)庫(kù)設(shè)計(jì)器”中建立的。“視圖”分為“本地視圖”和“遠(yuǎn)程視圖”。“本地視圖”使用Visual FoxPro SQL語(yǔ)法從數(shù)據(jù)表或視圖中選擇信息;“遠(yuǎn)程視圖”使用遠(yuǎn)程SQL語(yǔ)法從遠(yuǎn)程ODBC數(shù)據(jù)源表中選擇信息。這里主要介紹“本地視圖”的設(shè)計(jì)方法。6.4.1 建立員工銷售業(yè)績(jī)情況視圖用建立“視圖”的方法來(lái)構(gòu)成每一員工某月的銷售情況。銷售情況表(xsqk.dbf)和員工表(yg.dbf)作為源數(shù)據(jù)源。建立員工銷售視圖的操作如下:1. 打開(kāi)“視圖設(shè)計(jì)器”“視圖”是在“數(shù)據(jù)庫(kù)設(shè)計(jì)器”中建立的,所以首先打開(kāi)數(shù)據(jù)庫(kù):① 打開(kāi)sp商品信息管理數(shù)據(jù)庫(kù)。② 選擇“數(shù)據(jù)庫(kù)設(shè)計(jì)器”工具欄中的“新建本地視圖”按鈕或“數(shù)據(jù)庫(kù)”菜單中的“新建本地視圖”命令,出現(xiàn)“新建本地視圖”對(duì)話框,單擊對(duì)話框中的“新建視圖”打開(kāi)“視圖設(shè)計(jì)器”。視圖設(shè)計(jì)器與查詢?cè)O(shè)計(jì)器的結(jié)構(gòu)基本相同,視圖設(shè)計(jì)器如圖6-21所示。打開(kāi)“視圖設(shè)計(jì)器”同時(shí)出現(xiàn)“視圖設(shè)計(jì)器”工具欄和“查詢”菜單,供設(shè)計(jì)視圖時(shí)使用。視圖的設(shè)計(jì)方法也與查詢的設(shè)計(jì)方法基本一致。2. 添加數(shù)據(jù)表單擊“視圖設(shè)計(jì)器”工具欄的“添加表”按鈕或“查詢”菜單中的“添加表”命令,打開(kāi)“添加表或視圖”對(duì)話框,添加銷售情況表xsqk.dbf和員工表yg.dbf。3. 選擇輸出字段在“字段”選項(xiàng)卡中的“可用字段”欄中選擇員工編號(hào)xsqk.ygbh、姓名yg.xm、銷售總值SUM(xsqk.zje)等字段。添加到“選定字段”欄中。“銷售總量”通過(guò)“函數(shù)和表達(dá)式”欄設(shè)置。4. 分組統(tǒng)計(jì)按員工編號(hào)xsqk.ygbh分組進(jìn)行統(tǒng)計(jì)的設(shè)計(jì)是通過(guò)視圖設(shè)計(jì)器的“分組依據(jù)”選項(xiàng)卡。在“可用字段”欄中選擇員工編號(hào)xsqk.ygbh添加到“分組字段”欄中,根據(jù)分組依據(jù)的設(shè)置,求總金額的和按照員工編號(hào)分組進(jìn)行統(tǒng)計(jì)。5. 月份的篩選單擊“篩選”選項(xiàng)卡,建立表達(dá)式關(guān)系: YEAR(xsqk.xsrq) =2003(年)和MONTH(xsqk.xsrq)=9(月份)。單擊“字段名”欄右邊的下拉箭頭,出現(xiàn)所有的可選字段和一個(gè)“表達(dá)式”項(xiàng)。選擇“表達(dá)式”項(xiàng),在“表達(dá)式生成器”中組成YEAR(xsqk.xsrq),在“實(shí)例”欄輸入要設(shè)置的年份2003,在“條件”欄中選擇等于號(hào)。MONTH(xsqk.xsrq)=9表達(dá)式的設(shè)計(jì)以同樣的方法設(shè)計(jì)。6. 運(yùn)行“視圖”單擊工具欄中的“運(yùn)行”按鈕或“查詢”菜單中的“運(yùn)行查詢”命令,運(yùn)行上面設(shè)置的“視圖”,得到每個(gè)員工某個(gè)月份的銷售總值表,如圖6-22所示。與“查詢”的結(jié)果表6-10比較兩個(gè)結(jié)果是相同的。7. 更新視圖與源數(shù)據(jù)表數(shù)據(jù)在默認(rèn)情況下,是不能更新視圖與源數(shù)據(jù)表中的記錄的。為了能更新視圖與源數(shù)據(jù)表,可通過(guò)設(shè)置“更新條件”選項(xiàng)卡上的參數(shù)來(lái)確定。操作方法如下:① 選擇“更新條件”選項(xiàng)卡,如圖6-23顯示。② 選擇可更新的表在“表”下拉列表中選擇需要更新的數(shù)據(jù)表。如員工表yg.dbf。③ 設(shè)置關(guān)鍵字“字段名”列表中列出了可使用的字段,單擊關(guān)鍵字段員工編號(hào)yg.ygbh前“鑰匙”下面的位置,出現(xiàn)一個(gè)“√”符號(hào),設(shè)定該字段為關(guān)鍵字。關(guān)鍵字應(yīng)該在數(shù)據(jù)表的主關(guān)鍵字段或候補(bǔ)關(guān)鍵字段中選擇。設(shè)置關(guān)鍵字后,如果要重新設(shè)置關(guān)鍵字,可單擊“重置關(guān)鍵字”按鈕后再重新設(shè)置關(guān)鍵字。④ 設(shè)置可更新字段在要更新的字段即員工姓名yg.xm前面單擊可更新列(筆形標(biāo)志),確定字段可修改。如果要使表中的所有字段可更新,將全部字段設(shè)置成可更新的??捎?/font>“全部更新”按鈕設(shè)置,但用“全部更新”不影響關(guān)鍵字。因?yàn)橐话悴粫?huì)直接修改關(guān)鍵字段。⑤ 更新源數(shù)據(jù)表設(shè)置了可更新字段后可以對(duì)視圖進(jìn)行更改,但還不能對(duì)源數(shù)據(jù)表直接更新。如需通過(guò)視圖對(duì)源數(shù)據(jù)源表進(jìn)行更改時(shí),要進(jìn)一步選擇設(shè)置“發(fā)送SQL更新”項(xiàng)。⑥ 設(shè)置“SQL WHERE 子句包括”項(xiàng)如果在一個(gè)多用戶環(huán)境中工作,用戶使用的數(shù)據(jù)表也可以被別的用戶訪問(wèn)或修改。為了檢查數(shù)據(jù)表是否被其他用戶修改過(guò),對(duì)“SQL WHERE 子句包括”進(jìn)行設(shè)置。各選項(xiàng)的功能為:關(guān)鍵字: 當(dāng)源表中的關(guān)鍵字段被修改時(shí),更新失敗。關(guān)鍵字和可更新字段: 當(dāng)遠(yuǎn)程表中可更新的字段被改變時(shí),更新失敗。關(guān)鍵字和已修改字段: 當(dāng)在本地改變的字段在源表中被改變時(shí),更新失敗。關(guān)鍵字和時(shí)間戳: 當(dāng)遠(yuǎn)程表上記錄的時(shí)間戳在首次檢索之后被改變時(shí),更新失敗。⑦ 設(shè)置“使用更新”項(xiàng)確定視圖更新源表記錄時(shí)使用的方法。第一項(xiàng)“SQL DELETE 然后 INSERT”是選刪除原始記錄,再插入新記錄。另一項(xiàng)“SQL UPDATE”是直接更新已經(jīng)存在的記錄。6.4.2 創(chuàng)建供貨商參數(shù)化視圖參數(shù)化視圖是根據(jù)某個(gè)參數(shù)的不同值分別查詢對(duì)應(yīng)的有關(guān)數(shù)據(jù),這種視圖稱為參數(shù)化視圖,如供貨商表ghs.dbf按供貨商的編號(hào)分別查看出對(duì)應(yīng)每一編號(hào)的供貨商情況。變化的參數(shù)是供貨商編號(hào)ghs.ghsbh字段。如采用前面介紹的視圖設(shè)計(jì)方法,對(duì)每個(gè)供貨商編號(hào),將建立起一個(gè)視圖。表中有多個(gè)供貨商,就必須建立多個(gè)相對(duì)應(yīng)的視圖。而參數(shù)化視圖則可根據(jù)改變供貨商編號(hào)獲得不同的視圖結(jié)果,操作和使用十分方便。供貨商參數(shù)化視圖的設(shè)計(jì)方法如下:① 打開(kāi)“視圖設(shè)計(jì)器”,添加數(shù)據(jù)表,選擇輸出的字段。操作方法同前面的介紹。② 在“篩選”選項(xiàng)卡中建立一個(gè)篩選關(guān)系: 字段名 = ?<提示符>。如: ghs.ghsbh =?供貨商編號(hào),見(jiàn)圖6-24。③ 從“查詢”菜單中選擇“視圖參數(shù)”,出現(xiàn)“視圖參數(shù)”對(duì)話框,在其中定義參數(shù)名和參數(shù)類型,在“參數(shù)名”項(xiàng)中輸入“供貨商編號(hào)”,在“類型”項(xiàng)中選擇“字符型”,如圖6-25所示。④ 運(yùn)行視圖。參數(shù)化視圖設(shè)置完成后,每當(dāng)運(yùn)行該視圖時(shí),會(huì)先出現(xiàn)提示輸入?yún)?shù)對(duì)話框,如圖6-26所示,在對(duì)話框中輸入相應(yīng)的供貨商編號(hào)ghsbh字段的參數(shù)值后,查詢對(duì)應(yīng)的視圖。用參數(shù)化視圖可不需建立多個(gè)視圖的情況下獲得各個(gè)與參數(shù)相對(duì)應(yīng)的視圖。視圖建立后,對(duì)視圖的使用可以視為一個(gè)數(shù)據(jù)庫(kù)表,很多情況下對(duì)視圖的操作與對(duì)數(shù)據(jù)庫(kù)表的操作方法相同。如打開(kāi)視圖、修改視圖和關(guān)閉視圖等操作。在程序中,打開(kāi)視圖和關(guān)閉視圖的命令與打開(kāi)數(shù)據(jù)庫(kù)表與關(guān)閉數(shù)據(jù)庫(kù)表的命令相同。打開(kāi)視圖時(shí)系統(tǒng)在其他工作區(qū)自動(dòng)打開(kāi)該視圖的源數(shù)據(jù)表,但關(guān)閉視圖后,視圖的源數(shù)據(jù)表不能隨視圖的關(guān)閉而自動(dòng)關(guān)閉,必須另外用命令關(guān)閉數(shù)據(jù)表。打開(kāi)sp數(shù)據(jù)庫(kù)的“員工銷售情況”視圖的命令為:OPEN DATABASE spUSE 員工銷售情況在打開(kāi)“員工銷售情況”視圖的同時(shí),系統(tǒng)自動(dòng)打開(kāi)“員工銷售情況”視圖的源數(shù)據(jù)表kc.dbf。課后總結(jié):本章介紹數(shù)據(jù)庫(kù)及自由表一個(gè)重要應(yīng)用——查詢和視圖。查詢和視圖是根據(jù)用戶的需要從數(shù)據(jù)庫(kù)或自由表中按一定要求選擇出部分?jǐn)?shù)據(jù)及計(jì)算統(tǒng)計(jì)組成一個(gè)虛擬數(shù)據(jù)表。Visual FoxPro 提供了查詢和視圖的工具: 查詢?cè)O(shè)計(jì)器和視圖設(shè)計(jì)器。通過(guò)查詢?cè)O(shè)計(jì)器和視圖設(shè)計(jì)器進(jìn)行設(shè)計(jì),使用戶很方便地從數(shù)據(jù)庫(kù)或自由表中檢索及統(tǒng)計(jì)出所需要的數(shù)據(jù)。查詢(Query)是從數(shù)據(jù)庫(kù)或自由表中檢索或統(tǒng)計(jì)出所需數(shù)據(jù)。視圖(View)除具有查詢所有的檢索、統(tǒng)計(jì)功能外,還可以改變視圖中記錄值以及源數(shù)據(jù)庫(kù)或自由表的值。作業(yè):第五章習(xí)題 第五章上機(jī)實(shí)驗(yàn)題(書(shū)寫相應(yīng)實(shí)驗(yàn)報(bào)告) |
|
|