程序設(shè)計與醫(yī)學數(shù)據(jù)庫:第3章 Visual FoxPro數(shù)據(jù)表的操作與管理_第1頁
程序設(shè)計與醫(yī)學數(shù)據(jù)庫:第3章 Visual FoxPro數(shù)據(jù)表的操作與管理_第2頁
程序設(shè)計與醫(yī)學數(shù)據(jù)庫:第3章 Visual FoxPro數(shù)據(jù)表的操作與管理_第3頁
程序設(shè)計與醫(yī)學數(shù)據(jù)庫:第3章 Visual FoxPro數(shù)據(jù)表的操作與管理_第4頁
程序設(shè)計與醫(yī)學數(shù)據(jù)庫:第3章 Visual FoxPro數(shù)據(jù)表的操作與管理_第5頁
已閱讀5頁,還剩98頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章VisualFoxPro數(shù)據(jù)表的操作與管理遼寧省教育廳“十一五”立項教育研究規(guī)劃課題遼寧省普通高等學校精品課程全國等醫(yī)藥院校計算機系列規(guī)劃教材中國醫(yī)科大學計算機中心《程序設(shè)計與醫(yī)學數(shù)據(jù)庫應用基礎(chǔ)》教學組教學思想與教學目標7個目標掌握數(shù)據(jù)表的建立、打開和關(guān)閉方法;掌握表記錄的顯示、定位、追加、修改和刪除等操作方法;掌握為表建立排序文件的方法;掌握表索引的相關(guān)操作;掌握順序查詢和索引查詢的方法;熟悉VisualFoxPro的統(tǒng)計和計算命令;熟悉VisualFoxPro的多表操作。課程導航3.23.3VisualFoxPro表記錄的基本操作表記錄的統(tǒng)計與計算VisualFoxPro表結(jié)構(gòu)的基本操作3.13.23.4表的排序3.23.6表的索引表的查詢3.53.7多表操作3.7節(jié)3.4節(jié)3.5節(jié)3.6節(jié)3.1節(jié)3.2節(jié)3.3節(jié)要點總結(jié)3.1VisualFoxPro表結(jié)構(gòu)的基本操作

數(shù)據(jù)表是處理數(shù)據(jù)和建立關(guān)系型數(shù)據(jù)庫及應用程序的基本單元。而數(shù)據(jù)表又是數(shù)據(jù)庫的基本組成部分。數(shù)據(jù)庫的創(chuàng)建則是開發(fā)與編輯數(shù)據(jù)庫軟件的基礎(chǔ),而數(shù)據(jù)庫是表的集合。

在Visual

FoxPro中有兩種表:數(shù)據(jù)庫表和自由表。如果建立表時數(shù)據(jù)庫是打開的,則建立的表為當前數(shù)據(jù)庫的數(shù)據(jù)庫表,否則,建立的是自由表。第5章介紹數(shù)據(jù)庫表3.1.4表結(jié)構(gòu)的創(chuàng)建3.1.13.1.23.1.3表結(jié)構(gòu)的顯示表結(jié)構(gòu)的復制表結(jié)構(gòu)的修改3.1VisualFoxPro表結(jié)構(gòu)的基本操作3.1.5表文件的打開、關(guān)閉與刪除住院號姓名性別出生日期吸煙否預付押金05002003劉中華

男11/23/1972.T.5000.0005002001李小萍女12/30/1978.F.5000.0005001002胡秉男11/23/1990.F.6000.003.1.1表結(jié)構(gòu)的創(chuàng)建1.表結(jié)構(gòu)中的概念與規(guī)定(1)字段名:是表中唯一的。必須以漢字、字母和下劃線開頭,由漢字、字母、數(shù)字和下劃線組成。數(shù)據(jù)庫表中字段名長度最多128個字符,自由表中字段名長度最多10個字符。(2)字段類型:存儲在該字段中的數(shù)據(jù)類型。(3)字段寬度:字段所能容納數(shù)據(jù)的最大字節(jié)數(shù)。(4)小數(shù)位數(shù):數(shù)值型數(shù)據(jù)將保留幾位小數(shù)。

此時的字段寬度=整數(shù)位數(shù)+1+小數(shù)位數(shù)。(5)NULL值(空值):NULL值指無明確的值。3.1.1表結(jié)構(gòu)的創(chuàng)建2.創(chuàng)建數(shù)據(jù)表的命令【格式】CREATE[D][<表文件名>|?]【功能】建立一個表文件,同時打開該表文件?!菊f明】[路徑]用來指定表文件的保存位置,若省略則保存在VisualFoxPro的默認路徑中。若省略<表文件名>短語或使用“?”,則VisualFoxPro將彈出“創(chuàng)建”對話框提示用戶輸入表文件名和指定保存位置。輸入命令后,按Enter鍵,屏幕上會出現(xiàn)“表設(shè)計器”對話框,利用該對話框即可建立表的結(jié)構(gòu)。不指定文件擴展名時,默認擴展名為.dbf備注文件.fpt。【例3-1】在E盤中的“住院管理”文件夾中建立數(shù)據(jù)表文件,并命名表文件名為“患者信息”。

CREATEE:\住院管理\患者信息3.1.2表文件的打開、關(guān)閉與刪除

打開表文件【格式】USE[路徑][<表文件名>|?]【功能】打開指定路徑下保存的指定表文件?!菊f明】若表結(jié)構(gòu)中含有備注型、通用型字段等,同名的.fpt文件同時打開?!纠?-4】打開在E盤住院管理子文件夾中的“患者信息.dbf”表。USEE:\住院管理\患者信息注意其他打開方法3.1.2表文件的打開、關(guān)閉與刪除

2.關(guān)閉表文件(5種)USE:關(guān)閉當前打開的表。CLEARALL:關(guān)閉各種類型的文件,釋放內(nèi)存變量。CLOSEALL:關(guān)閉各種類型的文件。CLOSEDATABASE:關(guān)閉所有打開的數(shù)據(jù)庫文件、表文件、索引文件等。QUIT:關(guān)閉所有文件,退出VisualFoxPro系統(tǒng)。表文件操作完成后,或暫時不用時,必須將其關(guān)閉。如果已有打開的表文件,在打開另一個數(shù)據(jù)表的同時會自動關(guān)閉當前打開的數(shù)據(jù)表。3.1.3表結(jié)構(gòu)的顯示

【格式】LIST|DISPLAYSTRUCTURE【功能】顯示當前表文件的結(jié)構(gòu)?!菊f明】在執(zhí)行該命令時,如果系統(tǒng)中沒有已經(jīng)打開的表文件,系統(tǒng)將提示輸入文件名。若無任何子句則將信息輸出到Visual

FoxPro主窗口中,若使用TOPRINT子句則將信息輸出到打印機,若使用TOFILE子句則將信息輸出到文件。注意:LIST|DISPLAY的區(qū)別?【例3-2】顯示在E盤住院管理子文件夾中患者信息.dbf表的結(jié)構(gòu)。

USEE:\住院管理\患者信息

LISTSTRUCTURE系統(tǒng)主窗口顯示3.1.4表結(jié)構(gòu)的修改

【格式】MODIFYSTRUCTURE【功能】顯示并修改當前打開的數(shù)據(jù)表結(jié)構(gòu)?!菊f明】執(zhí)行該命令后,將打開“表設(shè)計器”對話框顯示當前數(shù)據(jù)表的結(jié)構(gòu),并允許用戶對其進行修改。經(jīng)修改的表結(jié)構(gòu)存盤后,系統(tǒng)將自動備份原數(shù)據(jù)表文件,原.dbf文件變?yōu)?bak文件,原.fpt文件變?yōu)?tbk文件。【例3-3】修改在E盤住院管理子文件夾中的“患者信息.dbf”表結(jié)構(gòu)。USEE:\住院管理\患者信息MODIFYSTRUCTURE3.1.5表結(jié)構(gòu)的復制

【格式】COPYSTRUCTURETO<文件名>[FIELDS<字段名表>]【功能】從當前表文件復制新表文件的結(jié)構(gòu)。【說明】命令執(zhí)行后生成的新表文件只有表結(jié)構(gòu),沒有記錄。FIELDS選項中<字段名表>決定新表文件結(jié)構(gòu),<字段名表>中的字段必須是當前表中的字段,若默認情況下該子句則生成的新表文件與當前表結(jié)構(gòu)相同?!纠?-3】將“患者信息.dbf”表中的住院號、吸煙否、診斷、既往病史、過敏史、血型、住院科室、家族病史字段生成一個新表文件“患者病情信息空表.dbf”作為該表文件的結(jié)構(gòu)。USE患者信息COPYSTRUCTURETO患者病情信息空表FIELDS住院號,;吸煙否,診斷,既往病史,過敏史,血型,住院科室,家族病史USE患者病情信息空表LISTSTRUCTURE3.7節(jié)3.4節(jié)3.5節(jié)3.6節(jié)3.1節(jié)3.2節(jié)3.3節(jié)要點總結(jié)3.2VisualFoxPro表記錄的基本操作將數(shù)據(jù)存儲在表中的目的即為方便用戶進行編輯、查詢等管理,在VisualFoxPro中提供了關(guān)于表記錄操作的方法。表記錄的錄入和追加3.2.13.2.23.2.3表記錄的顯示記錄指針的定位3.2VisualFoxPro表記錄的基本操作3.2.4表記錄的修改3.2.53.2.63.2.7表記錄的刪除表的復制3.2.8外部數(shù)據(jù)文件與表記錄之間的轉(zhuǎn)換數(shù)組與表之間的數(shù)據(jù)傳遞3.2.1表記錄的錄入和追加表的數(shù)據(jù)錄入有多種方法:1.表結(jié)構(gòu)建立時錄入數(shù)據(jù)2.表結(jié)構(gòu)建成并存盤后,利用命令向表中追加記錄【格式】APPEND[BLANK]【功能】在表的末尾添加一個或多個新記錄?!菊f明】若使用BLANK子句,則不打開記錄編輯窗口,由系統(tǒng)自動在當前表的末尾添加一條空記錄。若省略BLANK子句,則打開如圖3-3所示的記錄編輯窗口,即可輸入記錄。3.菜單方式【例3-4】設(shè)例3-1中創(chuàng)建的數(shù)據(jù)表“患者信息.dbf”為打開狀態(tài),請在該表的末尾追加一條空白記錄。APPENDBLANK插入記錄【格式】INSERT[BEFORE][BLANK]【功能】在當前表文件的指定位置插入新記錄或空記錄。【說明】省略BERORE子句時將在當前記錄之后插入新記錄;若使用BEFORE子句則在當前記錄前插入新記錄;若使用BLANK子句則插入一條空記錄。若表文件建立了索引,并且相關(guān)的索引文件已經(jīng)打開了,則插入的新記錄按索引值進行排序。【例3-12】在“患者信息.dbf”的第3條記錄后插入一條新記錄,在第1條記錄前插入一條空白記錄。USE患者信息GO3INSERTGO1INSERTBEFOREBLANK3.2.1表記錄的錄入和追加3.2.4表記錄的添加

從另一表文件中追加記錄【格式】APPENDFROM<表文件名|?>[FIELDS<字段名表>][FOR<邏輯表達式>]【功能】從指定的表中讀取數(shù)據(jù)并追加到當前表文件的末尾?!菊f明】<表文件名>為數(shù)據(jù)來源表名,而當前打開的數(shù)據(jù)表為被追加的數(shù)據(jù)表。若當前表的字段寬度大于數(shù)據(jù)來源的寬度,記錄能正常追加;反之,不能正常追加?!纠?-13】現(xiàn)存在一空表名為“外科患者信息.dbf”,表結(jié)構(gòu)與“患者信息.dbf”表相同。要求從“患者信息.dbf”表中讀取外科患者的信息追加到“外科患者信息”表中。USE外科患者信息APPENDFROM患者信息FOR住院科室="外科"LISTFIELDS住院號,姓名,性別,住院科室3.2.2表記錄的顯示

【格式】

LIST|DISPLAY

[OFF][FIELDS<字段名表>][<范圍>][FOR<條件>][WHILE<條件>]【功能】顯示指定范圍內(nèi)滿足條件的各個記錄【說明】1.使用OFF時,不顯示記錄號,否則顯示記錄號

2.FIELDS<字段名表>:用來指定顯示的字段

3.范圍為可選項,可以為ALL,RECORD(N),NEXT(N),REST中任意一個

4.FOR<條件>:指定對表文件中指定范圍內(nèi)滿足條件的記錄進行操作

5.WHILE<條件>:作用同F(xiàn)OR,但是,當?shù)谝淮斡龅讲粷M足條件的記錄時,停止繼續(xù)往后操作。3.2.2表記錄的顯示

【例3-5】顯示“患者信息.dbf”表中全部記錄的住院號、姓名、性別、入院日期、吸煙否、現(xiàn)住址字段。【例3-6】顯示表中外科患者的住院號、姓名、性別、住院科室字段的信息,不顯示記錄號?!纠?-7】顯示表中2008年6月之前入院患者的住院號、姓名、住院科室、入院日期信息?!纠?-8】顯示表中姓張的和姓劉的患者的住院號、姓名、住院科室、診斷信息。【例3-9】顯示表中不吸煙(吸煙否值為.f.)患者的住院號、姓名、住院科室、診斷、吸煙否信息。LISTFIELDS住院號,姓名,性別,入院日期,吸煙否,現(xiàn)住址

LISTOFFFIELDS住院號,姓名,性別,住院科室FOR住院科室="外科"DISPLAYFIELDS住院號,姓名,住院科室,入院日期FOR

入院日期<{^2008/06/04}DISPLAYFIELDS住院號,姓名,住院科室,診斷FOR姓名="張".OR.姓名="劉"DISPLAYFIELDS住院號,姓名,住院科室,吸煙否,診斷FOR.NOT.吸煙否DISPLAYFIELDS住院號,姓名,住院科室,吸煙否,診斷FOR吸煙否=.F.3.2.3記錄指針的定位

記錄號是用于標識數(shù)據(jù)記錄在表文件中的物理順序。記錄指針中存放的是當前的記錄號。當某個數(shù)據(jù)表文件剛打開時,其記錄指針指向第1條記錄。記錄指針的定位就是將記錄指針移到指定的記錄上,記錄指針指向的記錄稱為當前記錄。VisualFoxPro的記錄指針移動命令分為兩類,即絕對移動命令和相對移動命令。3.2.3記錄指針的定位

記錄指針的絕對移動【格式】[GO|GOTO]<數(shù)值表達式>【功能】將記錄指針絕對定位到<數(shù)值表達式>指定的記錄上?!菊f明】<數(shù)值表達式>:記錄的物理記錄號絕對定位與是否打開索引文件沒有關(guān)系?!纠?-10】絕對定位命令的用法如下:USE患者信息GO2?RECNO() &&系統(tǒng)主窗口顯示24?RECNO() &&系統(tǒng)主窗口顯示4DISPLAY&&系統(tǒng)主窗口顯示第4條記錄的所有字段USE3.2.3記錄指針的定位

記錄指針的相對移動【格式1】SKIP<數(shù)值表達式>【功能】記錄指針從當前記錄向前或向后移動若干個記錄?!菊f明】<數(shù)值表達式>表示移動的記錄個數(shù),數(shù)值表達式值為負數(shù)時,表示向前移動;為正數(shù)時,表示向后移動;默認時,表示向后移動1個記錄?!靖袷?】GO|GOTO<TOP|BOTTOM>【功能】將記錄指針移到表文件的首記錄或尾記錄?!菊f明】TOP:則將記錄指針移到當前表文件的首記錄;BOTTOM:則將記錄指針移到當前表文件的最后一條記錄。常用測試函數(shù)第一條記錄前最后一條記錄后第一條記錄空表BOF().T..F..F..T.EOF().F..T..F..T.RECNO()1記錄數(shù)+111【例3-11】相對定位的用法:USE患者信息LIST&&共13條記錄?RECNO()&&系統(tǒng)主窗口顯示14?EOF()&&系統(tǒng)主窗口顯示.T.1SKIP2?RECNO()&&系統(tǒng)主窗口顯示3SKIP-4?RECNO()&&系統(tǒng)主窗口顯示1?BOF()&&系統(tǒng)主窗口顯示.T.GOBOTTOM?RECNO()&&系統(tǒng)主窗口顯示13?EOF()&&系統(tǒng)主窗口顯示.F.USE3.2.3記錄指針的定位

注意其他命令對記錄指針位置的影響????3.2.4表記錄的修改

1.編輯修改【格式】EDIT|CHANGE[FIELDS<字段名表>][<范圍>][FOR<邏輯表達式1>][WHILE<邏輯表達式2>]【功能】按給定條件編輯修改當前打開的表文件的記錄。2.瀏覽修改【格式】BROWSE[FIELDS<字段名表>][FOR<邏輯表達式>]【功能】以瀏覽窗口方式顯示當前表數(shù)據(jù),并供用戶進行修改?!菊f明】按給定條件瀏覽修改當前打開的表文件的記錄3.2.4表記錄的修改

3.替換修改【格式】REPLACE<字段名1>WITH<表達式1>[ADDITIVE][,<字段名2>WITH<表達式2>[ADDITIVE]]…[<范圍>][FOR<邏輯表達式1>][WHILE<邏輯表達式2>]【功能】用指定表達式的值替換當前表中滿足條件記錄的指定字段的值?!菊f明】此命令可以同時自動替換若干個字段的內(nèi)容。ADDITIVE子句僅在替換備注型字段時才使用,表示將表達式的值追加在原備注字段內(nèi)容之后。默認情況下,用表達式的值替換原備注字段的內(nèi)容。3.2.4表記錄的修改

【例3-14】由于“奧德金注射液”費用調(diào)整為72.20元,請使用命令修改“住院費用.dbf”表中費用名稱為“奧德金注射液”記錄的單價和費用小結(jié)字段的內(nèi)容?!纠?-15】已知住院號為“08060104”的患者在“床位分配.dbf”表中為第5條記錄,現(xiàn)將負責看護該患者的護士更換為“趙小情”,請使用命令完成?!纠?-16】已知“患者信息.dbf”表中第12和13條記錄的患者“現(xiàn)住址”字段中未注明所在省份為“遼寧省”,請使用命令添加在該字段的尾部。USE住院費用LISTFIELDS住院號,費用名稱,單價,用量,費用小結(jié)FOR費用名稱="奧德金注射液"REPLACE單價WITH72.20,費用小結(jié)WITH單價*用量;FOR費用名稱="奧德金注射液"LISTFIELDS住院號,費用名稱,單價,用量,費用小結(jié)FOR費用名稱="奧德金注射液"USE床位分配GO5REPLACE護士姓名WITH"趙小情"USE患者信息DISPLAYALLFIELDS住院號,姓名,住院科室,現(xiàn)住址GO12REPLACE現(xiàn)住址WITH"遼寧省"ADDITIVENEXT2DISPLAYALLFIELDS住院號,姓名,住院科室,現(xiàn)住址3.2.5表記錄的刪除

表記錄的刪除分為:邏輯刪除和物理刪除。1.邏輯刪除(可以恢復)邏輯刪除就是給指定的記錄添加刪除標記“*”?!靖袷健緿ELETE[<范圍>][FOR<邏輯表達式1>][WHILE<邏輯表達式2>]【功能】對當前表中指定范圍內(nèi)滿足條件的記錄添加刪除標記?!菊f明】當同時使用默認的<范圍>和<邏輯表達式>子句時,僅邏輯刪除當前記錄?!纠?-17】邏輯刪除“患者信息.dbf”表中2008年6月4日之前入院患者的信息。USE患者信息DELETEFOR入院日期<{^2008/06/04}LISTFIELDS住院號,姓名,入院日期,住院科室3.2.5表記錄的刪除

3.恢復邏輯刪除記錄恢復邏輯刪除是將被邏輯刪除的記錄恢復為正常記錄,即將刪除標記“*”去掉?!靖袷健縍ECALL[<范圍>][FOR<邏輯表達式1>][WHILE<邏輯表達式2>]【功能】對當前表中指定范圍內(nèi)滿足條件的記錄的刪除標記去掉?!菊f明】當同時使用默認的<范圍>,<邏輯表達式>子句時,僅去掉當前記錄的刪除標記?!纠?-19】恢復“患者信息.dbf”表中刪除的所有記錄。USE患者信息RECALLALLLISTFIELDS住院號,姓名,入院日期,出院日期,住院科室3.2.5表記錄的刪除

4.物理刪除記錄(不可恢復)【格式】PACK【功能】對當前表中所有帶刪除標記的記錄全部真正地刪除。【說明】選擇DBF,表示僅清除邏輯刪除的記錄而不壓縮備注文件,選擇MEMO,表示僅壓縮備注文件中無用的空間,而不清除被邏輯刪除的記錄。不帶任何可選項時,PACK命令既清除邏輯刪除的記錄,又壓縮備注文件?!纠?-20】將“患者信息.dbf”表中的2008年6月1日到2008年6月10日期間入院的患者信息進行物理刪除。USE患者信息DELETEFOR入院日期>={^2008/06/01}.AND.入院日期;<{^2008/06/10}PACKLISTFIELDS住院號,姓名,入院日期,住院科室3.2.5表記錄的刪除

5.一次性刪除全部記錄【格式】ZAP【功能】對當前打開的表文件中所有的記錄全部進行物理刪除?!菊f明】執(zhí)行該命令后,只保留表文件的結(jié)構(gòu),而不再有任何數(shù)據(jù)。這種刪除無法恢復,因此在執(zhí)行該命令時,提示對話框,單擊“是”按鈕將清除所有記錄,單擊“否”按鈕放棄ZAP操作。

ZAP命令等價于DELETEALL與PACK兩條命令被執(zhí)行。3.2.6表的復制

1.表文件的復制【格式】COPYTO<新文件名>[FIELDS<字段名表>][范圍][FOR<邏輯表達式1>][WHILE<邏輯表達式2>]【功能】把當前打開的表文件中符合條件的記錄的指定字段復制生成一個新表文件?!菊f明】生成的新表文件的結(jié)構(gòu)由FIELDS<字段名表>指定,該項默認時復制所有字段,包含的記錄由范圍和條件子句指定?!纠?-21】復制“患者信息.dbf”表中所有記錄的住院號、吸煙否、診斷、既往病史、過敏史、血型、住院科室、家族病史字段生成一個新表文件“患者病情信息表.dbf”。USE患者信息COPYTO

患者病情信息表FIELDS

住院號,吸煙否,診斷,既往病史,過敏史,血型,住院科室,家族病史USE患者病情信息表LISTFIELDS住院號,吸煙否,既往病史,過敏史,血型,住院科室自學3.2.7

數(shù)組與表之間的數(shù)據(jù)傳遞

1.數(shù)組與記錄之間的數(shù)據(jù)傳遞記錄內(nèi)容傳遞到數(shù)組【格式】SCATTER[FIELDS<字段名表>]TO<數(shù)組名>【功能】將當前表中當前記錄的各個字段的數(shù)據(jù)依次復制到指定數(shù)組的各個元素中?!菊f明】若使用FIELDS子句,則只傳遞指定的各字段的值,否則傳遞除備注型和通用型字段外的其余字段的值?!纠?-22】將“患者信息.dbf”表中第1條記錄的信息傳遞到數(shù)組hzxx中(數(shù)組hzxx尚未定義)。CLEARMEMORYUSE患者信息SCATTERTOhzxxDISPLAYMEMORYLIKEhzxx3.2.7

數(shù)組與表之間的數(shù)據(jù)傳遞

數(shù)組內(nèi)容傳遞到記錄【格式】GATHERFROM<數(shù)組名>[FIELDS<字段名表>]【功能】將指定的數(shù)組中各元素的值依次復制到當前表的當前記錄各字段中?!菊f明】若使用FIELDS子句,則只傳遞數(shù)組元素的值到指定的各字段。傳遞過程中不修改備注型和通用型字段的值,若遇到備注型或通用型字段,則越過它處理下一個字段。各數(shù)組元素與對應字段的數(shù)據(jù)類型必須一致,否則因類型不匹配將不會傳遞?!纠?-23】利用數(shù)組向“患者信息.dbf”表中追加一條非空白記錄,包含患者的住院號、姓名、性別、出生日期、吸煙否、婚否字段的信息。CLEARMEMORYDIMENSIONxhz(6)xhz(1)="08060501"xhz(2)="劉涵"xhz(3)="女"xhz(4)={^1957/12/03}xhz(5)=.F.xhz(6)=.T.USE患者信息APPENDBLANKGATHERFROMxhzDISPLAYFIELD住院號,姓名,性別,出生日期,吸煙否,婚否3.2.7

數(shù)組與表之間的數(shù)據(jù)傳遞

2.數(shù)組與表之間的數(shù)據(jù)傳遞將數(shù)據(jù)表內(nèi)容復制到數(shù)組【格式】COPYTOARRAY<數(shù)組名>[<范圍>][FOR<邏輯表達式>][FIELDS<字段名表>]【功能】將當前表中指定范圍內(nèi)符合條件的記錄的字段值復制到指定的數(shù)組中。【說明】若指定數(shù)組尚未定義,則系統(tǒng)自動建立一個新的二維數(shù)組來接收數(shù)據(jù)。其余說明與SCATTERTO命令相似。3.2.7

數(shù)組與表之間的數(shù)據(jù)傳遞

2.數(shù)組與表之間的數(shù)據(jù)傳遞將數(shù)組內(nèi)容復制到數(shù)據(jù)表【格式】APPENDFROMARRAY<數(shù)組名>[FIELDS<字段名表>]【功能】將指定數(shù)組變量中各數(shù)組元素的值復制到當前表中。【說明】與GATHERFROM命令相似?!纠?-24】利用數(shù)組復制“患者信息.dbf”中吸煙患者的信息到新表文件“吸煙患者信息.dbf”表中。CLEARMEMORYUSE患者信息COPYTOARRAYxyhzFOR吸煙否=.T.COPYSTRUCTURETO吸煙患者信息USE吸煙患者信息APPENDFROMARRAYxyhzLIST住院號,姓名,性別,吸煙否,住院科室3.7節(jié)3.4節(jié)3.5節(jié)3.6節(jié)3.1節(jié)3.2節(jié)3.3節(jié)要點總結(jié)在數(shù)據(jù)管理過程中往往需要在不同格式的數(shù)據(jù)處理軟件中進行數(shù)據(jù)的交叉使用,VisualFoxPro中提供了將其他數(shù)據(jù)文件格式與.dbf文件格式進行轉(zhuǎn)換的方法。自學3.2.8

外部數(shù)據(jù)文件與表記錄之間的轉(zhuǎn)換

3.7節(jié)3.4節(jié)3.5節(jié)3.6節(jié)3.1節(jié)3.2節(jié)3.3節(jié)要點總結(jié)1.表的導入選擇【文件】|【導入】命令,系統(tǒng)打開“導入”對話框,在“類型”下拉列表框中選擇導入文件的類型,在“來源于”文本框中輸入所導入文件的位置與文件名,然后單擊“確定”按鈕即可。3.2.8

外部數(shù)據(jù)文件與表記錄之間的轉(zhuǎn)換

3.7節(jié)3.4節(jié)3.5節(jié)3.6節(jié)3.1節(jié)3.2節(jié)3.3節(jié)要點總結(jié)2.表的導出選擇【文件】|【導出】命令,“導出”對話框,在“類型”下拉列表框中選擇導入文件的類型,在“到”文本框中輸入所導出文件的位置與文件名,然后單擊“確定”按鈕即可。3.2.8

外部數(shù)據(jù)文件與表記錄之間的轉(zhuǎn)換

3.3

表記錄的統(tǒng)計與計算計算機文化1.1.15.1.2綜合計算3.3.13.3.23.3.33.3.43.3.5統(tǒng)計記錄數(shù)求和求平均值分類匯總3.3.4分類匯總【格式】TOTALTO<匯總文件名>ON<關(guān)鍵字段>[FIELDS<字段名>][<范圍>][FOR<邏輯表達式>][WHILE<邏輯表達式>]【功能】按關(guān)鍵字段對當前表文件的數(shù)值型字段進行分類匯總,形成一個新的文件【說明】當前表必須在關(guān)鍵字上排序或索引將當前表文件中關(guān)鍵字段值相同的記錄分成一類,每一類產(chǎn)生一個記錄,各記錄中的匯總字段值為匯總后的和,而非匯總字段值為每一類的第一條記錄的值。統(tǒng)計各科室預付押金總額USE患者信息.dbfEXCLUSIVE按住院科室排序(語句還沒學到)totaltoa1on住院科室usea1clealistfiel

住院科室,預付押金3.3.4分類匯總【例4.23】統(tǒng)計表“住院費用.dbf”中各個患者費用小結(jié)的總和,將統(tǒng)計結(jié)果保存在患者“費用小結(jié).dbf”文件中。USE住院費用按住院號排序TOTALTO患者費用小結(jié)ON住院號USE患者費用小結(jié)LIST住院號,費用小結(jié)3.3.4分類匯總??自學3.3.1統(tǒng)計記錄數(shù)【格式】COUNT[TO<內(nèi)存變量>]

[<范圍>][FOR<條件>][WHILE<條件>]【功能】統(tǒng)計表中指定范圍內(nèi)滿足條件的記錄個數(shù)【說明】若使用<范圍>子句,統(tǒng)計出指定<范圍>內(nèi)滿足<條件>的記錄個數(shù),默認的范圍是ALL。 若使用TO<內(nèi)存變量>,可將統(tǒng)計的結(jié)果保存

到指定內(nèi)存變量中。若SETDELETEOFF(默認狀態(tài)),則加刪除標記的記錄將被計算;否則SETDELETEON不計算。3.3.2求和【格式】SUM[<表達式表>][TO<內(nèi)存變量名表>]

[<范圍>][FOR<條件>][WHILE<條件>]【功能】將指定范圍內(nèi)滿足條件的記錄按指定的各個表達式分別求和?!菊f明】在SETTALKON(默認)狀態(tài)下,屏幕顯示統(tǒng)計結(jié)果;在SETTALKOFF狀態(tài)下不顯示。<表達式表>由數(shù)值型字段組成,若省略,則對當前表的所有數(shù)值型字段求和。TO<內(nèi)存變量表>:將求和結(jié)果按順序存入內(nèi)存變量【例4.22】統(tǒng)計表“患者信息.dbf”中所有患者的住院費用的總和。USE患者信息SUM住院費用TOfyzh3.3.3求平均值【格式】AVERAGE[<表達式>][TO<內(nèi)存變量名>]

[<范圍>][FOR<條件>][WHILE<條件>]【功能】將指定范圍內(nèi)滿足條件的記錄按指定的各個表達式分別求平均值?!菊f明】選項用法同SUMaver住院費用TOfypj3.3.5綜合計算【格式】CALCULATE<表達式表>[TO<變量名表>][<范圍>][FOR<邏輯表達式>][WHILE<邏輯表達式>]【功能】對當前表中指定范圍內(nèi)滿足條件的記錄進行指定的綜合計算工作【說明】表達式表可以是

函數(shù)含義AVG(數(shù)值表達式)求平均值CNT()求記錄個數(shù)MAX(表達式)求最大值MIN(表達式)求最小值SUM(數(shù)值表達式)求和【例4.24】計算表“患者信息.dbf”中,患者人數(shù)、住院費用的最大值、最小值和平均值、住院費用的總和。USE患者信息CALCULATECNT(),MAX(住院費用),MIN(住院費用),AVG(住院費用),SUM(住院費用);TOrs,fyzd,fyzx,fypj,fyzhSettalkon/off3.4表的排序排序是從物理上對表重新整理,按照指定的關(guān)鍵字段來重新排列表中數(shù)據(jù)的順序,并產(chǎn)生一個新的文件【格式】SORTTO<新文件名>ON<字段名1>[/A|/D]

[<字段名2>[/A|/D]][FIELDS<字段名表>][<范圍>][FOR<條件表達式>][WHILE<表達式>]【功能】對當前的表排序,并將結(jié)果輸出到新表中【說明】ON<字段名1>:用作排序的關(guān)鍵字段

/A按升序排序,/D按降序排序,默認是升序;可實現(xiàn)多重排序,首先按<字段名1>排序,如果有可選項<字段名2>,則在<字段名1>之值相同的情況下,再按<字段名2>的大小進行排序。3.4表的排序【例4_1】將表文件“患者信息.dbf”中自費患者記錄按住院費用降序、住院科室升序排列,生成新表文件“住院費用.dbf”,包含住院號、姓名、住院費用、住院科室和費用類別字段。USE患者信息SORTTO費用科室ON住院費用/D,住院科室/AFIELDS住院號,姓名,住院費用,住院科室,費用類別FOR費用類別="自費"USE住院費用LIST3.5

表的索引計算機文化1.1.15.1.2重新指定主控索引3.5.13.5.23.5.33.5.43.5.5建立索引文件打開索引文件關(guān)閉索引文件更新索引文件3.5

表的索引索引是從邏輯上對表進行重新整理,索引是以索引文件的形式存在的,它是根據(jù)指定的索引關(guān)鍵字表達式建立起來的??梢詫⑺饕募闯伤饕P(guān)鍵字的值與記錄號之間的對照表。索引文件必須與原數(shù)據(jù)表文件一起使用。打開索引文件時會改變表中記錄的邏輯順序,但是并不會改變表中記錄的物理順序。索引文件有二種:單索引文件(.IDX)和復合索引文件(.CDX)。一個數(shù)據(jù)表文件可以建立多個索引文件,也可以同時打開多個索引文件,但在同一時間內(nèi)只有一個索引起作用,這個索引被稱為主控索引。記錄號學號準考證號姓名班級1011110990006李建國計01212011103990008李寧電01343011202990001趙娜英01124021204990005孫亮電01345011111990007趙林計0121原數(shù)據(jù)表:學號索引姓名索引班級索引索引文件單索引文件(.IDX)復合索引文件(.CDX)獨立復合索引文件(自學)結(jié)構(gòu)復合索引文件3.5

表的索引3.5.1建立索引文件1.單索引文件的建立【格式】INDEXON<關(guān)鍵字段表達式>TO<單索引文件名>

[FOR<邏輯表達式>][ADDITIVE]

【功能】對當前表按指定的關(guān)鍵字建立單索引文件【說明】<關(guān)鍵字段表達式>可以是字段名,也可以是含有當前表中字段組成的合法表達式。若在表達式中包含有幾種類型的字段,常常需要使用類型轉(zhuǎn)換函數(shù)將其轉(zhuǎn)換為相同類型的數(shù)據(jù)單索引文件:指定要建立的單索引文件名。單索引文件擴展名是.IDX

1.單索引文件的建立【例4-3】為“患者信息”按照入院日期的升序建立單索引文件。3.5.1建立索引文件USE患者信息INDEXON入院日期TO入院日期單索引LIST住院號,姓名,吸煙否,入院日期,住院科室,實收押金建立索引文件舉例cleaINDEXON姓名TOXMSYLISTfiel

住院號,姓名,性別,出生日期waitcleaINDEXON性別+dtoc(出生日期,1)toxcLISTfiel

住院號,姓名,性別,出生日期

1.單索引文件的建立FOR<邏輯表達式>表示對滿足條件的記錄建立索引ADDITIVE:表示保留打開的索引文件。否則,除結(jié)構(gòu)復合索引文件外,以前打開的其他索引文件被關(guān)閉3.5.1建立索引文件2.復合索引文件的建立復合索引中包含多個索引,每個索引均有一個標識名(TAG),標識名由字母或下劃線開頭由字母、數(shù)字或下劃線組成,長度不超過10個字符復合索引文件又可分為結(jié)構(gòu)復合索引文件和獨立復合索引文件兩種。結(jié)構(gòu)復合索引文件與表文件同名,打開表時自動打開結(jié)構(gòu)復合索引文件;(自學)獨立復合索引文件的文件名由用戶指定,在打開表文件時獨立復合索引文件不會自動打開而需要使用命令進行打開操作。3.5.1建立索引文件菜單建立方式2.建立復合索引命令方式

【格式】INDEXON<關(guān)鍵字表達式>TAG<標識名>[FOR<邏輯表達式>][ASCENDING|DESCENDING][ADDITIVE] 【功能】對當前表按指定的關(guān)鍵字建立復合索引文件【說明】TAG<索引標識名>用于指定復合索引文件中的索引標識;當缺省OF時建立一個與表同名的結(jié)構(gòu)復合索引文件;加OF<獨立復合索引文件名>將建立一個指定名稱的獨立復合索引文件;使用ASCENDING按升序索引;使用DESCENDING按降序索引。缺省時,按升序建立索引。3.5.1建立索引文件INDEXON<關(guān)鍵字段表達式>TO<單索引文件名>[FOR<邏輯表達式>][ADDITIVE]2.建立復合索引【例4-7】在“患者信息.dbf”表的結(jié)構(gòu)復合索引文件中按照吸煙否的降序追加索引標識。3.5.1建立索引文件3.菜單方式建立、修改結(jié)構(gòu)復合索引打開表文件選擇[顯示]-[表設(shè)計器]選擇“索引”選項卡用表設(shè)計器建立的索引都是結(jié)構(gòu)復合索引USE患者信息INDEXON吸煙否TAG吸煙降序DESCENDINGLIST住院號,吸煙否,住院科室,既往病史,家族病史,診斷【格式1】USE<文件名>[INDEX<索引文件名表|?>][ORDER<數(shù)值表達式2>|<單索引文件>|[TAG]<標識名>][ASCENDING|DESCENDING]

【功能】打開指定的表文件及相關(guān)的索引文件【說明】雖然可以同時打開多個索引文件,但同一時間只能有一個單索引文件或是復合索引文件中的一個索引標識作為主控索引,記錄的操作和顯示由主控索引來控制。如果<索引文件名表>中排在第一位的是單索引文件,則該單索引就是主控索引;如果排在第一位的是復合索引文件,所有索引項均不起作用,表文件的記錄將以物理順序被訪問?!咀⒁狻?/p>

1、在建立索引的同時,即打開了該索引,并指定其為主控索引

2、在打開表的同時就打開了結(jié)構(gòu)復合索引文件3.5.2打開索引文件ORDER子句:指定主索引<數(shù)值表達式2>:指定主索引的編號,若為0,表示不設(shè)主索引(如果打開多個索引文件,則系統(tǒng)自動為各打開的索引項統(tǒng)一編號,編號規(guī)則:先單索引,再結(jié)構(gòu)復合索引,最后是獨立復合索引)<單索引文件>:指定的單索引文件為主索引(如:usestudentindexfstud,性別order性別)[TAG]<標識名>[OF<復合索引文件名>]:表示將<復合索引文件名>中指定標識作為主索引,缺省[OF<復合索引文件名>]表示結(jié)構(gòu)復合索引

3.5.2打開索引文件USE患者信息INDEX入院日期單索引,科室煙否單索引LIST住院號,姓名,入院日期,吸煙否,住院科室,診斷【例4-10】打開表文件“患者信息.dbf”,同時打開其單索引文件“入院日期單索引”和“科室煙否單索引”。(分析主控索引)3.5.2打開索引文件【例4-9】打開表文件“患者信息.dbf”,同時打開其單索引文件“入院日期單索引”,指定結(jié)構(gòu)復合索引文件中的“吸煙否降序”標識為主控索引,并強制其按升序索引。(觀察ORDER語句的使用)

USE患者信息INDEX入院日期單索引ORDERTAG吸煙降序ASCENDINGLIST住院號,姓名,吸煙否,入院日期,住院科室,診斷3.5.2打開索引文件【格式2】SETINDEXTO<索引文件名表>[ADDITIVE][ORDER<數(shù)值表達式2>|<單索引文件>|[TAG]<標識名>][ASCENDING|DESCENDING]

【功能】在已打開表文件的前提下,打開相關(guān)索引文件;存在同名的索引文件必須帶擴展名【說明】ADDITIVE:表示保留以前打開的索引文件。缺省時,打開本索引同時關(guān)閉所有已打開的索引文件(結(jié)構(gòu)復合索引文件外)。3.5.2打開索引文件復合索引打開索引文件舉例indexon姓名tagxmindexon住院號tagzyhofdlfhsyindexon出生日期tagcsrqofdlfhsyUSE患者信息INDEXdlfhsyLISTfiel

住院號,姓名,住院科室,出生日期,診斷

&&物理順序顯示記錄USE患者信息&&復合索引文件同時被打開SETINDEXTOdlfhsy

&&打開獨立復合索引文件USE患者信息INDEXdlfhsyORDERxm

DESCENDINGLISTfiel

住院號,姓名,住院科室,出生日期,診斷

&&按姓名降序的順序顯示記錄3.5.3關(guān)閉索引文件【格式1】USE【功能】關(guān)閉打開的表文件及所有索引文件【格式2】SETINDEXTO

【格式3】CLOSE

INDEX【功能】關(guān)閉當前工作區(qū)中打開的所有單索引文件和獨立復合索引文件

注意:當表未關(guān)閉時,結(jié)構(gòu)復合索引文件無法關(guān)閉如果對數(shù)據(jù)表記錄進行了增刪或記錄數(shù)據(jù)發(fā)生了變化,應及時對已有的索引文件中的索引項重新進行索引進行更新。命令方式【格式】REINDEX【功能】重新進行索引,更新當前打開的索引文件3.5.4索引文件的更新【格式】SETORDERTO[<數(shù)值>|<單索引文件名>|[TAG]

<標識名>]

【功能】重新指定打開的索引文件中的主控索引【說明】數(shù)值表達式指定該數(shù)值號的索引為主控索引;其值為0取消主控索引,表文件的記

錄將以物理順序被訪問(索引文件仍處于打開狀態(tài));

單索引文件名指定該名字的單索引為主控索引

TAG<標識名>指定復合索引文件中的該索引標識的索引項為主控索引。加OF<獨立復合索引文件名>

指定獨立復合索引文件3.5.5重新指定主控索引指定主控索引例題:USE患者信息INDEXzyhSY,csrqSY,XMSY&&打開患者信息表,同時打開住院號索引,出生日期索引和姓名索引,此時住院號索引為主控索引。

LIST&&按住院號升序顯示記錄SETORDERTOXMSY

&&重新指定姓名索引為主控索引。LISTSETORDERTO0&&LIST&&按物理順序顯示記錄3.6

表的查詢計算機文化1.1.15.1.23.6.13.6.2順序查詢索引查詢3.6.1順序查詢按照記錄的物理順序逐個比較,逐個查詢命令方式【格式】LOCATE[<范圍>][FOR<條件>]【功能】在指定范圍中按指定條件,物理順序進行查找,記錄指針定位到第一條符合條件的記錄。【說明】(1)若找到符合條件的記錄,則測試函數(shù)?FOUND()為真;如果沒有找到,則測試函數(shù)

?FOUND()為假,并且指針定位到表底,即

?EOF()為真。一般用DISP顯示當前找到的記錄。(2)若繼續(xù)查找符合該條件的其余記錄,可使用CONTINUE命令。

【例4-13】在“患者信息”表中查詢并顯示B型血的患者的信息。USE患者信息LOCATEFOR血型=‘B’?found()DisplayContinue?found()Display()判斷是否找到符合條件記錄判斷是否找到符合條件記錄查找下一條符合條件記錄例:順序查詢命令舉例UsestudentLocateforleft(學號,2)=“05”?found().t.DispContinue?found().t.DispContinue?found().f.?eof().t.3.6.1順序查詢3.6.2索引查詢打開索引文件后,可以使用FIND和SEEK命令快速查詢1.FIND命令【格式】FIND<字符串>/<數(shù)值常量>【功能】在表文件的主控索引中查找關(guān)鍵字值與

<字符串>或<數(shù)值常量>相匹配的第一條記錄【說明】(1)如果找到,則把記錄指針指向該記錄,并且將FOUND()函數(shù)的值置為“真”;如果沒有找到與其相符的記錄,將FOUND()函數(shù)的值置為“假”,EOF()函數(shù)的值置為“真”。(2)如果有多個與關(guān)鍵字匹配的記錄,則記錄指針定位于其中的第一條記錄上,若瀏覽后續(xù)記錄,可用SKIP(3)若字符常量無首尾空格,可省略定界符;字符串可用字符變量代替,但需用&轉(zhuǎn)換,3.6.2索引查詢打開索引文件后,可以使用FIND和SEEK命令快速查詢1.FIND命令【說明】(4)執(zhí)行SETEXACTOFF命令后,用FIND命令查找字符串時,字符串可以是索引表達式值的全部或是從首字符開始的一個子串。執(zhí)行SETEXACTON命令后,用FIND命令來查找字符串,則精確匹配【例3.43】查找并顯示表“患者信息.dbf”姓劉的患者的記錄的信息。打開索引文件后,可以使用FIND和SEEK命令快速查詢2.SEEK命令(表達式查詢命令)【格式】SEEK<表達式>【功能】在表文件的主控索引中查找關(guān)鍵字值與<表達式>值相匹配的第一條記錄【說明】SEEK命令可查找字符型、數(shù)值型、日期型、

邏輯型表達式值

SEEK命令中表達式必須有定界符,以確定表達式類型。3.6.2索引查詢【例4-20】查找表“患者信息.dbf”中吸煙的患者的信息。(查詢邏輯型數(shù)據(jù))2.表達式查詢命令(SEEK命令)3.6.2索引查詢USE患者信息ORDER吸煙降序SEEK.T.?FOUND()&&系統(tǒng)主窗口顯示結(jié)果為.T.DISPLAY住院號,姓名,吸煙否,入院日期,出院日期,住院科室SEEK命令練習舉例USE患者信息INDEXXMSY,SRSY,CJSYSEEK“李強”DISPSetordertoSRSYSEEK{^1982/12/10}DISPSKIPDISP思考:SEEK“李強”一句如果用FIND或LOCATE命令該如何寫。3.6.2索引查詢查詢命令比較4.3.1目4.3.2目返回本節(jié)命令適用類型C型比較是否用定界符必須有主控索引使指針指向下一條查找條件locateN、C、L、D、T是否continue可以是某個區(qū)間的值seek是skip唯一的值findN、C否相同點:命令執(zhí)行后,記錄指針指向滿足條件的第一條記錄。如果沒有則指針指向文件尾。不同點:3.7

多表操作計算機文化1.1.15.1.2關(guān)閉多個工作區(qū)文件3.7.13.7.23.7.33.7.43.7.5工作區(qū)與多個表表間的邏輯連接表間的物理連接表間的數(shù)據(jù)更新工作區(qū)和當前工作區(qū)VFP系統(tǒng)最多能同時使用32767個工作區(qū),每個工作區(qū)只能打開一個表文件。任何時候只能對一個工作區(qū)進行操作,這個工作區(qū)稱為當前工作區(qū)(或主工作區(qū))。當前工作區(qū)上打開的表文件為當前表文件。32767個工作區(qū)的區(qū)號分別為1-32767,系統(tǒng)啟動后,默認1號工作區(qū)為當前工作區(qū)。對于1-10號工作區(qū),系統(tǒng)別名為A-J。11-32767號工作區(qū),系統(tǒng)別名為W11-W32767。3.7.1工作區(qū)與多個表2.選擇當前工作區(qū)(1)表別名是代表打開的數(shù)據(jù)表文件的一個簡短名稱當用USE命令打開表文件時,系統(tǒng)默認表的文件名就是表的別名。(2)用戶可自定義表的別名【格式】USE<表文件名>

[ALIAS<別名>]

<別名>是用英文字母或下劃線開頭,由字母、數(shù)字、下劃線組成,長度最多為10個字節(jié)【例如】USE患者信息ALIASHZ

3.7.1工作區(qū)與多個表(3)工作區(qū)的選擇【格式】SELECT<工作區(qū)號>/<工作區(qū)別名><工作區(qū)別名>可以是系統(tǒng)的別名,也可以是表的別名。如果指定“0”,則表示選用當前未使用過的編號最小的工作區(qū)作為當前工作區(qū)。

【例題】SELECTBUSE患者信息ALIAS

HZ

SELECTAUSE床位分配

BROWSE要回到B工作區(qū),以下四條命令是等價的SELECTB|SELECT2

SELECTHZ|

SELECT患者信息3.7.1工作區(qū)與多個表3.非當前工作區(qū)字段的引用【格式】<工作區(qū)別名>-><字段名>或<工作區(qū)別名>.<字段名>【說明】通過工作區(qū)別名指定訪問的工作區(qū),所得到的字段值為指定工作區(qū)打開的表當前記錄的字段值【例4.27】在1號工作區(qū)和2號工作區(qū)內(nèi)分別打開表“患者信息.dbf”和“床位分配.dbf”,在1號工作區(qū)內(nèi)查看當前記錄的姓名、性別、出生日期、醫(yī)生姓名、護士姓名和床位號等字段內(nèi)容。3.7.1工作區(qū)與多個表SELECTAUSE患者信息SELECTBUSE床位分配SELECTADISPLAY姓名,性別,出生日期,B.醫(yī)生姓名,B.護士姓名,B->床位&&顯示A區(qū)當前記錄的姓名、性別、出生日期字段值和B區(qū)當前記錄的醫(yī)生姓名、護士姓名、床位字段值學號姓名班級課程號成績011110李建國計0121C60185011110李建國計0121C60387011202趙娜英0112C60188011202趙娜英0112C60488011202趙娜英0112C60583課程號課程名學時數(shù)C601高等數(shù)學150C602數(shù)據(jù)結(jié)構(gòu)100C603操作系統(tǒng)80C604英語聽力60C605大學物理60課程信息表:kc.dbf學生成績表:cj.dbf2023/1/11每一個工作區(qū)都有一個自己的記錄指針3.7.2表間的邏輯連接1.關(guān)聯(lián)的概述表間的邏輯連接又稱做關(guān)聯(lián)。所謂關(guān)聯(lián)是把工作區(qū)中打開的表與另一個工作區(qū)中打開的表根據(jù)關(guān)鍵字段進行邏輯連接,而不生成新表。兩個表建立關(guān)聯(lián)后,當前工作區(qū)中的表記錄指針移動時,被關(guān)聯(lián)工作區(qū)的表記錄指針也將自動相應移動,以實現(xiàn)對多表的同時操作。在多個表中,必須有一個表為關(guān)聯(lián)表,此表常稱為父表或主表,而其他的表則稱為被關(guān)聯(lián)表,常稱為子表。在兩個表之間建立關(guān)聯(lián),必須以某一個字段為標準,該字段稱為關(guān)鍵字段。表文件的關(guān)聯(lián)可分為一對一關(guān)聯(lián)、一對多關(guān)聯(lián)和多對多關(guān)聯(lián)。2.創(chuàng)建表間關(guān)聯(lián)(1)一(多)對一關(guān)聯(lián)的建立①命令方式【命令】SETRELATIONTO<關(guān)鍵字段>|<數(shù)值表達式>

INTO<工作區(qū)號>/<別名>[ADDITIVE]【功能】將當前工作區(qū)表與另一工作區(qū)表按關(guān)鍵字段或者記錄號建立邏輯關(guān)聯(lián)。這時,當主表記錄指針移動時,被關(guān)聯(lián)數(shù)據(jù)表的記錄指針也將同步移動。

【說明】1、使用<關(guān)鍵字段>時,其中的關(guān)鍵字必須是主表和別名表都存在的,且別名表必須打開以此關(guān)鍵字建立的索引文件;使用<數(shù)值表達式>時,則別名表不必索引,此時主表記錄指針移動時,被關(guān)聯(lián)數(shù)據(jù)表的記錄指針自動定位到其記錄號與數(shù)值表達式值相匹配的記錄上。

2、使用ADDITIVE時,當前表與其他表已經(jīng)建立的關(guān)聯(lián)仍有效;否則在建立本次關(guān)聯(lián)時,將自動撤消當前表與其他數(shù)據(jù)表已建立的關(guān)聯(lián)。3.7.2表間的邏輯連接3、當父表文件的記錄指針移動時,子表文件的記錄指針就定位于<關(guān)聯(lián)表達式>值與<索引表達式>值相等的第一條記錄上。如果子表中找不到匹配的記錄,則子表的記錄指針指向文件尾,這時EOF()返回值為.T.?!纠?.28】將“患者信息.dbf”表和“床位分配.dbf”表以住院號為關(guān)鍵字段建立一對一的關(guān)聯(lián)。SELECT2USE床位分配INDEXON住院號TOzyh&&索引表達式為住院號SELECT1USE患者信息SETRELATIONTO住院號INTOB&&關(guān)聯(lián)表達式為住院號LIST住院號,姓名,B.醫(yī)生姓名,B.護士姓名,B.床位3.7.2表間的邏輯連接學號姓名班級課程號成績011110李建國計0121C60185011202趙娜英0112C60188011110李建國計0121C60287011202李建國英0112C60388011202趙娜英0112C60383課程號課程名學時數(shù)C601高等數(shù)學150C602數(shù)據(jù)結(jié)構(gòu)100C603英語聽力80C604操作系統(tǒng)60C605大學物理60課程表:kc.dbf學生成績表:cj.dbf2023/1/11SELECT1USECJALIAS成績表INDEXON課程號TAG課程

SELECT2USEKCSETRELATIONTO課程號INTO1LISTA.學號,CJ.姓名,課程名,成績表->成績(3)一對多關(guān)聯(lián)的建立①命令方式【格式】SETSKIPTO[<別名1>[,<別名2>]…]【功能】將當前表文件與其他工作區(qū)中的表文件建立一對多關(guān)聯(lián)。【說明】1、SETSKIPTO命令要在使用SETRELATIONTO

命令建立了一對一的關(guān)聯(lián)之后才能使用,2、當父表中的一個記錄與子表的多個記錄相匹配時,在使用SKIP命令,父表的指針不移動,而子表的指針卻向下移動,指向下一條與父表相匹配的記錄;重復使用SKIP命令,直至在子表中沒有與父表當前記錄相匹配的記錄后,父表的指針才向下移動。3、無任何選擇項的SETSKIPTO

命令將取消一對多的關(guān)聯(lián)(一對一的關(guān)聯(lián)仍然存在)。②菜單方式利用前面介紹的使用菜單建立一對一關(guān)聯(lián)的步驟,只要每次選擇的子表不同,就可以分別建立一個表文件同多個表文件的關(guān)聯(lián)。3.7.2表間的邏輯連接學號姓名班級課程號成績011110李建國計0121C60185011202趙娜英0112C60188011110李建國計0121C60287011202趙娜英0112C60388011202趙娜英0112C60583課程號課程名學時數(shù)C601高等數(shù)學150C602數(shù)據(jù)結(jié)構(gòu)100C603英語聽力80C604操作系統(tǒng)60C605大學物理60課程表:kc.dbf學生成績表:cj.dbfSELECT1USECJALIAS成績表INDEXON課程號TAG課程

SELECT2USEKCSETRELATIONTO課程號INTO1SETSKIPTOADISPA.學號,CJ.姓名,課程名,成績表->成績SKIPDISPA.學號,CJ.姓名,課程名,成績表->成績將“患者信息.dbf”表和“住院費用.dbf”表以住院號為關(guān)鍵字段建立一對多的關(guān)聯(lián)。SELECT2USE住院費用INDEXON住院號TOzyh&&索引表達式為住院號SELECT1USE患者信息SETRELATIONTO住院號INTOB&&關(guān)

溫馨提示

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

評論

0/150

提交評論