第3章 數(shù)據(jù)庫(kù)與數(shù)據(jù)表的基本操作_第1頁(yè)
第3章 數(shù)據(jù)庫(kù)與數(shù)據(jù)表的基本操作_第2頁(yè)
第3章 數(shù)據(jù)庫(kù)與數(shù)據(jù)表的基本操作_第3頁(yè)
第3章 數(shù)據(jù)庫(kù)與數(shù)據(jù)表的基本操作_第4頁(yè)
第3章 數(shù)據(jù)庫(kù)與數(shù)據(jù)表的基本操作_第5頁(yè)
已閱讀5頁(yè),還剩105頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第三章

數(shù)據(jù)庫(kù)和數(shù)據(jù)表的操作3.1.1VFP數(shù)據(jù)庫(kù)及數(shù)據(jù)表

數(shù)據(jù)庫(kù)管理系統(tǒng)主要是通過數(shù)據(jù)庫(kù)對(duì)數(shù)據(jù)進(jìn)行有效的組織和管理。VFP引入了大型數(shù)據(jù)庫(kù)管理系統(tǒng)的“數(shù)據(jù)庫(kù)”概念,數(shù)據(jù)采用“數(shù)據(jù)庫(kù)——表與視圖——記錄——字段”的邏輯結(jié)構(gòu)進(jìn)行存儲(chǔ),并且引入了數(shù)據(jù)字典(數(shù)據(jù)字典是在創(chuàng)建數(shù)據(jù)庫(kù)文件時(shí)系統(tǒng)自動(dòng)生成的相應(yīng)文件,是一個(gè)記錄數(shù)據(jù)庫(kù)中所有信息的表。)功能對(duì)數(shù)據(jù)庫(kù)進(jìn)行管理,增強(qiáng)了數(shù)據(jù)的可靠性、一致性和完整性。數(shù)據(jù)庫(kù)及作用按照關(guān)系數(shù)據(jù)庫(kù)理論,二維表就是關(guān)系模型中的一個(gè)關(guān)系,稱為表(Table)。數(shù)據(jù)庫(kù)則是關(guān)系的集合,即表的集合,這些表協(xié)同完成某項(xiàng)任務(wù)。數(shù)據(jù)庫(kù)中各表之間是有聯(lián)系的,稱為關(guān)系。所以利用數(shù)據(jù)庫(kù)除了可以存儲(chǔ)一系列表之外;還可以在表之間建立永久關(guān)系,并存儲(chǔ)在數(shù)據(jù)庫(kù)中;可以設(shè)置表屬性、字段屬性及有效性規(guī)則和默認(rèn)值;還可以建立和存儲(chǔ)本地視圖和外地視圖,存儲(chǔ)與遠(yuǎn)程服務(wù)器的連接。實(shí)際上,數(shù)據(jù)庫(kù)主要用于組織表,但數(shù)據(jù)并不存儲(chǔ)于數(shù)據(jù)庫(kù)文件(.DBC)中,而是存儲(chǔ)在表文件(.DBF)中。但表間的永久關(guān)系、表屬性、字段屬性、視圖定義、遠(yuǎn)程連接的定義等是真正存儲(chǔ)在數(shù)據(jù)庫(kù)文件中。數(shù)據(jù)庫(kù)及作用二表表是基本的數(shù)據(jù)組織單位,數(shù)據(jù)管理的核心是對(duì)表的管理,表是按一定結(jié)構(gòu)組織起來的。二表根據(jù)表是否屬于數(shù)據(jù)庫(kù),可將表分為數(shù)據(jù)庫(kù)表(DatabaseTable,也稱數(shù)據(jù)表)和自由表(FreeTable)。在同一時(shí)間一個(gè)表只能屬于一個(gè)數(shù)據(jù)庫(kù)。可以在數(shù)據(jù)庫(kù)中創(chuàng)造新?lián)?kù)表,也可以向數(shù)據(jù)庫(kù)中添加自由表轉(zhuǎn)為數(shù)據(jù)庫(kù)表。還可以從數(shù)據(jù)庫(kù)中移出表使之變?yōu)樽杂杀?,或者移出添加到別的數(shù)據(jù)庫(kù)中。二表我們?nèi)粘S玫降亩S表格,對(duì)應(yīng)于數(shù)據(jù)庫(kù)中的一個(gè)數(shù)據(jù)表。日常二維表格有兩大部分組成:表頭和表格內(nèi)容。在數(shù)據(jù)庫(kù)的數(shù)據(jù)表中,數(shù)據(jù)表結(jié)構(gòu)對(duì)應(yīng)于表頭,記錄對(duì)應(yīng)于表格內(nèi)容。(見RSDA.DBF數(shù)據(jù)表)表3-1人事檔案信息表

號(hào)姓

名性別工作時(shí)間職

稱簡(jiǎn)

歷照

片05002苗

莉女1963.7.1

04002林文靈男1963.9.2教授

04001姜瑞青男1984.9.3教授

01001韓偉東男1985.9.4

03001王為冬男1988.7.5副教授

02002賈貴紅女1988.9.6主治醫(yī)師

02001劉巧玲女1993.9.7

從表3-1可以看到,它是由以下幾部分組成的:①表的名字(標(biāo)題):每張表都有一個(gè)名字,是用來概括表的內(nèi)容。例如上表的名字人事檔案信息表②表中每一列的欄目標(biāo)題序列為表頭,它標(biāo)明了每一列對(duì)應(yīng)數(shù)據(jù)的屬性。例如在表3-1中的編號(hào)、姓名、出生日期、簡(jiǎn)歷……等等,即是表頭。③表中每一行的數(shù)據(jù)是表的內(nèi)容,由每行中具體的數(shù)據(jù)項(xiàng)內(nèi)容組成的,它標(biāo)明了某一事物的基本內(nèi)容。例如在表3-1中,第二行反映的便是林文靈的個(gè)人情況。數(shù)據(jù)表中一行稱為一個(gè)記錄一列稱為一個(gè)字段記錄描述實(shí)體字段描述實(shí)體的屬性字段應(yīng)是數(shù)據(jù)表中不可再分割的基本數(shù)據(jù)項(xiàng)。二維表與數(shù)據(jù)表的對(duì)應(yīng)關(guān)系一張二維表由表名、表頭、表的內(nèi)容三部分組成,一個(gè)數(shù)據(jù)表則由數(shù)據(jù)表名、數(shù)據(jù)表的結(jié)構(gòu)、數(shù)據(jù)表的記錄三要素構(gòu)成。①數(shù)據(jù)表的文件名相當(dāng)于二維表中的表名,它是數(shù)據(jù)表的主要標(biāo)識(shí),用戶可以依靠數(shù)據(jù)表名在磁盤上存取、使用指定的數(shù)據(jù)表。②數(shù)據(jù)表的結(jié)構(gòu)相當(dāng)于二維表的表頭,二維表的每一列對(duì)應(yīng)數(shù)據(jù)表中的一個(gè)字段,其屬性決定了字段名、字段類型和字段長(zhǎng)度。③數(shù)據(jù)表中的記錄是數(shù)據(jù)表中不可分割的基本項(xiàng),即二維表中的表的內(nèi)容。一個(gè)數(shù)據(jù)表的大小,主要取決于它擁有的數(shù)據(jù)記錄的多少。不包含記錄的數(shù)據(jù)表稱為空表。1.?dāng)?shù)據(jù)表名數(shù)據(jù)表及自由表都有各自的名字標(biāo)識(shí)符,以區(qū)別于其它表。每個(gè)表都是以單獨(dú)的文件存儲(chǔ)于磁盤中,數(shù)據(jù)表名就是對(duì)應(yīng)的文件名,文件名應(yīng)符合Windows的規(guī)定,擴(kuò)展名默認(rèn)為.DBF??梢允褂米帜?、漢字、數(shù)字、下劃線及它們的組合,但不能使用*、?、空格等字符。注意:由于系統(tǒng)已設(shè)定了A、B、……、J和W11、W12、……、W32767

作為數(shù)據(jù)庫(kù)工作區(qū)別名,所以用戶不要單獨(dú)用它們作文件名。2.?dāng)?shù)據(jù)表結(jié)構(gòu)在創(chuàng)造數(shù)據(jù)表時(shí),首先要定義數(shù)據(jù)表的結(jié)構(gòu),然后按數(shù)據(jù)表結(jié)構(gòu)輸入記錄數(shù)據(jù)。定義數(shù)據(jù)表結(jié)構(gòu)就是依次定義每個(gè)字段的字段名、字段類型、字段寬度、小數(shù)位數(shù)及是否允許NULL(空)值。1)字段名字段名是用來標(biāo)識(shí)字段的,又稱為字段變量。其命名規(guī)則同內(nèi)存變量。在VFP運(yùn)行期間,許多操作都是通過字段名來訪問這個(gè)字段的,所以字段名的定義最好與該字段所代表的數(shù)據(jù)屬性相符,例如用英文單詞、漢語(yǔ)拼音、漢字作為字段名,盡量遵循“見名知義”的原則。

2)字段類型和字段寬度VFP中的每一項(xiàng)數(shù)據(jù)都有固定的類型,每一個(gè)字段中的數(shù)據(jù)必須是同一種數(shù)據(jù)類型。數(shù)據(jù)類型定義了該種數(shù)據(jù)的表示方法、取值范圍、所能進(jìn)行的運(yùn)算。在VFP數(shù)據(jù)表中,字段的數(shù)據(jù)類型共有13種,應(yīng)根據(jù)具體的需要進(jìn)行設(shè)置。

2.?dāng)?shù)據(jù)表結(jié)構(gòu)數(shù)據(jù)表的結(jié)構(gòu) ③小數(shù)位數(shù)只對(duì)數(shù)值型和浮動(dòng)型數(shù)據(jù)有效。小數(shù)位的取值范圍為0~15。

④NULL值

該屬性指定記錄中字段是否允許輸入NULL(空)值。需要注意的是,NULL值與空格、空字符串或0是不同的。NULL不是一種數(shù)據(jù)類型,當(dāng)一個(gè)字段的值被置為NULL時(shí),其數(shù)據(jù)類型并不發(fā)生改變。

2.數(shù)據(jù)表的存在方式

數(shù)據(jù)表可以有兩種存在方式:?jiǎn)为?dú)的一個(gè)數(shù)據(jù)表,我們稱之為自由表(FreeTable);存在于數(shù)據(jù)庫(kù)中的表,我們稱之為數(shù)據(jù)庫(kù)表(DatabaseTable)。自由表是擴(kuò)展名為.DBF的文件,它獨(dú)立存在,不與任何數(shù)據(jù)庫(kù)相關(guān)聯(lián);而數(shù)據(jù)庫(kù)表的擴(kuò)展名雖然也是.DBF,但是,它與某一個(gè)數(shù)據(jù)庫(kù)相關(guān)聯(lián)(也只能和惟一數(shù)據(jù)庫(kù)相關(guān)聯(lián)),隸屬于某一數(shù)據(jù)庫(kù)。

2.數(shù)據(jù)表的存在方式

數(shù)據(jù)庫(kù)中的表可以有一些自由表所沒有的特性。這兩種類型的數(shù)據(jù)表建立方式基本相同,只是數(shù)據(jù)庫(kù)表需設(shè)定較多的屬性,可以設(shè)置表和字段的各種規(guī)則。自由表可以很容易地添加到數(shù)據(jù)庫(kù)中,使之轉(zhuǎn)化成數(shù)據(jù)庫(kù)表;反之,將一個(gè)數(shù)據(jù)庫(kù)表從數(shù)據(jù)庫(kù)中移走,則可將其轉(zhuǎn)化為一個(gè)自由表,這時(shí),表原有的一些特性或規(guī)則將會(huì)丟失。

3.1.2建立數(shù)據(jù)庫(kù)和數(shù)據(jù)表的準(zhǔn)備工作

1.確定數(shù)據(jù)庫(kù)的組織結(jié)構(gòu)

在建立數(shù)據(jù)庫(kù)和數(shù)據(jù)表時(shí),應(yīng)首先確定應(yīng)用系統(tǒng)中的數(shù)據(jù)有哪些,這些數(shù)據(jù)應(yīng)存放在幾個(gè)數(shù)據(jù)表中,每個(gè)數(shù)據(jù)表中應(yīng)包含哪些數(shù)據(jù)、數(shù)據(jù)表文件如何命名等。例如,對(duì)于一個(gè)人事管理系統(tǒng),可能包含有人員編號(hào)、工作部門、姓名、性別、籍貫、出生日期、婚姻狀況、工資狀況、學(xué)歷、職稱、職務(wù)、簡(jiǎn)歷等許多數(shù)據(jù),為便于管理和避免數(shù)據(jù)的冗余,可以將這些數(shù)據(jù)組織到不同的數(shù)據(jù)表中,如檔案信息數(shù)據(jù)表、工資信息表、管理信息數(shù)據(jù)表等。

3.1.2建立數(shù)據(jù)庫(kù)和數(shù)據(jù)表的準(zhǔn)備工作

2.數(shù)據(jù)規(guī)范化

日常生活中的表格大都是不規(guī)則表格,需要首先將其改造為規(guī)則的二維表格,按照關(guān)系理論中關(guān)系的規(guī)范化原則,設(shè)計(jì)數(shù)據(jù)庫(kù)的總體結(jié)構(gòu)和各個(gè)數(shù)據(jù)表的結(jié)構(gòu)。

4.1.2建立數(shù)據(jù)庫(kù)和數(shù)據(jù)表的準(zhǔn)備工作

3.確立數(shù)據(jù)表的結(jié)構(gòu)

在設(shè)置數(shù)據(jù)表的字段類型和寬度時(shí),一般應(yīng)遵循以下原則:(1)文字性質(zhì)內(nèi)容的字段(如姓名、職稱、職務(wù)、家庭住址等)以及不參加運(yùn)算的數(shù)字性質(zhì)內(nèi)容的字段(如職工編號(hào)、身份證號(hào)、電話號(hào)碼、商品代碼等),其類型應(yīng)定義為字符(C)型。

4.1.2建立數(shù)據(jù)庫(kù)和數(shù)據(jù)表的準(zhǔn)備工作(2)參與運(yùn)算的數(shù)字性質(zhì)內(nèi)容的字段(如工資、成績(jī)、金額、單價(jià)等),其類型應(yīng)定義為數(shù)值(N)型,并應(yīng)根據(jù)實(shí)際需要保留相應(yīng)的小數(shù)位。不要忘記負(fù)號(hào)和小數(shù)點(diǎn)都各占一位。(3)日期性質(zhì)內(nèi)容的字段(如出生日期、制表日期等),其類型應(yīng)定義為日期(D)型。(4)內(nèi)容只能在兩者中取一的字段(如婚否、性別等),其類型應(yīng)定義為邏輯(L)型。

3.1.2建立數(shù)據(jù)庫(kù)和數(shù)據(jù)表的準(zhǔn)備工作(5)字符個(gè)數(shù)較多的字段(如簡(jiǎn)歷、簡(jiǎn)介等),其類型應(yīng)定義為備注(M)型。

(6)內(nèi)容為OLE對(duì)象的字段(如照片、音樂等),其類型應(yīng)定義為通用(G)型。

對(duì)非固定長(zhǎng)度的字段,在定義其字段寬度時(shí),既要注意目前的實(shí)際情況,也要考慮到將來的發(fā)展(如職工編號(hào)、學(xué)生證號(hào)等),要留有一定的余地。

3.1.2建立數(shù)據(jù)庫(kù)和數(shù)據(jù)表的準(zhǔn)備工作根據(jù)上述原則,人事檔案信息表中各字段定義字段名類型寬度小數(shù)位字段名類型寬度小數(shù)位編號(hào)字符型(C)5

職稱字符型(C)8

姓名字符型(C)8

簡(jiǎn)歷備注型(M)4

性別字符型(C)2

照片通用型(G)4

工作時(shí)間日期型(D)8

3.2數(shù)據(jù)表結(jié)構(gòu)的建立、修改和顯示

3.2.1建立數(shù)據(jù)庫(kù)

1.建立數(shù)據(jù)庫(kù)

(1)在項(xiàng)目管理器中建立數(shù)據(jù)庫(kù)文件

(建立一個(gè)名為rsgl.dbc的數(shù)據(jù)庫(kù)文件

)(2)利用菜單建立數(shù)據(jù)庫(kù)文件

(3)利用命令建立數(shù)據(jù)庫(kù)文件

CREATEDATABASE[<數(shù)據(jù)庫(kù)名>|?]3.2.1建立數(shù)據(jù)庫(kù)2.打開數(shù)據(jù)庫(kù)

(1)在項(xiàng)目管理器中打開數(shù)據(jù)庫(kù)文件

(2)利用菜單打開數(shù)據(jù)庫(kù)文件

(3)利用命令打開數(shù)據(jù)庫(kù)3.關(guān)閉數(shù)據(jù)庫(kù)【格式】CLOSEDATABASE|ALL

3.2.2建立數(shù)據(jù)表結(jié)構(gòu)

所謂建立數(shù)據(jù)表的結(jié)構(gòu),就是把數(shù)據(jù)表的字段名、字段類型、字段長(zhǎng)度和小數(shù)位個(gè)數(shù)等數(shù)據(jù)輸入到VFP系統(tǒng)中并保存到數(shù)據(jù)表文件中。

1.利用表設(shè)計(jì)器創(chuàng)建數(shù)據(jù)表結(jié)構(gòu)

(1)在項(xiàng)目管理器中打開表設(shè)計(jì)器

(2)利用菜單打開表設(shè)計(jì)器

(3)利用命令打開表設(shè)計(jì)器

3.2.2建立數(shù)據(jù)表結(jié)構(gòu)2.利用表向?qū)Ы?shù)據(jù)表結(jié)構(gòu)①在數(shù)據(jù)庫(kù)設(shè)計(jì)器中打開數(shù)據(jù)庫(kù)rsgl.dbc,然后選擇“文件”菜單中的“新建”命令,出現(xiàn)“表向?qū)Р襟E1-字段選取”對(duì)話框。把rsda表添加到樣表當(dāng)中;選擇rsda數(shù)據(jù)表;并選擇樣表中的字段②“表向?qū)Р襟E1a—選擇數(shù)據(jù)庫(kù)”對(duì)話框,③“修改字段設(shè)置”對(duì)話框,④“步驟3-為表建立索引”對(duì)話框,忽略后將出現(xiàn)“步驟3a-建立關(guān)系”對(duì)話框,也忽略出現(xiàn)“步驟4—完成”對(duì)話框,選擇“保存表,然后在表設(shè)計(jì)器中修改”

3.2.2建立數(shù)據(jù)表結(jié)構(gòu)3.設(shè)置數(shù)據(jù)庫(kù)表的字段屬性和表屬性(1)設(shè)置數(shù)據(jù)庫(kù)的字段屬性①顯示區(qū)域“格式”屬性“輸入掩碼”屬性“標(biāo)題”屬性②匹配字段類型到類③字段有效性“規(guī)則”信息默認(rèn)值④字段注釋3.2.2建立數(shù)據(jù)表結(jié)構(gòu)(2)設(shè)置數(shù)據(jù)表的屬性①記錄有效性規(guī)則:指定記錄中各字段取值必須滿足的條件,也是通過[表達(dá)式生成器]對(duì)話框,將有效性規(guī)則用邏輯型表達(dá)式表示出來。信息:指定當(dāng)記錄有效性驗(yàn)證不符合規(guī)則時(shí),則彈出警告框,所顯示的提示信息。②觸發(fā)器觸發(fā)器也是一種檢查表中記錄數(shù)據(jù)有效性的機(jī)制。當(dāng)對(duì)表中的記錄進(jìn)行插入、更新或刪除操作時(shí),將分別激活插入觸發(fā)器、更新觸發(fā)器、刪除觸發(fā)器,根據(jù)定義的驗(yàn)證條件進(jìn)行檢查。定義觸發(fā)器的驗(yàn)證條件,也是用邏輯型表達(dá)式來表示。

③表注釋3.2.3數(shù)據(jù)表結(jié)構(gòu)的修改修改表結(jié)構(gòu)主要包括:修改字段名、字段類型、字段寬度、小數(shù)位數(shù)、插入(添加)一個(gè)字段、刪除一個(gè)字段、調(diào)換字段的順序等內(nèi)容。

1.打開表設(shè)計(jì)器(1)在項(xiàng)目管理器中選擇要修改結(jié)構(gòu)的表,然后單擊“修改”按鈕。(2)數(shù)據(jù)庫(kù)設(shè)計(jì)器中選擇要修改結(jié)構(gòu)的表,右單擊其表名,然后從彈出的快捷菜單中選擇“修改”命令。(3)使用MODIFYSTRUCTURE命令。3.2.3數(shù)據(jù)表結(jié)構(gòu)的修改2.修改數(shù)據(jù)表結(jié)構(gòu)(1)若要修改字段名、類型、寬度和小數(shù)位等(2)若要調(diào)換字段的位置(3)若要插入字段,(4)若要?jiǎng)h除某字段,(5)若要在尾部添加字段,3.2.4數(shù)據(jù)表結(jié)構(gòu)的顯示1.在表設(shè)計(jì)器中顯示數(shù)據(jù)表結(jié)構(gòu)2.命令方式顯示數(shù)據(jù)表結(jié)構(gòu)【格式】LIST|DISPLAYSTRUCTURE[IN<工作區(qū)號(hào)>|<表別名>][TOPRINTER[PROMPT]|TOFILES<文件名>]說明:LIST和DISPLAY可以選擇任意一個(gè),所不同的是:若字段很多,一頁(yè)顯示不下,LIST連續(xù)顯示信息直到顯示完為止;DISPLAY采用分頁(yè)顯示信息,即顯示一屏信息后暫停,按任意鍵或單擊鼠標(biāo)就可以繼續(xù)顯示后面的內(nèi)容。

3.2.4數(shù)據(jù)表結(jié)構(gòu)的顯示例如,可在命令窗口輸入以下命令來顯示數(shù)據(jù)表rsda.dbf的結(jié)構(gòu):

USErsdaLISTSTRU從顯示的信息中可以看出,字段寬度的總計(jì)數(shù)目比各字段寬度之和大1,這時(shí)因?yàn)橄到y(tǒng)保留了1個(gè)字節(jié)的寬度用來存放邏輯刪除標(biāo)記

3.3數(shù)據(jù)表的基本操作3.3.1數(shù)據(jù)表的打開和關(guān)閉1.打開數(shù)據(jù)表(1)在項(xiàng)目管理器中打開數(shù)據(jù)表(2)通過“文件”菜單打開數(shù)據(jù)表(3)通過“數(shù)據(jù)工作期”窗口打開數(shù)據(jù)表(4)用命令打開數(shù)據(jù)表【格式】USE[<表文件名>|?][IN<工作區(qū)號(hào)>|<工作區(qū)別名>][ALIAS<表別名>]3.3.1數(shù)據(jù)表的打開和關(guān)閉2.關(guān)閉數(shù)據(jù)表USE:關(guān)閉當(dāng)前工作區(qū)中打開著的數(shù)據(jù)表。CLEARALL:關(guān)閉所有打開著的數(shù)據(jù)庫(kù)和數(shù)據(jù)表,釋放所有的內(nèi)存變量。CLOSEALL:關(guān)閉所有打開著的數(shù)據(jù)庫(kù)和數(shù)據(jù)表、設(shè)計(jì)器、項(xiàng)目管理器。CLOSEDATABASE:關(guān)閉當(dāng)前數(shù)據(jù)庫(kù)和數(shù)據(jù)表,并選擇1區(qū)為當(dāng)前工作區(qū)。CLOSETABLES:關(guān)閉當(dāng)前數(shù)據(jù)庫(kù)中的所有數(shù)據(jù)表。QUIT:在退出VFP的同時(shí)關(guān)閉所有的數(shù)據(jù)庫(kù)和數(shù)據(jù)表等。3.3.2記錄的輸入1.記錄輸入根據(jù)輸入到數(shù)據(jù)表中的順序,數(shù)據(jù)表中的每個(gè)記錄都被自動(dòng)賦予一個(gè)順序號(hào),稱為記錄號(hào)。

注意以下幾點(diǎn):(1)通用型和備注型字段的輸入方法是雙擊字段名后的“gen”和“memo”,或是把光標(biāo)移動(dòng)到“gen”和“memo”上時(shí)按Ctrl+PageUp(PageDown)鍵,打開相應(yīng)的輸入窗口,之后即可輸入通用型和備注型字段的內(nèi)容,輸入完畢后單擊窗口關(guān)閉按鈕或按Ctrl+W鍵即可保存輸入的內(nèi)容(若按Ctrl+Q鍵則不保存輸入的內(nèi)容),返回到數(shù)據(jù)記錄輸入窗口。輸入內(nèi)容后,“memo”和“gen”分別變?yōu)椤癕emo”和“Gen”。3.3.2記錄的輸入(2)備注型字段的內(nèi)容可直接輸入,但通用型數(shù)據(jù)的輸入一般使用插入對(duì)象的方法來插入數(shù)據(jù)。打開通用型字段的輸入窗口后,選擇“編輯”菜單下的“插入對(duì)象”,即出現(xiàn)插入對(duì)象對(duì)話框,

(3)如果需要向一個(gè)字段輸入空值(NULL),則必須使用組合鍵:CTRL+0,或者輸入“.NULL.”。(4)在數(shù)據(jù)輸入過程中,可隨時(shí)移動(dòng)插入點(diǎn)對(duì)輸入的錯(cuò)誤進(jìn)行修改。

(5)按Esc鍵或Ctrl+Q鍵也可關(guān)閉記錄輸入窗口

3.3.2記錄的輸入2.記錄追加【格式】APPEND[BLANK][IN<工作區(qū)號(hào)>|<表的別名>]3.3.2記錄的輸入3.從其它數(shù)據(jù)表文件中追加記錄(1)菜單方式(2)命令方式【格式】APPENDFROM<文件名>|?[FIELDS<字段名表>][FOR<條件表達(dá)式>]由于通用字段用于存儲(chǔ)OLE對(duì)象,和其它字段不同,因此需要用特殊的命令:【格式】APPENDGENERAL<通用字段名>FROM<對(duì)象的文件名.擴(kuò)展名>3.3.3記錄的瀏覽和顯示1.在“瀏覽”窗口中顯示瀏覽記錄(1)在項(xiàng)目管理器,選數(shù)據(jù)表,單擊“瀏覽”按鈕。(2)在數(shù)據(jù)庫(kù)設(shè)計(jì)器中,右單擊要瀏覽的數(shù)據(jù)表名,在快捷菜單中選擇“瀏覽”命令。(3)打開數(shù)據(jù)表后,選擇“顯示”菜單中的“瀏覽”命令。(4)打開數(shù)據(jù)表,在命令窗口中用BROWSE命令。【格式】BROWSE[FIELDS<字段名表>][FOR<條件表達(dá)式>][FREEZE<字段名>][LOCK<字段序號(hào)>][NOAPPEND]

[NODELETE][NOEDIT|NOMODIFY]3.3.3記錄的瀏覽和顯示2.列表方式顯示數(shù)據(jù)表記錄【格式】LIST|DISP[[FIELDS]<字段名表>][<范圍>][FOR<條件表達(dá)式1>][WHILE<條件表達(dá)式>][OFF][TOPRINTER][TOPROMPT][TOFILES<文件名>]3.3.4記錄指針及其操作1.當(dāng)前記錄雖然一個(gè)數(shù)據(jù)表中可能含有多條記錄,但記錄指針某一時(shí)刻只能指向某一記錄或數(shù)據(jù)表的首尾。當(dāng)記錄指針指向某一記錄時(shí),該記錄就被稱為當(dāng)前記錄?!爱?dāng)前記錄”是一個(gè)非常重要的概念,它既關(guān)系到字段變量的取值,也關(guān)系到許多命令的執(zhí)行,因?yàn)樵谀J(rèn)情況下(不指定操作范圍時(shí)),VFP中一些命令只對(duì)當(dāng)前記錄進(jìn)行操作,例如DISPLAY命令、REPLACE命令等。3.3.4記錄指針及其操作記錄指針是虛擬的,不能直接看到,VFP中常用函數(shù)RECNO()來判斷記錄指針位置,如輸入命令“?RECNO()”時(shí),可以在桌面上顯示出當(dāng)前記錄的記錄號(hào)。另外,在瀏覽窗口中,窗口左側(cè)的按鈕上帶有一個(gè)黑三角的記錄就是當(dāng)前記錄。3.3.4記錄指針及其操作2.記錄指針的定位(1)菜單方式定位記錄指針選擇“表”菜單中的“轉(zhuǎn)到記錄”項(xiàng)

3.3.4記錄指針及其操作(2)命令方式定位記錄指針a.指針的絕對(duì)移動(dòng)【格式一】GO|GOTOTOP|BOTTOM[IN<工作區(qū)號(hào)>|<表的別名>]【格式二】[GO|GOTO]<數(shù)值表達(dá)式>[IN<工作區(qū)號(hào)>|<表的別名>]b.指針的相對(duì)移動(dòng)【格式】SKIP[[+|-]<數(shù)值表達(dá)式>][IN<工作區(qū)號(hào)>|<表的別名>]3.3.4記錄指針及其操作

USErsda&&打開數(shù)據(jù)表rsda.dbf,該表共11條記錄

?RECNO(),BOF()&&當(dāng)前記錄號(hào)為1,BOF()為.F.SKIP-1&&記錄指針從當(dāng)前位置向表頭部相對(duì)移動(dòng)1條記錄

?RECNO(),BOF()&&當(dāng)前記錄號(hào)為1,BOF()為.T.GO4&&記錄指針絕對(duì)移動(dòng)到第4條記錄

?RECNO()&&當(dāng)前記錄號(hào)為4SKIP&&記錄指針從當(dāng)前位置向表尾部相對(duì)移動(dòng)1條記錄

SKIP-3&&記錄指針從當(dāng)前位置向表頭部相對(duì)移動(dòng)3條記錄

?RECNO()&&當(dāng)前記錄號(hào)是2GOBOTTOM&&記錄指針絕對(duì)移動(dòng)到數(shù)據(jù)表最后1條記錄

?RECNO(),EOF()&&當(dāng)前記錄號(hào)為11,EOF()為.F.SKIP&&記錄指針從當(dāng)前位置向表尾部相對(duì)移動(dòng)1條記錄

?RECNO(),EOF()&&當(dāng)前記錄號(hào)為12,EOF()為.T.3.3.4記錄指針及其操作(3)按條件定位【格式】LOCATE[<范圍>][FOR<條件表達(dá)式1>][WHILE<條件表達(dá)式2>]LOCATE命令只能將記錄指針定位到第一條符合條件的記錄上,若要繼續(xù)查找滿足條件的其它記錄,可以執(zhí)行繼續(xù)查找命令。【格式】CONTINUE3.3.5記錄數(shù)據(jù)的修改1.在瀏覽窗口中修改記錄數(shù)據(jù)2.EDIT或CHANGE命令【格式】EDIT|CHANGE[FIELDS<字段名表>][<范圍>][FOR<條件表達(dá)式>]【功能】在編輯窗口顯示并編輯指定的字段。說明:①EDIT和CHANGE只能選擇其中之一,兩者等價(jià)。②缺省范圍和條件時(shí),將從當(dāng)前記錄編輯到最后的記錄。③FIELDS短語(yǔ)用來指定顯示和編輯的字段。3.3.5記錄數(shù)據(jù)的修改3.批量修改記錄數(shù)據(jù)以上介紹的修改數(shù)據(jù)的方法是手工一條記錄一條記錄地修改,若數(shù)據(jù)表中的記錄很多,且許多記錄都需要有規(guī)律地修改數(shù)據(jù),……VFP提供了成批修改某字段有規(guī)律數(shù)據(jù)的方法。(1)利用菜單批量修改數(shù)據(jù)3.3.5記錄數(shù)據(jù)的修改(2)利用REPLACE命令批量修改數(shù)據(jù)【格式】REPL<范圍><字段名1>W(wǎng)ITH<表達(dá)式1>[ADDITIVE][,<字段名2>W(wǎng)ITH<表達(dá)式2>[ADDITIVE]][,…][<范圍>][FOR<條件表達(dá)式>]說明:①不選用范圍和條件,只對(duì)當(dāng)前記錄進(jìn)行字段更改。②只選了范圍短語(yǔ),對(duì)指定范圍內(nèi)的所有記錄進(jìn)行字段更改。③只選了條件短語(yǔ),則默認(rèn)范圍ALL。④可以同時(shí)更改幾個(gè)不同字段的值。WITH后面的<表達(dá)式n>的值用來替換對(duì)應(yīng)字段的值。3.3.6記錄的刪除與恢復(fù)在VFP中刪除操作分為兩步,首先是進(jìn)行邏輯刪除,然后再進(jìn)行物理刪除。

1.邏輯刪除(邏輯刪除只對(duì)記錄作刪除標(biāo)記)(1)在瀏覽窗口中邏輯刪除記錄單擊窗口左邊框和要?jiǎng)h除的記錄的第一個(gè)字段之間的小方塊(稱為刪除標(biāo)記)一般情況下,邏輯刪除的記錄和其他記錄一樣參與操作,除非使用了SETDELETEON命令。此時(shí),被邏輯刪除的記錄將被隱藏起來,不參加有關(guān)的計(jì)算。3.3.6記錄的刪除與恢復(fù)(2)利用命令邏輯刪除記錄【格式】DELETE[<范圍>][FOR<條件表達(dá)式>][WHILE<條件表達(dá)式>][IN<工作區(qū)號(hào)>|<表的別名>]2.恢復(fù)邏輯刪除記錄(1)在瀏覽窗口中恢復(fù)邏輯刪除的記錄(2)利用命令恢復(fù)已邏輯刪除的記錄【格式】RECALL[<范圍>][FOR<條件表達(dá)式>][WHILE<條件表達(dá)式>][IN<工作區(qū)號(hào)>|<表的別名>]3.3.6記錄的刪除與恢復(fù)3.物理刪除已作了邏輯刪除標(biāo)記的記錄(1)菜單方式選擇菜單“表”、“徹底刪除”命令,VFP將彈出一個(gè)確認(rèn)對(duì)話框,單擊“確定”按鈕即可物理刪除(2)命令方式【格式】PACK

4.刪除表中所有記錄【格式】ZAP[IN<工作區(qū)號(hào)>|<表的別名>]說明:ZAP等效于DELEALL和PACK兩條命令連用。

3.4索引文件及其應(yīng)用3.4.1索引文件及分類1.索引文件索引文件:它僅由兩個(gè)字段組成,一個(gè)字段是排序的關(guān)鍵字值(也可以是一個(gè)表達(dá)式),另一個(gè)字段是每個(gè)關(guān)鍵字在原始數(shù)據(jù)表中對(duì)應(yīng)的記錄號(hào)。例,在Rsda.dbf數(shù)據(jù)表中,以編號(hào)為關(guān)鍵字段并按升序建立的索引文件的示意圖如下圖所示。1.索引文件原數(shù)據(jù)表中的順序是按輸入的順序存儲(chǔ)在表中的,在索引文件中,記錄是按索引關(guān)鍵字值的順序排列的,當(dāng)要查找某一編號(hào)的記錄時(shí),VFP先在索引文件中查找該編號(hào),找到后再根據(jù)對(duì)應(yīng)的記錄號(hào),在數(shù)據(jù)表中將記錄指針快速移動(dòng)到該記錄上。一個(gè)索引文件中可以只有一個(gè)索引,也可以有多個(gè)索引??梢园鄠€(gè)索引的索引文件稱該文件為復(fù)合索引文件。在復(fù)合索引文件中,需要為每個(gè)索引指定一個(gè)索引標(biāo)識(shí)名,以便于通過索引標(biāo)識(shí)相互區(qū)分各個(gè)索引。3.4.1索引文件及分類2.索引文件的分類VFP支持傳統(tǒng)的單入口索引文件(擴(kuò)展名為.IDX)和復(fù)合索引文件(擴(kuò)展名.CDX),其中.IDX索引文件中只包含一個(gè)索引,而.CDX索引文件中可以包含有一個(gè)或多個(gè)索引,所以稱為復(fù)合索引文件。復(fù)合索引文件,又可分為結(jié)構(gòu)化復(fù)合索引文件和非結(jié)構(gòu)化復(fù)合索引文件兩種,其區(qū)別在于:結(jié)構(gòu)化復(fù)合索引的主文件名與數(shù)據(jù)表的主文件名相同,并隨著數(shù)據(jù)表的打開而打開,在添加、更改或刪除記錄時(shí)會(huì)自動(dòng)進(jìn)行維護(hù);而非結(jié)構(gòu)化復(fù)合索引文件的主文件名與數(shù)據(jù)表文件不同,必須用命令打開。3.4.1索引文件及分類3.索引的類型(1)主索引主索引通常是數(shù)據(jù)表的關(guān)鍵字索引,作為主索引的字段稱為主關(guān)鍵字。主索引不能用在自由表中,而只能用在數(shù)據(jù)庫(kù)表中,可用于在永久關(guān)系中建立參照完整性。創(chuàng)建主索引的字段不允許有重復(fù)值,且一個(gè)表只能有一個(gè)主索引。例如,在數(shù)據(jù)表中,常用學(xué)生證號(hào)、身份證號(hào)、工作證號(hào)等作為主索引,而姓名可能有同名的情況,一般不能作為主索引。3.4.1索引文件及分類3.索引的類型(2)候選索引候選索引類似于主索引,其索引值就不能有重復(fù)值。與主索引不同的是,一個(gè)數(shù)據(jù)表中可以有多個(gè)候選索引,而且侯選索引不能用來在永久關(guān)系中建立參照完整性。(3)惟一索引惟一索引表示索引值只能取一個(gè),如果有兩個(gè)或兩個(gè)以上的索引值,則只能取其中一個(gè),因此,惟一索引使用時(shí)可能會(huì)隱藏一些記錄。例如,若有兩個(gè)同名的人員,將姓名字段作為惟一索引,則只能找到一個(gè)記錄,另一個(gè)記錄將不會(huì)找到。3.4.1索引文件及分類3.索引的類型(4)普通索引普通索引沒有上面各索引的限制,是允許重復(fù)索引值的索引。作為普通索引的字段,其字段值可以重復(fù),也可以作為排序的依據(jù),但因?yàn)榭赡苡卸鄠€(gè)相同的索引值,因此查詢時(shí)會(huì)找到多個(gè)符合條件的記錄。一個(gè)數(shù)據(jù)表中可以有多個(gè)普通索引。3.4.2創(chuàng)建索引文件1.建立結(jié)構(gòu)化復(fù)合索引文件

(1)在表設(shè)計(jì)器中創(chuàng)建索引文件(2)命令方式創(chuàng)建索引【格式】INDEXON<表達(dá)式>

TAG<索引標(biāo)識(shí)名>

[FOR<條件表達(dá)式>][ASCENDING|DESCENDING][UNIQUE|CANDIDATE][ADDITIVE]【功能】建立結(jié)構(gòu)化復(fù)合索引文件。USERSDAINDEXON編號(hào)TAGNBHCANDINDEXON性別+CTOD(出生日期)TAGXBCSRQ2.建立獨(dú)立復(fù)合索引文件獨(dú)立復(fù)合索引文件的擴(kuò)展名也是.CDX,但其主文件名與數(shù)據(jù)表文件名不相同,且使用時(shí)還需單獨(dú)打開。獨(dú)立復(fù)合索引文件主要用來創(chuàng)建那些使用不太頻繁的索引。獨(dú)立復(fù)合索引文件不能在表設(shè)計(jì)器中創(chuàng)建,只能用命令建立?!靖袷健縄NDEXON<表達(dá)式>TAG<索引標(biāo)識(shí)名>OF<獨(dú)立復(fù)合索引文件名>

[FOR<條件表達(dá)式>][ASCENDING|DESCENDING][UNIQUE|CANDIDATE][ADDITIVE]

如:USERSDAINDEXON編號(hào)TAGbhOFRs.cdxINDEXON姓名+STR(職務(wù)補(bǔ)貼)TAGxbbtOFRs.cdx3.重新建立索引文件在數(shù)據(jù)表的使用過程中,當(dāng)增刪記錄或數(shù)據(jù)表中被索引文件使用的關(guān)鍵字段改動(dòng)時(shí),結(jié)構(gòu)化復(fù)合索引會(huì)隨著數(shù)據(jù)表的打開自動(dòng)打開并能及時(shí)得到更新,但如果在使用數(shù)據(jù)表時(shí)未打開相應(yīng)的獨(dú)立復(fù)合索引文件或傳統(tǒng)的單入口.IDX索引文件,則索引文件會(huì)因?yàn)闊o法及時(shí)更新而產(chǎn)生錯(cuò)誤索引。這時(shí)須打開索引文件,并對(duì)其重新索引。重執(zhí)行一遍INDEX命令即可重新索引,更簡(jiǎn)捷的方法是在瀏覽窗口中打開數(shù)據(jù)表,然后選擇菜單“表”、“重建建立索引”命令,或打開數(shù)據(jù)表后用REINDEX命令重新建立索引?!靖袷健縍EINDEX3.4.3索引文件的使用1.指定主控索引一個(gè)數(shù)據(jù)表可以建立多個(gè)索引文件,每個(gè)索引文件中又可能包含多個(gè)索引,而一種索引就是一種排序方式,所以,在使用索引時(shí),必須指明哪一個(gè)索引是對(duì)數(shù)據(jù)表記錄排序起作用的,即指定主控索引。在沒有指定哪一個(gè)索引為主控索引之前,數(shù)據(jù)表的訪問順序仍然是原來的物理順序,即按記錄號(hào)的順序訪問。主控索引和主索引是完全不同的概念。主索引是用來控制數(shù)據(jù)的完整性的,而主控索引是用來指定目前記錄排列順序的。1.指定主控索引(1)指定結(jié)構(gòu)化復(fù)合索引文件中的索引為主控索引在瀏覽窗口中打開數(shù)據(jù)表(以表Rsgz.dbf為例),選擇菜單“表”、“屬性”命令,即彈出“工作區(qū)屬性”對(duì)話框,單擊“索引順序”下拉列表,選擇一個(gè)索引標(biāo)識(shí)名,瀏覽窗口中記錄的排列順序會(huì)立即根據(jù)選擇的主控索引發(fā)生變化設(shè)定主控索引后,利用LIST、DISPLAY命令輸出的記錄順序也是排序后的順序。需要特別強(qiáng)調(diào)的是,主控索引只是改變了記錄的輸出順序,記錄在數(shù)據(jù)庫(kù)中的順序并沒有發(fā)生變化。通過VFP的USE命令和SETORDERTO命令也可以指定主控索引。

【格式一】USE<數(shù)據(jù)表名>ORDER[TAG]<索引標(biāo)識(shí)名>[ASCENDING|DESCENDING]【格式二】SETORDERTO[[TAG]<索引標(biāo)識(shí)名>]ASCENDING|DESCENDING]【功能】指定結(jié)構(gòu)化復(fù)合索引文件的索引為主控索引。(2)指定獨(dú)立復(fù)合索引文件中的索引為主控索引對(duì)于獨(dú)立的復(fù)合索引文件或單入口的索引文件,需要用命令將其打開和關(guān)閉,只有打開要使用的獨(dú)立復(fù)合索引文件后,才能指定其中的索引為主控索引。

【格式一】USE<數(shù)據(jù)表名>ORDER[TAG]<索引標(biāo)識(shí)名>[OF<獨(dú)立復(fù)合索引文件名>][ASCENDING|DESCENDING]【格式二】

SETINDEXTO[TAG]<索引標(biāo)識(shí)名>[OF<獨(dú)立復(fù)合索引文件名>](4)關(guān)閉索引文件【格式一】SETINDEXTO【格式二】CLOSEINDEX2.使用索引快速查找記錄FIND命令和SEEK命令都可在指定主控索引的情況下進(jìn)行記錄的查找操作。

SEEK<表達(dá)式>USERsdaORDERTAGbh&&打開Rsda同時(shí)指定BH為主控索引

SEEK"03001"SETORDERTOrq&&重新指定rq為主控索引

SEEKCTOD("1988.09.06")&&日期格式要與設(shè)置相同,否則會(huì)出錯(cuò)

DISPLAY3.5數(shù)據(jù)表的統(tǒng)計(jì)計(jì)算3.5.1累加求和及求平均值對(duì)每個(gè)記錄的橫向求和和統(tǒng)計(jì)可以用前面介紹的操作或命令方便地給出,如REPLACE命令。對(duì)于每個(gè)記錄的縱向求和統(tǒng)計(jì)可以用累加求和命令實(shí)現(xiàn)?!靖袷健縎UM|AVERAGE[<表達(dá)式表>][<范圍>][FOR<條件表達(dá)式>][WHILE<條件表達(dá)式>][TO<內(nèi)存變量名表>]|[TO<數(shù)組變量名>]【例】求出Rsgz.dbf中計(jì)算機(jī)系所有職工的月基本工資平均值及全年實(shí)發(fā)工資之和并顯示。

CLEARSETTALKOFFUSERsgz

AVERAGE基本工資TOpj_jbgzFORSUBSTR(編號(hào),1,2)="03"

SUM實(shí)發(fā)工資*12TOqn_sfgzFORSUBSTR(編號(hào),1,2)="03"?"計(jì)算機(jī)系職工的月平均工資為:",pj_jbgz?"計(jì)算機(jī)職工的全年實(shí)發(fā)工資之和為:",qn_sfgzUSESETTALKONRETURN3.5.2統(tǒng)計(jì)記錄個(gè)數(shù)

【格式】COUNT[<范圍>][FOR<條件表達(dá)式>][WHILE<條件表達(dá)式>][TO<內(nèi)存變量名表>]|[TO<數(shù)組變量名>]3.5.3分類匯總分類匯總對(duì)已經(jīng)建立了索引并且指定了主控索引的數(shù)據(jù)表,可以按關(guān)鍵字進(jìn)行分類求和

【格式】TOTALON<關(guān)鍵字表達(dá)式>TO<新表名>

[FIELDS<字段名表>][<范圍>][FOR<條件表達(dá)式1>][WHILE<條件表達(dá)式2>]①當(dāng)前數(shù)據(jù)表必須是按<關(guān)鍵字表達(dá)式>索引過,并指定該索引為主控索引,以保證具有相同關(guān)鍵字值的記錄能連續(xù)訪問。②FIELDS短語(yǔ)給出了需分類求和的字段名,這些字段只能是數(shù)值型或貨幣型的,如果缺省,則對(duì)當(dāng)前表中的所有數(shù)值型或貨幣型字段分類求和。不管選不選FIELDS短語(yǔ),新表與當(dāng)前表的結(jié)構(gòu)是一樣的。③對(duì)當(dāng)前數(shù)據(jù)表中的若干個(gè)關(guān)鍵字表達(dá)式相同的記錄,生成新表中的一條記錄。這條記錄的非數(shù)值型或非貨幣型字段取自關(guān)鍵字相同的一組記錄中首記錄的相應(yīng)字段,參加求和的字段值取自求和結(jié)果。3.6數(shù)據(jù)交換3.6.1數(shù)組與數(shù)據(jù)表的數(shù)據(jù)交換1.將數(shù)據(jù)表中的記錄數(shù)據(jù)保存到數(shù)組中【格式一】SCATTER[FIELDS<字段名表>][MEMO]TO<數(shù)組名>【格式二】COPYTOARRAY<數(shù)組名>[FIELDS<字段名表>][<范圍>][FOR<邏輯表達(dá)式>]【功能】將當(dāng)前打開的數(shù)據(jù)表中的某些記錄數(shù)據(jù)存儲(chǔ)在數(shù)組中。2.將數(shù)組中的數(shù)據(jù)傳遞到當(dāng)前數(shù)據(jù)表中【格式一】GATHERFROM<數(shù)組名>[FIELDS<字段名表>][MEMO]【格式二】APPENDFROMARRAY<數(shù)組名>[FOR<邏輯表達(dá)式>][FIELDS<字段名表>]【功能】將數(shù)組中各元素的數(shù)據(jù)傳遞給當(dāng)前打開的數(shù)據(jù)表中。3.6.2文件復(fù)制1.復(fù)制部分記錄或整個(gè)數(shù)據(jù)表【格式】COPYTO<表文件名>

[<范圍>]

[FOR|WHILE<邏輯表達(dá)式>][FIELDS<字段名表>][DATABASE<數(shù)據(jù)庫(kù)名>[NAME<長(zhǎng)表名>]] [[WITH]CDX]|[[WITH]PRODUCTION] |SDF|SYLK|WK1|WKS|WR1|WRK|

XLS|XL5|DELIMITED[WITH<定界符>|WITHBLANK|……2.復(fù)制數(shù)據(jù)表的結(jié)構(gòu)【格式】COPYSTRUCTURETO<表文件名>

[FIELDS<字段名表>

[[WITH]CDX|[WITH]PRODUCTION]3.7多數(shù)據(jù)表操作VFP提供了強(qiáng)有力的多數(shù)據(jù)表操作能力,引入了工作區(qū)和表的別名這兩個(gè)概念。用戶可以在不同的工作區(qū)中同時(shí)打開多個(gè)表,也可以在不同的工作區(qū)打開同一個(gè)表,通過表的別名,用戶可以引用在不同工作區(qū)打開的表中的數(shù)據(jù)。3.7.1工作區(qū)的基本概念所謂“打開”數(shù)據(jù)表,實(shí)際上就是VFP在內(nèi)存中開辟了一個(gè)區(qū)域(亦稱緩沖區(qū))與磁盤上數(shù)據(jù)表之間建立起一種映射關(guān)系,使VFP通過緩沖區(qū)使用磁盤上數(shù)據(jù)表里的數(shù)據(jù),這個(gè)內(nèi)存中的緩沖區(qū)就稱為工作區(qū)。1.工作區(qū)的性質(zhì)(1)在每一個(gè)工作區(qū)中只能打開一個(gè)表,VFP最多可以開辟32767個(gè)工作區(qū),打開32767個(gè)表。允許一個(gè)表在幾個(gè)工作區(qū)中同時(shí)打開。(2)在某一時(shí)刻只能選擇一個(gè)工作區(qū)為“當(dāng)前工作區(qū)”,對(duì)其中的表進(jìn)行操作。系統(tǒng)初始狀態(tài)默認(rèn)1號(hào)工作區(qū)為當(dāng)前工作區(qū)。(3)每一工作區(qū)打開的數(shù)據(jù)表都有各自的記錄指針。在一般情況下,對(duì)數(shù)據(jù)表的操作只能移動(dòng)當(dāng)前工作區(qū)的記錄指針。當(dāng)使得數(shù)據(jù)表之間建立臨時(shí)關(guān)系以后,另一工作區(qū)的記錄指針才能根據(jù)要求伴隨當(dāng)前工作區(qū)的記錄指針作相應(yīng)的移動(dòng)。(4)內(nèi)存變量對(duì)各工作區(qū)是公用的,每一工作區(qū)的字段變量對(duì)其它各工作區(qū)也是公用的。在任意工作區(qū)都可以對(duì)其它工作區(qū)的當(dāng)前記錄進(jìn)行讀、寫操作。2.工作區(qū)的編號(hào)和別名

為了標(biāo)識(shí)每一個(gè)工作區(qū),系統(tǒng)給每一工作區(qū)編號(hào),號(hào)碼為1、2、…、32767。同時(shí)還為工作區(qū)規(guī)定了別名,其中1至10號(hào)工作區(qū)別名為A、B、…、J;11至32767號(hào)工作區(qū)別名為W11、W12、…、W32767。給數(shù)據(jù)表命名時(shí),不要與工作區(qū)的別名沖突,否則容易引起混亂。3.?dāng)?shù)據(jù)表別名

在打開數(shù)據(jù)表的同時(shí),可以為數(shù)據(jù)表起一個(gè)別名,這個(gè)別名也作為打開該數(shù)據(jù)表的工作區(qū)別名。[格式]

USE<數(shù)據(jù)表名>[ALIAS<別名>][IN<數(shù)值表達(dá)式>|<工作區(qū)別名>][AGAIN]說明:①若不指定工作區(qū),則默認(rèn)為在當(dāng)前工作區(qū)上打開指定的數(shù)據(jù)表,并同時(shí)關(guān)閉以前在當(dāng)前工作區(qū)上打開的數(shù)據(jù)表。②ALIAS<別名>為可選項(xiàng),不指定別名時(shí),原數(shù)據(jù)表名就是它的別名。例如,當(dāng)執(zhí)行了命令“USERsdaALIASda”后,表Rsda的別名就是da;而執(zhí)行了命令“USERsda”后,則默認(rèn)Rsda表的別名。③若選擇了IN0短語(yǔ),表示在當(dāng)前沒有使用的編號(hào)最小工作區(qū)上打開數(shù)據(jù)表。④該命令只是在指定的工作區(qū)上打開數(shù)據(jù)表,并不能改變當(dāng)前工作區(qū)。改變當(dāng)前工作需要單獨(dú)的命令。⑤一旦一個(gè)工作區(qū)上打開了一個(gè)數(shù)據(jù)表,數(shù)據(jù)表就和該工作區(qū)建立起對(duì)應(yīng)關(guān)系,所以打開數(shù)據(jù)表后可以用數(shù)據(jù)表的別名來代替工作區(qū)別名。3.7.2工作區(qū)的選擇和使用1.選擇工作區(qū)(1)利用“數(shù)據(jù)工作區(qū)”窗口選擇工作區(qū)選擇[窗口]菜單中的[數(shù)據(jù)工作期]命令,或單擊常用工具欄中的[數(shù)據(jù)工作期窗口]按鈕,打開[數(shù)據(jù)工作期]窗口。這時(shí)默認(rèn)當(dāng)前工作區(qū)為1。單擊[打開]按鈕選擇一個(gè)數(shù)據(jù)表打開。若再次單擊[打開]按鈕,可以依次在其它工作區(qū)打開其它數(shù)據(jù)表,并且可以用顯示的別名選擇工作區(qū)。在數(shù)據(jù)工作期窗口還可以瀏覽各工作區(qū)打開的數(shù)據(jù)表,還可以關(guān)閉他們。

(2)利用SELECT命令選擇工作區(qū)[格式]

SELECT<工作區(qū)號(hào)>|<工作區(qū)別名>|<表別名>說明:選擇當(dāng)前工作區(qū),選擇的工作區(qū)中可以是在前面已經(jīng)打開了數(shù)據(jù)表,也可以是未曾打開表。例:USERsda&&默認(rèn)在1號(hào)工作區(qū)打開Rsda.dbf

SELECTd&&選擇4號(hào)工作區(qū)為當(dāng)前工作區(qū)

USERsgl&&在當(dāng)前(4號(hào))工作區(qū)打開Rsgl.dbf

USERsgzALIASgz&&在當(dāng)前4號(hào)工作區(qū)打開Rsgz,同時(shí)關(guān)閉Rsgl

SELECT1&&選擇1區(qū)為當(dāng)前工作區(qū)

LIST&&顯示當(dāng)前(1號(hào))工作區(qū)數(shù)據(jù)表(Rsda)的記錄

SELECTgz&&或SELE4,SELEd,但不能SELERsgz

LIST&&顯示Rsgz的記錄

SELERsda&&是否可以?為什幺?

LIST

?SELECT()&&給出當(dāng)前工作區(qū)號(hào)函數(shù),返回當(dāng)前工作區(qū)號(hào)

USERsglIN10

?SELECT()

USE&&關(guān)閉當(dāng)前工作區(qū)上的數(shù)據(jù)表

USERsglIN0

?SELECT()2.在不同工作區(qū)打開同一個(gè)數(shù)據(jù)表例:SELE1USERsdaUSERsdaALIASdaIN3AGAINSELE2USERsdaAGAIN3.使用非當(dāng)前工作區(qū)中表的數(shù)據(jù)方法是在非當(dāng)前工作區(qū)的表的字段名前加注工作區(qū)別名或表的別名。格式為:<別名>-><字段名>

或<別名>.<字段名>注意,這里的符號(hào)“->”是“-”和“>”兩個(gè)(均為半角)符號(hào)復(fù)合而成。例:SELE2USERsgl&&未指定主索引順序,指向1號(hào)記錄

USERsdaIN3SELE3LOCATEFOR姓名=b->姓名&&指向同個(gè)人

DISPLY部門名,姓名,出生日期,c.工作日期

顯示結(jié)果如下:記錄號(hào)部門名姓名出生日期C->工作日期

1機(jī)關(guān)韓偉東1960.10.101985.09.04在VFP中,表之間關(guān)聯(lián)有臨時(shí)關(guān)系和永久關(guān)系兩種關(guān)聯(lián)

1.設(shè)置表的臨時(shí)關(guān)系

(1)利用數(shù)據(jù)工作期窗口建立表的臨時(shí)關(guān)系3.7.3數(shù)據(jù)表的關(guān)聯(lián)(2)利用命令建立表之間的臨時(shí)關(guān)系

【格式】SETRELATIONTO[<關(guān)鍵字表達(dá)式1>|<數(shù)值表達(dá)式1>

INTO<工作區(qū)別名1>|<子表別名1>

[,<關(guān)鍵字表達(dá)式2>|<數(shù)值表達(dá)式2>

INTO<工作區(qū)別名2>|<表別名2>…][ADDITIVE]]說明:①必須選擇父表所在工作區(qū)為當(dāng)前工作區(qū),然后再使用本命令與非當(dāng)前工作區(qū)中的數(shù)據(jù)表(子表)建立關(guān)聯(lián)。②選ADDITIVE項(xiàng)可使父數(shù)據(jù)表與子表建立關(guān)聯(lián)時(shí),原先已存在的關(guān)聯(lián)仍然保留。如果不選用該項(xiàng),則建立新關(guān)聯(lián)時(shí)將取消原有關(guān)聯(lián)。③子表必須按關(guān)鍵字表達(dá)式中的關(guān)鍵字段建立索引,且被指定為主控索引。若選擇數(shù)值表達(dá)式,則兩個(gè)表是按照記錄號(hào)相聯(lián)系,此時(shí)子表不要求索引。通常情況下,用兩個(gè)表都具有的相同字段作為建立臨時(shí)關(guān)系的關(guān)鍵字表達(dá)式。④不選任何可選項(xiàng)則取消已與當(dāng)前表建立的關(guān)聯(lián)。父表可以與多個(gè)子表建立關(guān)聯(lián)。⑤建立臨時(shí)關(guān)系以后,父表和子表記錄指針的移動(dòng)的規(guī)則是:父表指針每移動(dòng)到一個(gè)記錄,子表則按關(guān)鍵字表達(dá)式的值進(jìn)行索引查找,并將記錄指針定位在相應(yīng)記錄上。若子表中沒有記錄和父表的當(dāng)前記錄相關(guān)聯(lián),子表的記錄指針將指向EOF;若子表中有多個(gè)記錄和父表的當(dāng)前記錄相關(guān)聯(lián),則子表的記錄指針將指向第一個(gè)相匹配的記錄。【例】某書店有一個(gè)圖書庫(kù)存數(shù)據(jù)表Tskc.dbf,存放有該書店所有的圖書信息,另有一個(gè)圖書調(diào)價(jià)數(shù)據(jù)表tstj.dbf,其中存放著圖書調(diào)價(jià)后的新價(jià)格.

現(xiàn)要求編制程序,用Tstj.dbf中的單價(jià)數(shù)據(jù)更新Tskc.dbf中的單價(jià)數(shù)據(jù)。假設(shè)Tstj.dbf數(shù)據(jù)表中的記錄和Tskc.dbf中的記錄是一一對(duì)應(yīng)的,即凡是出現(xiàn)在Tskc.dbf中圖書都調(diào)價(jià)了,則可用如下的程序:

SETTALKOFFSETSAFETYOFFUSETSKCSELECT2USETSTJINDEXON圖書編號(hào)TAGTSBHSETORDERTOTSGHSELECT1SETRELATIONTO圖書編號(hào)INTOBREPLACEALL單價(jià)withTSTJ.單價(jià)

CLOSEALLSETSAFETYONSETTALKONRETURN2.設(shè)置表間的永久關(guān)系永久關(guān)系是存儲(chǔ)在數(shù)據(jù)庫(kù)文件(.DBC)中的數(shù)據(jù)表之間的關(guān)系,它作為數(shù)據(jù)庫(kù)的組成部分一直保留。它不像臨時(shí)關(guān)系每次打開數(shù)據(jù)表時(shí)都要重新建立。數(shù)據(jù)庫(kù)中的數(shù)據(jù)表建立永久關(guān)系后,借助這種關(guān)系不僅僅從當(dāng)前選定的表中訪問數(shù)據(jù),而且還可以訪問相關(guān)數(shù)據(jù)表中的數(shù)據(jù)。當(dāng)在

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論