第5章 數(shù)據(jù)排序、檢索、統(tǒng)計(jì)和多表操作_第1頁(yè)
第5章 數(shù)據(jù)排序、檢索、統(tǒng)計(jì)和多表操作_第2頁(yè)
第5章 數(shù)據(jù)排序、檢索、統(tǒng)計(jì)和多表操作_第3頁(yè)
第5章 數(shù)據(jù)排序、檢索、統(tǒng)計(jì)和多表操作_第4頁(yè)
第5章 數(shù)據(jù)排序、檢索、統(tǒng)計(jì)和多表操作_第5頁(yè)
已閱讀5頁(yè),還剩45頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第5章 數(shù)據(jù)排序、檢索、統(tǒng)計(jì) 和多個(gè)表的操作內(nèi)容提要:5.1 分類排序數(shù)據(jù)的分類和索引 5.2 索引排序多工作區(qū)操作5.3 數(shù)據(jù)檢索5.4 數(shù)據(jù)統(tǒng)計(jì)5.5 多個(gè)表的操作VFP提供了分類排序和索引排序兩種方法,分類排序是把排序結(jié)果放到一個(gè)新的表中,而索引排序不產(chǎn)生新表,而是產(chǎn)生的索引文件來(lái)表示記錄的排序。分類排序的命令如下:【命令】SORT TOON/A/D/C,/A/DASCENDING|DESCENDINGFOR|WHILEFIELDS51 分類排序【功能】 對(duì)當(dāng)前表按照排序字段進(jìn)行升序或降序重新排列,并生成一個(gè)新表存放排序結(jié)果?!菊f(shuō)明】(1)指排序后的結(jié)果生成的新表文件名,原來(lái)記錄號(hào)發(fā)生變

2、化。(2)(亦稱關(guān)鍵字),可以是C、N、D型。N型按數(shù)值的大小排列;D型按日期值的大小排列;C型字段,英文按字母順序、漢字按拼音字母的順序排列。(3)/A(或ASCENDING)表示記錄按升序排列(遞增);/D(或DESCENDING)表示降序(遞減);/C表示對(duì)英文數(shù)據(jù)不分大小寫;升序和降序的選項(xiàng)缺省,默認(rèn)升序。(4)可使用多個(gè)字段來(lái)多重排序,可先按字段名1(主關(guān)鍵字或關(guān)鍵字1)排序,若有相同值再按字段名2(次關(guān)鍵字或關(guān)鍵字2)排序。各排序字段名之間用逗號(hào)“,”隔開。(5)FOR缺省,所有記錄參與排序。(6)不能對(duì)備注字段和通用字段排序。(7)帶刪除標(biāo)記的記錄也不能參加排序。【例5-1】us

3、e 學(xué)生成績(jī)List-? 顯示什么內(nèi)容sort to px1 on 數(shù)學(xué)/d use px1 list -? 顯示什么內(nèi)容?與前面有什么不同?【例5-1】use 學(xué)生成績(jī)sort to px2 on 數(shù)學(xué)/d,姓名 &在幾個(gè)數(shù)學(xué)相同記錄內(nèi),再按姓名排序use px2list-? 顯示什么內(nèi)容?與前面有什么不同?索引文件分為單索引文件和復(fù)合索引文件兩大類。5.2.1 單索引文件【命令】INDEX ON TO UNIQUEADDITIVE COMPACTASCENDING FOR|WHILE【功能】對(duì)當(dāng)前表的關(guān)鍵字索引,產(chǎn)生單索引文件?!菊f(shuō)明】(1)命令產(chǎn)生單索引文件,只含一個(gè)索引項(xiàng),單索引文件的

4、擴(kuò)展名是.IDX。5.2 索引排序(2)可以是一個(gè)排序的關(guān)鍵字字段或多個(gè)排序字段的運(yùn)算組合,只能是一個(gè)表達(dá)式,不能象分類排序那樣,多個(gè)字段用逗號(hào)隔開,所以對(duì)主關(guān)鍵和次關(guān)鍵的排序是通過(guò)表達(dá)式組合來(lái)實(shí)現(xiàn)。(3)不能用/A和/D表示升序和降序,可用表達(dá)式的組合表示升序和降序,也可用ASCENDING表示升序。(4)命令后面只能使用,不能使用范圍和FIELDS。(5)UNIQUE表示索引文件不保留重復(fù)字段值;ADDITIVE缺省表示新的索引文件打開后以前的索引文件關(guān)閉,該項(xiàng)不缺省就不關(guān)閉;COMPACT表示把索引文件轉(zhuǎn)換為壓縮格式。(6)索引不改變?cè)瓉?lái)的記錄號(hào)?!纠?-2】單索引文件的使用。(1)簡(jiǎn)單

5、的索引use 學(xué)生成績(jī)index on 數(shù)學(xué) to sx1 list (2)索引的降序排列use 學(xué)生成績(jī)index on 數(shù)學(xué) to sx2list(3)主關(guān)鍵和次關(guān)鍵的選擇 use 學(xué)生成績(jī)index on 性別STR(數(shù)學(xué),3) to sx3 list5.2.2 復(fù)合索引文件 復(fù)合索引文件含有多個(gè)排序的字段,復(fù)合索引文件的擴(kuò)展名是.CDX。對(duì)復(fù)合索引文件來(lái)說(shuō)又分為兩種:一種是獨(dú)立的復(fù)合索引文件,它的主文件名與表文件不同;一種是結(jié)構(gòu)復(fù)合索引文件,它的主文件名與產(chǎn)生它表文件相同。一般情況下,使用較多的是結(jié)構(gòu)復(fù)合索引文件,它可用命令和表設(shè)計(jì)器創(chuàng)建。 1用命令建立復(fù)合索引【命令】INDEX ON

6、 TAGOFASCENDING| DESCNDINGUNIQUECANDIDATEFOR|WHILEADDITIVE【功能】創(chuàng)建獨(dú)立或結(jié)構(gòu)復(fù)合索引文件?!菊f(shuō)明】(1)命令產(chǎn)生復(fù)合索引文件.CDX,為索引的字段名或字段名組合。(2)TAG稱為索引標(biāo)記,是為索引字段作標(biāo)記,它可以是原字段名,也可以是其他的中英文字符,以后再使用索引字段就不能用字段名而要用標(biāo)記名。(3)OF產(chǎn)生獨(dú)立復(fù)合索引文件,缺省產(chǎn)生結(jié)構(gòu)復(fù)合索引文件(與表文件同名)。(4)ASCENDING表示升序;DESCNDING表示降序;UNIQUE表示唯一索引;CANDIDATE表示候選索引;ADDITIVE表示新索引打開不關(guān)閉以前索引文

7、件?!纠?-3】結(jié)構(gòu)復(fù)合索引文件創(chuàng)建與設(shè)立索引項(xiàng)標(biāo)記。use 學(xué)生成績(jī)index on 數(shù)學(xué) tag sx index on 性別 tag xb 2用表設(shè)計(jì)器建立復(fù)合索引在表設(shè)計(jì)器中,只要設(shè)置了索引就自動(dòng)創(chuàng)建了結(jié)構(gòu)復(fù)合索引文件,操作步驟如下:步驟一:打開表后,選擇“顯示”菜單下的“表設(shè)計(jì)器”,選擇“字段”選項(xiàng)卡,選擇排序字段的升序或降序。步驟二:選“索引”選項(xiàng)卡,對(duì)索引字段選擇:主索引/候選索引/唯一索引/普通索引。 圖5-1表設(shè)計(jì)器的“索引”選項(xiàng)卡“類型”表示對(duì)排序字段索引類型的設(shè)置,有四種:主索引:選作主索引的字段是主關(guān)鍵字,不允許字段有重復(fù)值,一個(gè)表只能有一個(gè)主索引。只有數(shù)據(jù)庫(kù)表可選主索

8、引。圖5-1是自由表設(shè)計(jì)器,沒(méi)有主索引。 候選索引:表中的主關(guān)鍵字或候選關(guān)鍵字可選作候選索引,字段不允許有重復(fù)值,一個(gè)表可以有一個(gè)或多個(gè)候選索引。唯一索引:選作唯一索引的字段允許有重復(fù)值,其唯一性是指索引文件中索引項(xiàng)的值是唯一的,若表有重復(fù)字段值,索引文件只保留該字段值前面的一條記錄。普通索引:普通索引沒(méi)有前面三種索引類型的限制,即一個(gè)表可選多個(gè)普通索引,選作普通索引的字段有重復(fù)值也不會(huì)去掉。5.2.3 索引文件的打開與關(guān)閉1索引文件的打開創(chuàng)建索引文件就同時(shí)打開索引文件。結(jié)構(gòu)復(fù)合索引文件在打開表文件同時(shí)自動(dòng)打開,不需要單獨(dú)打開。用命令把已建立的索引文件和表同時(shí)打開。【命令】USE|?INDEX

9、|? ORDER|TAG|【說(shuō)明】(1)INDEX|?為與表同時(shí)打開的單索引和復(fù)合索引文件。(2)使用“?”會(huì)出現(xiàn)多個(gè)表文件和索引文件供用戶選擇。(3)ORDER|TAG從復(fù)合索引文件的多個(gè)索引項(xiàng)選擇主控索引項(xiàng);ORDER從打開的多個(gè)單索引文件中選擇當(dāng)前的主控索引文件。索引文件已創(chuàng)建,先打開表文件,然后再打開索引文件的命令?!久睢縎ET INDEX TO ORDER|TAG|【功能】把表和索引文件一起打開?!菊f(shuō)明】ORDER引導(dǎo)的子項(xiàng)和情況(2)意義相同。2索引文件的關(guān)閉當(dāng)不對(duì)索引文件操作時(shí),可根據(jù)需要選擇多種關(guān)閉索引文件的方法。用USE或CLOSE ALL命令關(guān)閉表,也同時(shí)關(guān)閉了索引文件。

10、只關(guān)閉索引文件,不關(guān)閉表文件?!久睢緾LOSE INDEX|SET INDEX TO|SET ORDER TO【功能】只關(guān)閉索引文件,回到表剛打開的狀態(tài)。【說(shuō)明】這三條命令對(duì)單索引文件和復(fù)合索引文件都適用。5.2.4 重索引與索引的刪除1重新索引 在表已經(jīng)創(chuàng)建了索引文件之后,要插入新的記錄和修改原有數(shù)據(jù),表是否按照新的字段數(shù)據(jù)重新排列記錄。這分為幾種情況:(1)結(jié)構(gòu)復(fù)合索引文件是總是和表一起打開,修改數(shù)據(jù)后系統(tǒng)自動(dòng)進(jìn)行記錄順序的更新。(2)單索引文件和獨(dú)立復(fù)合索引文件和表都打開時(shí),修改數(shù)據(jù)會(huì)自動(dòng)更新。(3)在表打開,索引文件關(guān)閉時(shí)修改數(shù)據(jù),系統(tǒng)就不會(huì)自動(dòng)更新記錄順序。這種情況下,也沒(méi)有必要再

11、次創(chuàng)建索引文件,只需用重索引命令REINDEX,記錄順序就會(huì)修改后的數(shù)據(jù)重新排列。重索引命令如下:【命令】REINDEXCOMPACT【功能】對(duì)關(guān)閉的索引文件,按照修改后的數(shù)據(jù)重新索引?!菊f(shuō)明】COMPACT表示重索引時(shí)把索引文件轉(zhuǎn)換成壓縮格式。5.3.1 定位查詢命令1LOCATE命令【命令】LOCATE FOR|WHILE【功能】在指定的范圍內(nèi)找到滿足條件的記錄。【說(shuō)明】(1)這是一種順序查詢方式,根據(jù)條件中的數(shù)據(jù)逐條比較記錄,不管當(dāng)前記錄在哪兒,總是從首記錄開始向下查找。 (2)找到滿足條件的記錄后,記錄指針指向該記錄(為當(dāng)前記錄),沒(méi)有找到,指針指向末記錄后。(3) 缺省相當(dāng)于ALL;

12、FOR缺省,命令執(zhí)行后,指針指向首記錄。(4)若滿足條件的記錄有多條,指針定位于第一條,可用CONTINUE命令指向下一條滿足條件的記錄。5.3 數(shù)據(jù)檢索(5)該命令的使用無(wú)須索引,若索引文件打開仍可使用,則按照索引順序查詢。(6)常用DISPLAY命令顯示查詢結(jié)果,有記錄的顯示表示找到滿足條件的記錄,沒(méi)有數(shù)據(jù)顯示,則沒(méi)有找到。2CONTINUE命令【命令】CONTINUE【功能】LOCATE命令執(zhí)行后,繼續(xù)移動(dòng)記錄指針到下一條滿足條件的記錄?!菊f(shuō)明】該命令只能放在LOCATE命令后,可多次使用?!纠?-7】LOCATE與CONTINUE命令的應(yīng)用。use 學(xué)生成績(jī) loca for 姓名”李

13、紅”disploca for 數(shù)學(xué)=60dispcontdisp5.3.2 索引查詢命令1FIND命令【命令】FIND/【功能】在索引文件中查找數(shù)據(jù)。2SEEK命令【命令】SEEK【功能】以索引方式查詢表中的數(shù)據(jù)?!菊f(shuō)明】(1)SEEK命令和FIND命令功能相似,但比FIND更為靈活,SEEK查找的是表達(dá)式,可以是C、N、D、L型的常量、變量及其組合。(2)查找的字符串常量必需用定界符,字符串變量不用”&”。 5.4.1 統(tǒng)計(jì)記錄個(gè)數(shù)【命令】COUNTFOR|WHILETO【功能】統(tǒng)計(jì)當(dāng)前表指定范圍內(nèi)滿足條件的記錄個(gè)數(shù)?!菊f(shuō)明】(1)和FOR缺省表示對(duì)所有記錄計(jì)數(shù)。(2)TO指統(tǒng)計(jì)結(jié)果存入一個(gè)

14、內(nèi)存變量中,若該項(xiàng)缺省,統(tǒng)計(jì)結(jié)果不保存?!纠?-10】use 學(xué)生成績(jī)count for 數(shù)學(xué)=60.and.性別=女 to ns? nscount to n1? n1appe blancount to n2 ? n25.4 數(shù)據(jù)統(tǒng)計(jì)5.4.2 數(shù)值字段的累加求和【命令】SUMFOR|WHILETO| ARRAY【功能】對(duì)數(shù)值型字段在列的方向上求和?!菊f(shuō)明】(1)可以是一個(gè)字段或多個(gè)字段,以及多個(gè)字段的組合,該項(xiàng)缺省對(duì)所有數(shù)值型字段分別求和。(2)和FOR缺省表示所有記錄參與求和。(3)求和結(jié)果可存入內(nèi)存變量列表或數(shù)組中?!纠?-11】統(tǒng)計(jì)選課.DBF文件中學(xué)號(hào)為“2010110003”同學(xué)所

15、選課程的總成績(jī)。clearuse 選課sum to zf for 學(xué)號(hào)=2010110003? zfuse 5.4.3 數(shù)值字段的求平均值【命令】AVERAGEFOR|WHILETO| ARRAY【功能】對(duì)數(shù)值型字段在列的方向上求平均值?!菊f(shuō)明】(1)指數(shù)值型字段及其組合,該項(xiàng)缺省對(duì)所有數(shù)值型字段分別求平均值。(2)和FOR缺省表示所有記錄參與求平均值。(3)求平均值結(jié)果可存入內(nèi)存變量列表或數(shù)組中。 【例5-12】AVERAGE的應(yīng)用。use 學(xué)生成績(jī)aver數(shù)學(xué),物理 to py1,py2? py1,py2use 學(xué)生aver year(date()-year(出生年月) to pn1 &統(tǒng)

16、計(jì)平均年齡?pn15.4.4 計(jì)算命令【命令】CALCULATE FOR|WHILETO| ARRAY【功能】計(jì)算統(tǒng)計(jì)類函數(shù)的值。【說(shuō)明】(1)這里的指具有統(tǒng)計(jì)意義的函數(shù)。這些函數(shù)是:CNT() 統(tǒng)計(jì)記錄數(shù)SUM() 當(dāng)前表數(shù)值字段(或數(shù)值型數(shù)組)求和AVG() 當(dāng)前表數(shù)值字段求平均值MAX() 對(duì)當(dāng)前表的C、N、D等字段求最大值MIN() 對(duì)當(dāng)前表的C、N、D等字段求最小值STD() 對(duì)當(dāng)前表的數(shù)值字段求標(biāo)準(zhǔn)偏差VAR() 對(duì)當(dāng)前表的數(shù)值字段求方差(2)SUM()、AVG()這樣的函數(shù)形式只能放在CALCULATE命令后使用。(3)MAX()、MIN()這樣的函數(shù)放在CALCULATE命令是

17、指對(duì)當(dāng)前表數(shù)值字段列方向求最大/小值?!纠?-13】CALCULATE的應(yīng)用。use 學(xué)生成績(jī) calc sum(數(shù)學(xué)),avg(數(shù)學(xué)) &立即顯示如下:SUM(數(shù)學(xué)) AVG(數(shù)學(xué)) 536.00 67.00 calc max(數(shù)學(xué)),min(數(shù)學(xué)) &顯示結(jié)果如下:MAX(數(shù)學(xué)) MIN(數(shù)學(xué)) 89.00 0.00 ?sum(數(shù)學(xué)) &這是錯(cuò)誤的,SUM()只能放在CALCULATE后 ?max(數(shù)學(xué)) &這也沒(méi)有意義,提示參數(shù)太少5.4.5 分類求和命令分類求和首先涉及到分類的字段,稱為關(guān)鍵字。再就是求和的數(shù)值型字段,數(shù)值字段是按照分類的關(guān)鍵字來(lái)分類求和的,求和的結(jié)果是放到一個(gè)新表中。

18、【命令】TOTAL ON TO FIELDS FOR|WHILE【功能】對(duì)數(shù)值型字段按照關(guān)鍵字分類求和?!菊f(shuō)明】(1)在分類求和命令執(zhí)行前,需對(duì)分類關(guān)鍵字字段進(jìn)行索引排序(單索引或復(fù)合索引)。(2)FIELDS表示需要求和的一個(gè)或多個(gè)數(shù)值型字段,“FIELDS”不能省,該項(xiàng)缺省對(duì)所有數(shù)值型字段求和。(4)不求和的數(shù)值型字段在新表中保留前面記錄的值。(5)分類求和結(jié)果存入命令產(chǎn)生的新表中,新表字段寬度與原來(lái)的表一樣(需求和的字段應(yīng)設(shè)計(jì)寬點(diǎn),否則“*”號(hào)溢出)。 【例5-14】統(tǒng)計(jì)選課.DBF文件中每名學(xué)生的總成績(jī),將統(tǒng)計(jì)結(jié)果置入總成績(jī)新表文件ZCJ.DBF.use 選課Listindex on

19、學(xué)號(hào) tag xhtotal on 學(xué)號(hào) to zcj fields 學(xué)號(hào),成績(jī)use zcjlist5.5.1 工作區(qū)的概念1工作區(qū)的概念關(guān)于工作區(qū)的概念有以下幾點(diǎn):(1)工作區(qū)是為打開表文件在內(nèi)存中開辟的區(qū)域,VFP提供32767個(gè)工作區(qū),各工作 區(qū)相互獨(dú)立,互不干擾。(2)一個(gè)工作區(qū)只能打開一個(gè)表文件,當(dāng)新的表打開,在這個(gè)區(qū)以前打開的表自動(dòng)關(guān)閉。一個(gè)表一般只能在一個(gè)工作區(qū)打開,當(dāng)這個(gè)表未關(guān)閉又在另外的工作區(qū)打開,會(huì)出現(xiàn)“文件正在使用”的提示。(3)可在工作區(qū)打開一個(gè)表的同時(shí),打開與表相關(guān)的備注文件和索引文件(多個(gè))。 (4)工作區(qū)編號(hào)1、2、3.10對(duì)應(yīng)用字母表示的工作區(qū)別名A、B、CJ

20、,用戶根據(jù)需要選擇工作區(qū)編號(hào)或別名來(lái)打開表。若未選擇工作區(qū)時(shí),系統(tǒng)默認(rèn)在1號(hào)區(qū)打開表文件。5.5 多個(gè)表的操作2工作區(qū)的選擇【命令】SELECT| 【功能】選擇要打開表的工作區(qū)?!菊f(shuō)明】(1)所選擇工作區(qū)可用工作區(qū)編號(hào)1、2、3,或者工作區(qū)別名A、B、C,或者表的別名來(lái)標(biāo)記。(2)“表別名”是在打開表時(shí),由“USE表文件名ALIAS表別名”命令指定,如果沒(méi)有用“ALIAS”指定,可認(rèn)為就是。(3)最后用SELETE命令選擇的工作區(qū)叫做當(dāng)前工作區(qū),其中的表文件叫做當(dāng)前表。(4)對(duì)當(dāng)前工作區(qū)中表的數(shù)據(jù)的訪問(wèn)直接使用字段名(也可加上別名),對(duì)其他工作區(qū)數(shù)據(jù)的訪問(wèn),要用到聯(lián)訪標(biāo)識(shí),也就是字段名前必須加

21、上別名,調(diào)用格式:工作區(qū)別名-字段名| 表別名-字段名| 工作區(qū)別名.字段名| 表別名.字段名【例5-15】工作區(qū)的選擇與數(shù)據(jù)訪問(wèn)。sele 1 &或sele Ause 學(xué)生 alias st &打開表時(shí)取了別名stsele 2use 選課list &顯示當(dāng)前表選課.dbf的數(shù)據(jù)go topsele 1 &或sele A,或sele st list &顯示當(dāng)前表學(xué)生.dbf的數(shù)據(jù)go top? 姓名,b-成績(jī) &顯示1區(qū)首記錄的姓名,2區(qū)首記錄的成績(jī)sele 3use 學(xué)生 &錯(cuò),提示“文件正在使用”,該表已在1區(qū)打開3與工作區(qū)相關(guān)的的函數(shù)(1)SELECT(0/1):函數(shù)返回值為當(dāng)前工作區(qū)/

22、最大工作區(qū)所在工作區(qū)號(hào),無(wú)參數(shù)時(shí)返回當(dāng)前工作區(qū)號(hào).(2)DBF(區(qū)號(hào)):返回指定工作區(qū)號(hào)所在工作區(qū)打開的表文件名,無(wú)參數(shù)時(shí)返回當(dāng)前區(qū)打開的表文件名.(3)RECNO(區(qū)號(hào)):指定工作區(qū)號(hào)所在工作區(qū)的記錄號(hào),無(wú)參數(shù)時(shí),返回當(dāng)前工作區(qū)打開表的當(dāng)前記錄號(hào).(4)ALIAS():返回指定工作區(qū)中表文件名。數(shù)值表達(dá)式用于指定工作區(qū)號(hào)。若用“use alias ”打開表時(shí)指定了別名,則返回表的別名。【例5-16】與工作區(qū)相關(guān)函數(shù)的使用sele 1use 學(xué)生 alias xssele 2use 選課?sele (0) &顯示當(dāng)前表區(qū)號(hào):2?sele (1) &顯示:32767 ?dbf (1) &顯示:d

23、:test學(xué)生.dbf ?alias (1) &顯示表別名:xs 5.5.2 表之間的關(guān)聯(lián) 1關(guān)聯(lián)的概念 關(guān)聯(lián)也稱為建立表之間的關(guān)系,發(fā)出關(guān)聯(lián)命令工作區(qū)的表稱為父表,被關(guān)聯(lián)工作區(qū)的表稱為子表,根據(jù)父表與子表關(guān)聯(lián)字段的數(shù)據(jù)聯(lián)系,表之間的記錄的關(guān)聯(lián)有多種方式。(1)一對(duì)一的關(guān)系選作關(guān)聯(lián)字段的字段值,父表和子表中都只有一個(gè)是相同的,當(dāng)父表指針移動(dòng)時(shí),父表一條記錄與子表的一條記錄相關(guān)聯(lián)。如在學(xué)生表和學(xué)生成績(jī)表中的學(xué)號(hào)都是唯一的,它們之間建立的關(guān)聯(lián)是一對(duì)一的關(guān)系。(2)一對(duì)多的關(guān)系子表有重復(fù)的關(guān)鍵字字段值,父表沒(méi)有重復(fù)。父表一條記錄與子表有多條記錄相關(guān)聯(lián)。如在學(xué)生表中學(xué)號(hào)是唯一的,在學(xué)生的選課表中,由于

24、一個(gè)學(xué)生要選多門課程,選一門課程形成一條記錄,學(xué)號(hào)就有重復(fù),設(shè)置學(xué)生表是父表,選課表是子表,建立的是一對(duì)多的關(guān)系。(3)多對(duì)一的關(guān)系父表多條記錄與子表一條記錄相關(guān)聯(lián),但子表的一條記錄只能和父表的一條記錄相關(guān)連。把前面的選課表作為父表發(fā)出關(guān)聯(lián)命令,把第一章列出的沒(méi)有重復(fù)值的課程列表作為子表,所建立的是多對(duì)一的關(guān)系。(4)多對(duì)多的關(guān)系父表多條記錄與子表多條記錄相關(guān)聯(lián)是多對(duì)多的關(guān)系。在Visual FoxPro中,不能直接處理多對(duì)多關(guān)系,而是拆分為一對(duì)多和多對(duì)一關(guān)系來(lái)進(jìn)行處理。2關(guān)聯(lián)命令【命令】SET RELATION TO INTO, INTOADDTIVE【功能】以當(dāng)前表為父表與一個(gè)或多個(gè)工作區(qū)

25、的子表建立關(guān)聯(lián)?!菊f(shuō)明】(1)發(fā)出關(guān)聯(lián)命令所在工作區(qū)的表是父表,被關(guān)聯(lián)的子表用表示,可以是工作區(qū)別名或工作區(qū)編號(hào)以及表別名。子表必須先對(duì)關(guān)聯(lián)字段索引(單索引或復(fù)合索引),父表可建可不建索引,當(dāng)父親表指針移動(dòng)時(shí),子表指針按照索引順序移動(dòng)到與主表關(guān)鍵字相匹配的第一條記錄,若沒(méi)有匹配的記錄,子表指針指向文件尾。(2)是關(guān)聯(lián)的關(guān)鍵字段,一般使用表之間具有相同類型和寬度的同名字段,不同名的字段只要類型和數(shù)值相同也可建立關(guān)聯(lián)。(3)關(guān)聯(lián)后,在父表工作區(qū)移動(dòng)記錄指針,牽動(dòng)子表指針的作同步移動(dòng),如轉(zhuǎn)向子表的工作區(qū)移動(dòng)指針,父表的指針不會(huì)跟著移動(dòng)。(4)ADDTIVE是建立新的關(guān)聯(lián)后,保留以前的關(guān)聯(lián),用于三個(gè)或

26、三個(gè)以上表的多重關(guān)聯(lián)。(5)關(guān)聯(lián)后,當(dāng)前工作區(qū)字段名可直接使用,被訪問(wèn)工作區(qū)字段名前加訪問(wèn)標(biāo)識(shí)“子表別名-字段名”(6)SET SKIP TO在關(guān)聯(lián)命令后使用,是建立一對(duì)多的關(guān)聯(lián)。系統(tǒng)默認(rèn)建立的是多對(duì)一關(guān)系。(7)SET RELATION TO RECNO() INTO 是把記錄號(hào)作關(guān)鍵字建立關(guān)聯(lián)。(8)SET RELATION TO命令結(jié)束關(guān)聯(lián),終止表之間指針的同步移動(dòng)?!纠?-17】顯示一個(gè)同學(xué)在學(xué)生.dbf表中姓名、性別、出生年月和學(xué)生成績(jī).dbf表中的數(shù)學(xué)、物理等字段的數(shù)據(jù)。以兩表的共有字段學(xué)號(hào)作關(guān)聯(lián)的關(guān)鍵字。執(zhí)行命令:sele ause 學(xué)生成績(jī) alias xscj & 注意給表取

27、了別名Index on 學(xué)號(hào) tag xh & 設(shè)置學(xué)號(hào)為當(dāng)前索引項(xiàng)sele buse 學(xué)生set rela to 學(xué)號(hào) into a loca for 姓名=陳鋼 & A區(qū)的指針跟隨父表指向“陳鋼”這條記錄disp 姓名,性別,出生年月,a.數(shù)學(xué),a.物理【例5-18】使用學(xué)生表和選課表將“陳鋼”同學(xué)的成績(jī)提高5%。clearsele 1use 學(xué)生index on 學(xué)號(hào) to xssele 2use 選課set rela to 學(xué)號(hào) into A list a-學(xué)號(hào),a-姓名,成績(jī)for a-姓名=陳鋼repl all 成績(jī) with 成績(jī)+成績(jī)*0.05 for a-姓名=陳鋼 list

28、 a-學(xué)號(hào),a-姓名,成績(jī)for a-姓名=陳鋼 close all串連當(dāng)?shù)谝粋€(gè)表的記錄指針移動(dòng)時(shí),第二個(gè)表跟第一個(gè)表的記錄指針走,第三個(gè)表跟第二個(gè)表指針走。其示意圖如圖5-5。sele 1use 課程index on課程號(hào)to kchsele 2use 選課set rela to課程號(hào)into aindex on 學(xué)號(hào) to xhsele 3use 學(xué)生set rela to學(xué)號(hào)into bloca for 姓名=”陳鋼”?“學(xué)號(hào) 姓名 性別 課程名 成績(jī)”?學(xué)號(hào),姓名,性別, a-課程名,b-成績(jī)close all并聯(lián)兩個(gè)表的記錄指針同時(shí)跟一個(gè)表移動(dòng)。示意圖如下面的圖5-6:sele 1u

29、se 學(xué)生index on 學(xué)號(hào) to xhsele 2use 課程index on 課程號(hào) to kchsele 3use 選課set rela to 學(xué)號(hào)into aset rela to 課程號(hào)into b addi & addi表示對(duì)b區(qū)新關(guān)聯(lián)建立,對(duì)a區(qū)的關(guān)聯(lián)保留loca for a-姓名=”陳鋼”?“姓名 性別 課程名 成績(jī)”?a-姓名,a-性別,B-課程名,成績(jī)3數(shù)據(jù)工作期VFP提供一個(gè)數(shù)據(jù)工作期窗口,來(lái)直觀地進(jìn)行表的打開與關(guān)閉、記錄和字段的篩選、瀏覽、表之間關(guān)聯(lián)等各種操作。數(shù)據(jù)工作期窗口可用命令和菜單啟動(dòng)【命令】SET VIEW ON圖5-7數(shù)據(jù)工作期窗口【菜單】選擇系統(tǒng)菜單“

30、窗口”下的“數(shù)據(jù)工作期(D)”命令,出現(xiàn)圖5-7所示的數(shù)據(jù)工作期窗口。圖5-7數(shù)據(jù)工作期窗口【功能】數(shù)據(jù)工作期的功能是通過(guò)選擇數(shù)據(jù)工作期窗口的命令按鈕來(lái)實(shí)現(xiàn)的:屬性:擊屬性按鈕,打開工作區(qū)屬性窗口,可進(jìn)行字段和記錄的篩選,這和第四章講表的瀏覽時(shí),選“表”菜單下的“屬性”,所打開的工作區(qū)屬性窗口相同。瀏覽:對(duì)打開的表以瀏覽窗口的格式顯示。打開:會(huì)出現(xiàn)“打開”對(duì)話框,選擇需打開的表,打開的表出現(xiàn)在數(shù)據(jù)工作期窗口左邊“別名”列表框中。關(guān)閉:關(guān)閉當(dāng)前表。在“別名”列表框選中關(guān)閉的表再擊這個(gè)按鈕。關(guān)系:用來(lái)建立表之間的關(guān)聯(lián),其效果可在圖5-7右邊的“關(guān)系”列表框中看到。一對(duì)多:建立一對(duì)多的關(guān)聯(lián)。相當(dāng)于執(zhí)行SET SKIP TO命令。【說(shuō)明】SET VIEW OFF命令或選擇數(shù)據(jù)工作期窗口的“關(guān)閉”按鈕來(lái)關(guān)閉數(shù)據(jù)工作期。案例見教材【例5-22】在數(shù)據(jù)工作期建立表的關(guān)聯(lián),并同時(shí)瀏覽兩個(gè)關(guān)聯(lián)表的記錄,看父表指針移動(dòng)時(shí),子表指針的跟隨移動(dòng)。5.5.3 表的更新 表的數(shù)據(jù)更新是指在多個(gè)工作區(qū)打開多個(gè)表后,無(wú)須建立關(guān)聯(lián),用一個(gè)表的數(shù)據(jù)修改另一個(gè)表的數(shù)據(jù)?!久睢縐PDATE ONFROMREPLACEWITH,WITHRANDOM【功能】用其他工作區(qū)表的數(shù)據(jù)成批的修改當(dāng)前表的數(shù)據(jù)?!菊f(shuō)明】(1

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論