




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第4章數(shù)據(jù)表的基本操作本章學(xué)習(xí)目標(biāo)掌握工作區(qū)的概念與作用。掌握數(shù)據(jù)表的打開(kāi)與關(guān)閉方法。掌握表中記錄錄入的方式和添加記錄的各種命令方法。熟悉表編輯記錄的各種方式和命令;掌握表記錄的刪除和恢復(fù);設(shè)置表的過(guò)濾方法等。4.1表的打開(kāi)與關(guān)閉 4.2表的操作4.3記錄的操作4.4刪除與恢復(fù)記錄本章目錄4.5表的過(guò)濾4.1.1工作區(qū)的概念4.1表的打開(kāi)與關(guān)閉表只有打開(kāi)后方可使用,操作結(jié)束后也應(yīng)及時(shí)關(guān)閉以確保數(shù)據(jù)的安全。對(duì)數(shù)據(jù)庫(kù)表來(lái)說(shuō),即使打開(kāi)了數(shù)據(jù)庫(kù),包含在數(shù)據(jù)庫(kù)中的表也不會(huì)自動(dòng)打開(kāi),經(jīng)過(guò)打開(kāi)步驟。工作區(qū)(WorkArea)是為當(dāng)前正在使用的表開(kāi)辟的一個(gè)內(nèi)存區(qū)域。系統(tǒng)提供了多達(dá)32767個(gè)工作區(qū),工作區(qū)號(hào)用1~32767表示。正在使用的工作區(qū)稱(chēng)為當(dāng)前工作區(qū)。系統(tǒng)啟動(dòng)后,默認(rèn)1號(hào)工作區(qū)為當(dāng)前工作區(qū)。
一個(gè)工作區(qū)只能打開(kāi)一個(gè)表,如果再打開(kāi)第二個(gè)表,系統(tǒng)將自動(dòng)關(guān)閉第一個(gè)表。這種只能對(duì)一個(gè)表進(jìn)行的操作稱(chēng)為單表操作。如果需要同時(shí)使用多個(gè)表,則需在不同的工作區(qū)分別打開(kāi),這種操作稱(chēng)為多表操作。1.工作區(qū)的概念圖4-1“系統(tǒng)”提示信息一般情況下,一個(gè)表文件也不能在一個(gè)以上的工作區(qū)同時(shí)打開(kāi),否則將出現(xiàn)如圖4-1所示的“文件正在使用”的系統(tǒng)提示信息。
每個(gè)工作區(qū)為打開(kāi)的表文件設(shè)置一個(gè)記錄指針,在一般情況下它們各自獨(dú)立移動(dòng),互不干擾。每個(gè)表打開(kāi)后都有兩個(gè)默認(rèn)的別名,一個(gè)是表名自身,另一個(gè)是工作區(qū)所對(duì)應(yīng)的別名。編號(hào)為1~10的前10個(gè)工作區(qū)的默認(rèn)別名用A~J這10個(gè)字母表示,工作區(qū)11~32767中指定的別名是W11到W32767。另外,還可以在USE命令中使用ALIAS子句來(lái)指定別名。
注意:?jiǎn)蝹€(gè)字母A~J不能用來(lái)作為表的文件名,它是系統(tǒng)的保留字。別名也可作為工作區(qū)的標(biāo)識(shí)。2.工作區(qū)選擇命令當(dāng)使用一個(gè)工作區(qū)時(shí),就需要使用SELECT命令選擇一個(gè)工作區(qū),其命令格式如下:
SELECTnWorkArea|cTableAlias|0說(shuō)明:①nWorkArea:指定要激活的工作區(qū),取值范圍:1~32767;也可使用A~J、W11~W32767。②cTableAlias:此參數(shù)是打開(kāi)表的別名,如果表沒(méi)有起別名,則可以用表名代替別名。③0:激活尚未使用的工作區(qū)中編號(hào)最小的那一個(gè),做為當(dāng)前工作區(qū)。說(shuō)明:⑴函數(shù)SELECT()可返回當(dāng)前工作區(qū)號(hào);函數(shù)ALIAS([nWorkArea])可返回當(dāng)前工作區(qū)或指定的工作區(qū)別名。
⑵當(dāng)前工作區(qū)的表文件的字段名可以被直接引用,但從當(dāng)前工作區(qū)訪問(wèn)非當(dāng)前工作區(qū)中打開(kāi)表的字段時(shí)只能讀不能寫(xiě),且使用如下格式:
alias.field或者alias->field打開(kāi)表的方法有菜單方式和命令方式兩種。4.1.2打開(kāi)表【例4-1】用菜單方式打開(kāi)學(xué)生情況表“學(xué)生.dbf”。操作步驟略,參見(jiàn)P124。1.使用菜單方式2.使用命令方式可使用USE命令打開(kāi)表,該命令的使用格式如下:
USE[[DatabaseName!]dbf_Name|?][ALIAS][INnWorkArea|cTableAlias][AGAIN][EXCLUSIVE][SHARED][NOUPDATE]說(shuō)明:⑴[DatabaseName!]dbf_Name|?:指定要打開(kāi)的表的名稱(chēng),“?”指定調(diào)出文件對(duì)話框供選擇要打開(kāi)的表。表文件名可以帶盤(pán)符和路徑,擴(kuò)展名.dbf可省略。⑵INnWorkArea:指定要打開(kāi)表所在的工作區(qū)。帶有IN子句和工作區(qū)編號(hào)的USE命令,可以關(guān)閉指定工作區(qū)中的表。在IN子句中0可作為工作區(qū)號(hào),指定0可以在最低可用的工作區(qū)中打開(kāi)表。例如,如果工作區(qū)1至工作區(qū)10中都有表打開(kāi),那么下面的命令將在工作區(qū)11中打開(kāi)“通訊.dbf”表:USE通訊IN0⑶INcTableAlias:指定在當(dāng)前工作區(qū)中打開(kāi)表。打開(kāi)表的別名用cTableAlias指定。省略這兩個(gè)參數(shù)時(shí),則在當(dāng)前工作區(qū)中打開(kāi)表。⑷AGAIN:可在另一個(gè)工作區(qū)中打開(kāi)一個(gè)已打開(kāi)的表。再次打開(kāi)的表被賦予工作區(qū)的默認(rèn)別名。⑸EXCLUSIVE:表以獨(dú)占方式打開(kāi)。使用USE命令不能打開(kāi)其他用戶以獨(dú)占方式打開(kāi)的數(shù)據(jù)庫(kù)。⑹SHARED:表以共享方式打開(kāi)。⑺NOUPDATE:禁止以修改方式打開(kāi)表,防止修改表結(jié)構(gòu)和表記錄?!纠?-2】選擇工作區(qū)編號(hào)為5的工作區(qū)以獨(dú)立方式打開(kāi)學(xué)生表,再在編號(hào)為20的工作區(qū)打開(kāi)學(xué)生表。SETDEFAULTTOD:\JXGL\DATASELECT5USE學(xué)生EXCLUSIVESELECT20USE學(xué)生AGAIN4.1.3關(guān)閉表要關(guān)閉表,可以使用系統(tǒng)的“文件”菜單下的的“退出”命令,或單擊程序窗口的“關(guān)閉”按鈕,即通過(guò)退出VisualFoxPro系統(tǒng)來(lái)關(guān)閉表。若要關(guān)閉當(dāng)前工作區(qū)打開(kāi)的表,只需在命令窗口中鍵入U(xiǎn)SE命令即可。關(guān)閉表的其他命令方式如下:CLOSE命令的使用格式如下:CLOSE[ALL|DATABASES[ALL]|TABLES[ALL]]該命令的功能是:關(guān)閉數(shù)據(jù)庫(kù)及等各種類(lèi)型的文件。說(shuō)明:
⑴ALL:關(guān)閉所有工作區(qū)中打開(kāi)的數(shù)據(jù)庫(kù)、表、表單設(shè)計(jì)器、查詢?cè)O(shè)計(jì)器和和索引等各類(lèi)文件,并選擇工作區(qū)1為當(dāng)前工作區(qū)。
⑵CLOSEDATABASES:關(guān)閉當(dāng)前打開(kāi)的數(shù)據(jù)庫(kù)和表。并選擇工作區(qū)1為當(dāng)前工作區(qū)。
⑶CLOSEDATABASESALL:關(guān)閉所有打開(kāi)的數(shù)據(jù)庫(kù)和其中的表,所有打開(kāi)的自由表、所有索引和格式文件,并選擇工作區(qū)1為當(dāng)前工作區(qū)。
⑷CLOSETABLES[ALL]:關(guān)閉所有當(dāng)前選中數(shù)據(jù)庫(kù)中的所有表及所有工作區(qū)內(nèi)的自由表。包含ALL時(shí),可以關(guān)閉所有數(shù)據(jù)庫(kù)中的所有表以及自由表,但所有數(shù)據(jù)庫(kù)保持打開(kāi)。1.使用CLOSE命令關(guān)閉表2.使用CLEAR命令關(guān)閉表CLEAR命令的使用格式如下:CLEARALL命令的功能是:關(guān)閉所有表,包括所有相關(guān)的索引、格式和備注文件,并且選擇工作區(qū)1做為當(dāng)前工作區(qū)。從內(nèi)存中釋放所有的內(nèi)存變量和數(shù)組以及所有用戶自定義菜單欄、菜單和窗口的定義。在本節(jié)以及陸續(xù)的章節(jié)中,我們將主要使用命令或程序方式操作數(shù)據(jù)庫(kù)、表等對(duì)象,在本節(jié)中我們將介紹數(shù)據(jù)表結(jié)構(gòu)的顯示和復(fù)制等操作。4.2表的操作4.2.1表結(jié)構(gòu)的顯示表結(jié)構(gòu)顯示的方法有菜單方式和命令兩種方法。當(dāng)表處于顯示狀態(tài)時(shí),利用VisualFoxPro系統(tǒng)菜單中的“顯示”菜單的“表設(shè)計(jì)器”選項(xiàng)進(jìn)行。這里介紹顯示表結(jié)構(gòu)的命令。
表結(jié)構(gòu)的命令使用格式如下:
DISPLAY|LISTSTRUCTURE[INnWorkArea|cTableAlias][TOPRINTER|TOFILEFileName]該命令的功能是:顯示一個(gè)表文件的結(jié)構(gòu)。說(shuō)明:⑴TOPRINTER:將DISPLAYSTRUCTURE的結(jié)果輸出到打印機(jī)。⑵TOFILEFileName:將顯示的結(jié)果輸出到FileName指定的文件中。⑶DISPLAYSTRUCTURE所顯示的內(nèi)容包括表的路徑和表名、記錄數(shù)、最近更新日期、備注字段塊的大小和每個(gè)的名、類(lèi)型、寬度和小數(shù)位。若如果結(jié)構(gòu)復(fù)合索引中的標(biāo)識(shí)與表中的一個(gè)字段同名,標(biāo)識(shí)的順序(升序或降序)和標(biāo)識(shí)的排序序列就顯示在字段名旁邊。⑷如果用SETFIELDS限制了對(duì)表中字段的訪問(wèn),一個(gè)尖括號(hào)就會(huì)出現(xiàn)在可以被訪問(wèn)的字段名旁邊。⑸LISTSTRUCTURE和DISPLAYSTRUCTURE的區(qū)別,前者以滾屏,后者是分屏的方式對(duì)表結(jié)構(gòu)進(jìn)行顯示。【例4-3】顯示表“學(xué)生.dbf”的結(jié)構(gòu)。USE學(xué)生DISPLAYSTRUCTURE顯示結(jié)果如圖4-14所示。4.2.2表結(jié)構(gòu)的復(fù)制當(dāng)復(fù)制的對(duì)象僅為表的結(jié)構(gòu)而不涉及表的記錄時(shí),稱(chēng)為表結(jié)構(gòu)的復(fù)制。結(jié)構(gòu)的復(fù)制有兩種操作,第一種操作是將當(dāng)前表的結(jié)構(gòu)復(fù)制成一個(gè)新表的結(jié)構(gòu);第二種操作是將表的結(jié)構(gòu)復(fù)制成表的結(jié)構(gòu)描述文件。圖4-14表“學(xué)生.dbf”的結(jié)構(gòu)將當(dāng)前表的結(jié)構(gòu)復(fù)制成一個(gè)新表的結(jié)構(gòu),是指所利用的表結(jié)構(gòu)必須是當(dāng)前工作區(qū)中已打開(kāi)的表。復(fù)制表結(jié)構(gòu)的命令使用格式如下:
COPYSTRUCTURETOFileName[FIELDSFieldList]此命令的功能是:用當(dāng)前選擇的表結(jié)構(gòu)創(chuàng)建一個(gè)新的自由表結(jié)構(gòu)。說(shuō)明:⑴FileName:指定要?jiǎng)?chuàng)建的自由表的名稱(chēng),新表中每一個(gè)字段的默認(rèn)值和null值支持與當(dāng)前選定表的設(shè)置是相同的。1.將當(dāng)前表的結(jié)構(gòu)復(fù)制成一個(gè)新表的結(jié)構(gòu)⑵FIELDSFieldList:只將FieldList指定的字段復(fù)制到新表。若省略FIELDSFieldList,則把所有字段復(fù)制到新表?!纠?-4】利用“學(xué)生.dbf”數(shù)據(jù)表,生成一個(gè)名為“xs1.dbf”的表,字段含有:學(xué)號(hào)、姓名、性別,出生日期。在命令窗口中依次輸入如下命令:USE學(xué)生COPYSTRUCTURETOxs1FIELDS學(xué)號(hào),姓名,性別,出生日期USExs1DISPLAYSTRUCTURE結(jié)果如圖4-15所示。可以看出,“xs1.dbf”表有4個(gè)字段。結(jié)構(gòu)描述文件(也稱(chēng)為“表的結(jié)構(gòu)延伸文件”)是一個(gè)特殊的表文件,它的結(jié)構(gòu)固定,由16個(gè)字段組成,各字段名字分別是:Field_Name、Field_Type、Field_Len、Field_Dec、Field_Null、……、Table_Cmt。它的記錄由每個(gè)字段的特性組成。用戶對(duì)表的結(jié)構(gòu)描述文件可以像對(duì)表記錄一樣方便地進(jìn)行修改。圖4-14表“xs1.dbf”的結(jié)構(gòu)2.將當(dāng)前表的結(jié)構(gòu)復(fù)制成結(jié)構(gòu)描述文件將當(dāng)前表的結(jié)構(gòu)復(fù)制成結(jié)構(gòu)描述文件的命令如下。
COPYSTRUCTUREEXTENDEDTOFileName[DATABASEDatabaseName[NAMELongTableName]][FIELDSFieldList]利用當(dāng)前表,創(chuàng)建一個(gè)表的結(jié)構(gòu)描述文件,它的字段包含當(dāng)前選定表的結(jié)構(gòu)信息。說(shuō)明:⑴FileName:指定要?jiǎng)?chuàng)建的新表。⑵DATABASEDatabaseName:指定要添加新表的數(shù)據(jù)庫(kù)。⑶NAMELongTableName:指定新表(數(shù)據(jù)庫(kù))的長(zhǎng)名稱(chēng)。表4-1結(jié)構(gòu)描述文件中字段的名稱(chēng)和內(nèi)容⑷FIELDSFieldList:指定在新表的記錄中只包含由FieldList指定的字段。若省略FIELDSFieldList,則所有字段在新表中都有一個(gè)記錄。⑸當(dāng)前選定表內(nèi)每個(gè)字段的信息被復(fù)制到新表的一條記錄中。新表的結(jié)構(gòu)在格式上固定,由16個(gè)字段組成,如表4-1所示?!纠?-5】利用“學(xué)生.dbf”數(shù)據(jù)表,生成一個(gè)名為“ext_學(xué)生.dbf”的表,然后打開(kāi)并顯示它結(jié)構(gòu)和記錄。USE學(xué)生COPYSTRUCTUREEXTENDEDTOext_學(xué)生database教學(xué)管理NAME學(xué)生表的結(jié)構(gòu)描述文件USEext_學(xué)生BROWSE&&瀏覽表顯示結(jié)果如圖4-15所示??梢钥闯?,表“ext_學(xué)生.dbf”的記錄剛好是表“學(xué)生.dbf”的9個(gè)字段。用戶可對(duì)“ext_學(xué)生.dbf”表進(jìn)行修改,然后使用CREATEFROM創(chuàng)建一個(gè)不同結(jié)構(gòu)的新表。具體的例子,請(qǐng)見(jiàn)本章習(xí)題中的上機(jī)題第6題。圖4-15表的結(jié)構(gòu)描述文件表復(fù)制是保證數(shù)據(jù)安全的措施之一,VisualFoxPro中提供了菜單方式和命令方式。菜單方式的操作方法是:當(dāng)表被打開(kāi)后,利用“文件”菜單的“導(dǎo)出”選項(xiàng)進(jìn)行。這里介紹命令法復(fù)制表。命令法復(fù)制表的命令格式如下:COPYTOFileName[DATABASEDatabaseName[NAMELongTableName]][FIELDSFieldList|FIELDSLIKESkeleton|FIELDSEXCEPTSkeleton][Scope][FORlExpression1][WHILElExpression2][[WITH]CDX]|[[WITH]PRODUCTION][[TYPE][SDF|XL5|DELIMITED[WITHDelimiter|WITHBLANK|WITHTAB]]]功能是:把當(dāng)前表文件復(fù)制成一個(gè)新表(或指定類(lèi)型的)文件。說(shuō)明:⑴FileName:指定要?jiǎng)?chuàng)建的新文件名。系統(tǒng)在復(fù)制.dbf文件時(shí),自動(dòng)復(fù)制.fpt文件。⑵DATABASEDatabaseName和NAMELongTableName:含義前面已敘述,這里不再重復(fù)。4.2.3復(fù)制表⑶FIELDSFieldList:指定要復(fù)制到新文件的字段。若省略FIELDSFieldLsit,則將所有字段復(fù)制到新文件。⑷FIELDSLIKESkeleton:復(fù)制Skeleton框架相匹配的表字段。⑸FIELDSEXCEPTSkeleton:復(fù)制時(shí),排除Skeleton框架相匹配的表字段。例如,命令:COPYTOmytableFIELDSLIKEA*,P*,表示在新文件中包含以字母A和P開(kāi)頭的所有字段。⑹Scope:指定要復(fù)制到新文件的記錄范圍。⑺FORlExpression1:復(fù)制邏輯條件lExpression1為“真”(.T.)的記錄到文件中。⑻WHILElExpression2:當(dāng)邏輯表達(dá)式lExpression2為“真”(.T.)時(shí)才復(fù)制記錄。⑼[WITH]CDX|[WITH]PRODUCTION:創(chuàng)建一個(gè)與已有表的結(jié)構(gòu)索引文件相同的新表結(jié)構(gòu)索引文件。CDX等同于PRODUCTION子句。若創(chuàng)建的文件不是數(shù)據(jù)表,則不要包含CDX或PRODUCTION。⑽TYPE:若要?jiǎng)?chuàng)建的文件不是表,則指定該文件類(lèi)型。指定文件類(lèi)型時(shí)不必包含TYPE關(guān)鍵字。⑾SDF|XL5:SDF,表示創(chuàng)建的文件是ASCII文本文件,其中記錄都有固定長(zhǎng)度,并以回車(chē)和換行符結(jié)尾。字段不分隔。若不包含擴(kuò)展名,則指定SDF文件的擴(kuò)展名為.TXT。XL5表示創(chuàng)建一個(gè)MicrosoftExcel5.0版的電子表格文件。當(dāng)前選定表中的每個(gè)字段變?yōu)殡娮颖砀裰械囊涣?,每條記錄變?yōu)橐恍小H舨话募U(kuò)展名,則新建電子表格的擴(kuò)展名指定為.XLS。⑿DELIMITED:創(chuàng)建分隔文件。分隔文件是ASCII文本文件,其中每條記錄以一個(gè)回車(chē)和換行符結(jié)尾。默認(rèn)的字段分隔符是逗號(hào)。因?yàn)樽址蛿?shù)據(jù)可能包含逗號(hào),所以另外用雙引號(hào)分隔字符型字段。除非另外指定,否則所有新建DELIMITED文件的擴(kuò)展名都指定為.TXT。⒀DELIMITEDWITHDelimiter:創(chuàng)建用字符代替引號(hào)分隔字符型字段的分隔文件。分隔字符型字段的字符用Delimiter指定。⒁DELIMITEDWITHBLANK:創(chuàng)建用空格代替逗號(hào)分隔字符型字段的分隔文件。⒂DELIMITEDWITHTAB:創(chuàng)建用制表符代替逗號(hào)分隔字符型字段的分隔文件。⒃若已設(shè)置了索引排序方式,則按主索引順序復(fù)制記錄。【例4-6】從表“學(xué)生.dbf”復(fù)制生成文件“xs2.dbf”和“xs2.fpt”。生成的新表“xs2.dbf”和原表“學(xué)生.dbf”的結(jié)構(gòu)及內(nèi)容完全相同。USE學(xué)生ExclusiveCOPYTOxs2USExs2DISPLAYSTRUCTURE &&顯示表“xs2.dbf”的結(jié)構(gòu)
【例4-7】利用“學(xué)生.dbf”表,復(fù)制生成一張新表“xs3.dbf”,新表中含有“學(xué)號(hào)”、“姓名”和“性別”3個(gè)字段,且性別為“男”的記錄。USE學(xué)生ExclusiveCOPYTOxs3FIELDS學(xué)號(hào),姓名,性別FOR性別="男"USExs3ExclusiveBROWSE新表“xs3.dbf”的瀏覽界面,如圖4-16所示。圖4-16“xs3.dbf”表的瀏覽界面圖4-17文件“xs.txt”的顯示結(jié)果【例4-8】利用“學(xué)生.dbf”表,復(fù)制生成一個(gè)“xs.txt”,文件中數(shù)據(jù)項(xiàng)用空格分隔。新文件中含有“學(xué)號(hào)”、“姓名”和“性別”3個(gè)字段,且性別為“男”的記錄。USE學(xué)生ExclusiveCOPYTOxs.txtFIELDS學(xué)號(hào),姓名,性別FOR性別="男"DELIMITEDWITHBLANKRUNnotepadxs.txt文件xs.txt內(nèi)容的結(jié)果如圖4-17所示。表記錄的操作,主要是指數(shù)據(jù)表記錄的添加、表記錄的定位、記錄的顯示、記錄的修改、記錄的刪除與恢復(fù)等有關(guān)操作。4.3記錄的操作數(shù)據(jù)表結(jié)構(gòu)創(chuàng)建完畢后,如果有必要,需要錄入數(shù)據(jù)。錄入數(shù)據(jù)時(shí),可利用如下幾種方式,一是立即輸入數(shù)據(jù)、菜單方式和命令方式。4.3.1輸入記錄1.立即輸入數(shù)據(jù)2.在“瀏覽”方式下追加數(shù)據(jù)當(dāng)數(shù)據(jù)表的結(jié)構(gòu)建立后,在出現(xiàn)的“現(xiàn)在輸入數(shù)據(jù)記錄嗎?”系統(tǒng)提示對(duì)話框中,若要立即輸入數(shù)據(jù),單擊“是”按鈕,出現(xiàn)記錄編輯窗口,參見(jiàn)圖3-13,即可開(kāi)始輸入數(shù)據(jù)。在“瀏覽”方式下給表中追加記錄的操作步驟如下:①打開(kāi)表文件。②打開(kāi)VisualFoxPro系統(tǒng)的“顯示”菜單,單擊“瀏覽”命令。③再次打開(kāi)“顯示”命令,單擊“追加方式”命令,即可在當(dāng)前表的末尾追加新記錄。如果在表的末尾只添加一條記錄,用戶也可按下快捷鍵Ctrl+Y,或執(zhí)行VisualFoxPro系統(tǒng)的“表”菜單中的“追加新記錄”命令。在關(guān)閉了表“瀏覽”或“編輯”窗口后,用戶也可使用命令A(yù)PPEND來(lái)給數(shù)據(jù)表追加數(shù)據(jù)。APPEND命令的使用語(yǔ)法如下:
APPEND[BLANK]說(shuō)明:當(dāng)命令帶有選項(xiàng)BLANK時(shí),則在表的尾部追加一條空白記錄,但不進(jìn)入編輯窗口。APPEND可在任何時(shí)候給表追加記錄。3.執(zhí)行APPEND命令追加數(shù)據(jù)圖4-18追加一條空白記錄【例4-9】使用APPENDBLANK命令為表“學(xué)生.dbf”追加一條空白記錄,追加空白記錄成功后,瀏覽界面如圖4-18所示。USE學(xué)生EXCLUSIVEAPPENDBLANKBROWSE &&瀏覽記錄可使用INSERT-SQL命令,且并非一定要將表打開(kāi)的情況下追加新記錄。命令的使用格式如下。
INSERTINTOdbf_name[(FieldName1[,FieldName2,...])]VALUES(eExpression1[,eExpression2,...])4.用INSERT-SQL命令逐條追加記錄或
INSERTINTOdbf_nameFROMARRAYArrayName|FROMMEMVAR該命令的功能是:在表尾追加一個(gè)包含指定字段值的記錄。說(shuō)明:⑴⑵FieldName1[,FieldName2,...]:要追加新記錄數(shù)據(jù)的各個(gè)字段名,如果缺省指全部字段。⑶VALUES(eExpression1[,eExpression2,...]):要追加新記錄的各個(gè)字段的值。⑷FROMARRAYArrayName:將一個(gè)數(shù)組中的數(shù)據(jù)插入到新記錄中。從第一個(gè)數(shù)組元素開(kāi)始,數(shù)組中的每個(gè)元素的內(nèi)容依次插入到記錄的對(duì)應(yīng)字段中。⑸FROMMEMVAR:把內(nèi)存變量的內(nèi)容插入到與它同名的字段中。如果某一字段不存在同名的內(nèi)存變量,則該字段為空。
【例4-10】利用INSERT-SQL命令向“學(xué)生.dbf”中追加一條新記錄,使該記錄的學(xué)號(hào)、姓名、性別、總分等四個(gè)字段值如下:s1101113、多啦A夢(mèng)、男、600。INSERTINTO學(xué)生(學(xué)號(hào),姓名,性別,總分)VALUES("s1101113","多啦A夢(mèng)","男",600)在VisualFoxPro中,數(shù)組和記錄之間可以實(shí)現(xiàn)數(shù)據(jù)交換。⑴將表中數(shù)據(jù)傳送給數(shù)組將表中數(shù)據(jù)傳送給數(shù)組時(shí),可以使用SCATTER命令,該命令的格式如下:SCATTER[FIELDSFieldNameList|FIELDSLIKESkeleton|FIELDSEXCEPTSkeleton][MEMO]TOArrayName|TOArrayNameBLANK|MEMVAR|MEMVARBLANK此命令的功能:從當(dāng)前記錄中把數(shù)據(jù)復(fù)制到一組內(nèi)存變量或數(shù)組中。說(shuō)明:①FIELDSFieldNameList:把指定的字段列表所對(duì)應(yīng)的字段內(nèi)容依次傳送給數(shù)組ArrayName。如果省此子句,則傳送所有字段。如果在字段列表后放一個(gè)關(guān)鍵字MEMO,則字段列表中可以包含備注字段。SCATTER總是忽略通用和圖片字段,②FIELDSLIKESkeleton|FIELDSEXCEPTSkeleton:用符指定需要傳送或排除的字段,如果包括LIKE子句,那么與Skeleton相匹配的字段被傳送到內(nèi)存變量或數(shù)組中。如果包括EXCEPTSkeleton,那么除了與Skeleton相匹配的字段外,其他所有字段都傳送到內(nèi)存變量或數(shù)組中。可以同時(shí)使用LIKE和EXCEPT子句。5.利用數(shù)組追加記錄③TOArrayName:指定接受記錄內(nèi)容的數(shù)組。從第一個(gè)字段起,SCATTER按順序?qū)⒚總€(gè)字段的內(nèi)容復(fù)制到數(shù)組的每個(gè)元素中。如果指定數(shù)組的元素比字段數(shù)多,則多余數(shù)組元素的內(nèi)容不發(fā)生變化。如果指定數(shù)組不存在,或者它的元素個(gè)數(shù)比字段數(shù)少,則系統(tǒng)自動(dòng)創(chuàng)建一個(gè)新數(shù)組,數(shù)組元素與對(duì)應(yīng)字段具有相同的大小和數(shù)據(jù)類(lèi)型。④TOArrayNameBLANK:創(chuàng)建一個(gè)空的數(shù)組,它的元素與表中字段具有相同大小和數(shù)據(jù)類(lèi)型,但沒(méi)有內(nèi)容。⑤MEMVAR:把數(shù)據(jù)傳送到一組內(nèi)存變量而不是數(shù)組中。新創(chuàng)建的內(nèi)存變量與對(duì)應(yīng)字段具有相同的名稱(chēng)、大小和數(shù)據(jù)類(lèi)型。注意:不要在使用MEMVAR時(shí)加入TO。如果加入了TO,VisualFoxPro創(chuàng)建一個(gè)名為MEMVAR的數(shù)組。⑥MEMVARBLANK:創(chuàng)建一組空內(nèi)存變量?!纠?-11】定義一個(gè)數(shù)組xs(5),然后再打開(kāi)“學(xué)生.dbf”,并將當(dāng)前記錄傳送給數(shù)組。在命令窗口中依次鍵入如下命令:DIMENSIONxs(5)USE學(xué)生SCATTERTOxsMEMODISPLAYMEMO命令執(zhí)行的結(jié)果是,將數(shù)組xs的元素個(gè)數(shù)自動(dòng)增加為8。⑵將數(shù)組數(shù)據(jù)傳送給當(dāng)前記錄可以使用GATHER命令將數(shù)組數(shù)據(jù)傳送給當(dāng)前記錄,命令的格式如下:
GATHERFROMArrayName|MEMVAR|NAMEObjectName[FIELDSFieldList|FIELDSLIKESkeleton|FIELDSEXCEPTSkeleton][MEMO]此命令的功能為:將當(dāng)前選定表中當(dāng)前記錄的數(shù)據(jù)替換為某個(gè)數(shù)組、內(nèi)存變量組或?qū)ο笾械臄?shù)據(jù)。說(shuō)明:①FROMArrayName:用一個(gè)數(shù)組它的數(shù)據(jù)替換當(dāng)前記錄中的數(shù)據(jù)。從數(shù)組的第一個(gè)元素起,各元素的內(nèi)容依次替換記錄中相應(yīng)字段的內(nèi)容。如果數(shù)組的元素少于表的字段數(shù)目,則忽略多余的字段。如果數(shù)組的元素多于表的字段數(shù)目,則忽略多余的數(shù)組元素。②MEMVAR:指定一組內(nèi)存變量或數(shù)組,把其中的數(shù)據(jù)復(fù)制到當(dāng)前記錄中。內(nèi)存變量的數(shù)據(jù)將傳送給與此內(nèi)存變量同名的字段。如果沒(méi)有與某個(gè)字段同名的內(nèi)存變量,則不替換此字段。注意:使用MEMVAR子句時(shí),GATHER不能帶FROM。③NAMEObjectName:指定某個(gè)對(duì)象,其屬性與表的字段同名。每個(gè)字段的內(nèi)容分別替換為與字段同名的屬性的值。如果沒(méi)有與某個(gè)字段同名的屬性,則此字段的內(nèi)容不做替換。④FIELDSFieldList:指定用數(shù)組元素或內(nèi)存變量的內(nèi)容替換字段的內(nèi)容。只替換在FieldList中指定的字段的內(nèi)容。⑤FIELDSLIKESkeleton|FIELDSEXCEPTSkeleton:可以有選擇地將字段內(nèi)容替換為數(shù)組元素或內(nèi)存變量的內(nèi)容。⑥MEMO:指定用數(shù)組元素或內(nèi)存變量的內(nèi)容替換備注字段的內(nèi)容。如果省略MEMO子句,GATHER命令將跳過(guò)備注字段?!纠?-12】創(chuàng)建一個(gè)含有5個(gè)數(shù)組元素的數(shù)組S,并令S(1)="s1101113",S(2)="夏日奈雪",S(3)="女",S(4)={^1992-12-26},S(5)=600。將數(shù)組S中各元素值復(fù)制到當(dāng)前記錄對(duì)應(yīng)的字段中。use學(xué)生MODIFYDATABASEappendblankdimensions(5)
S(1)="s1101113"S(2)="夏日奈雪"S(3)="女"S(3)="女"S(4)={^1992-12-26}S(5)=600gatherfromsfields學(xué)號(hào),姓名,性別,出生日期,總分將一個(gè)表或一個(gè)指定格式文件的記錄數(shù)據(jù)一次操作就部分或全部添加到當(dāng)前表文件的末尾,稱(chēng)為成批追加記錄。成批追加記錄的方法有兩個(gè),一是菜單方式,即利用VisualFoxPro系統(tǒng)菜單的“表”菜單中的“追加記錄”選項(xiàng)可實(shí)現(xiàn)記錄的成批追加。二是命令方式,這里介紹命令方式:成批追加的命令格式如下。APPENDFROMFileName|?[FIELDSFieldList][FORlExpression][[TYPE][DELIMITED[WITHDelimiter|WITHBLANK|WITHTAB|WITHCHARACTERDelimiter]|SDF|XL5[SHEETcSheetName]|XL8[SHEETcSheetName]]]此命令的功能是:從一個(gè)文件中讀入記錄,追加到當(dāng)前表的尾部。說(shuō)明:①FileName:指定追加數(shù)據(jù)的源文件名,如果給出的文件名不包含擴(kuò)展名,則將文件默認(rèn)為.DBF。源數(shù)據(jù)表中標(biāo)記為刪除的記錄也將添加到當(dāng)前表中。②FIELDSFieldList:要追加的字段列表,缺省時(shí)為全部字段。③FORlExpression:要追加記錄應(yīng)滿足的條件,缺省時(shí)為全部記錄。④TYPE:果指定的源文件類(lèi)型不是表,則必須指定文件類(lèi)型。6.成批追加記錄⑤DELIMITED:指定源文件為分隔數(shù)據(jù)文件(.TXT數(shù)據(jù)的格式)。⑥D(zhuǎn)ELIMITEDWITHDelimiter|BLANK|TAB|CHARACTERDelimiter:字符字段由(Delimiter)標(biāo)識(shí)、由空格符(BLANK)分隔字段、由制表符(TAB)來(lái)分隔、字段之間由給定的Delimiter分隔(如果Delimite是分號(hào),應(yīng)用引號(hào)括起來(lái))。
⑦SDF|XL5|XL8:可從一個(gè)標(biāo)準(zhǔn)ASCII文本文件,或MicrosoftExcel5.0或97版文件中導(dǎo)入數(shù)據(jù)。工作表的每列為表的一個(gè)字段,每行為表的一條記錄。工作表文件的擴(kuò)展名為.XLS?!纠?-13】完成以下二項(xiàng)操作。①首先利用“學(xué)生.dbf”數(shù)據(jù)表的結(jié)構(gòu),創(chuàng)建一個(gè)名為“app_學(xué)生.dbf”表,然后再使用成批追加命令為該表添加性別為“男”的同記錄。②使用例4-8中建立的xs.txt為xs1.dbf追加數(shù)據(jù)。在命令窗口中依次鍵入如下命令:USE學(xué)生COPYSTRUCTURETOapp_學(xué)生USEapp_學(xué)生APPENDFROM學(xué)生FOR性別="男"USExs1APPENDFROMxsDELIMITEDWITHBLANK表中每個(gè)記錄都有一個(gè)編號(hào),稱(chēng)為記錄號(hào),記錄號(hào)是根據(jù)輸入的先后次序自動(dòng)編號(hào)的。對(duì)于打開(kāi)的表,系統(tǒng)會(huì)分配一個(gè)指針,稱(chēng)為記錄指針。記錄指針指向的記錄稱(chēng)為當(dāng)前記錄。記錄的定位就是移動(dòng)記錄指針,使指針指向符合條件的記錄的過(guò)程。
使用RECNO()函數(shù)可以獲得當(dāng)前記錄的記錄號(hào)。很多時(shí)候需要移動(dòng)記錄指針,例如,想修改某個(gè)記錄時(shí)就需要將指針指向此記錄。表文件有兩個(gè)特殊的位置:文件頭(表起始標(biāo)記)和文件尾(表結(jié)束標(biāo)記)。文件頭在表中第一個(gè)記錄之前,當(dāng)記錄指針指向文件頭時(shí),函數(shù)BOF()的值為.T.;文件尾在最后一個(gè)記錄之后,當(dāng)記錄指針指向文件尾時(shí),函數(shù)EOF()的值為.T.,如圖4-21所示。4.3.2記錄的定位圖4-21表的結(jié)構(gòu)當(dāng)表以物理順序(無(wú)索引,參閱第5章)打開(kāi)時(shí),記錄指針指向第一條記錄,RECNO()返回1,BOF()返回.F.;當(dāng)表為空表時(shí),BOF()和EOF()都為.T.,函數(shù)RECNO()與RECCOUNT()分別為1和0。按指針的移動(dòng)分為絕對(duì)定位、相對(duì)定位、移動(dòng)記錄指針到表的首/末記錄三種。按指針操作方式又可以把記錄的定位分為命令定位和菜單定位法、命令定位法和條件定位法等幾種方法。使用菜單移動(dòng)記錄指針的操作步驟如下:①打開(kāi)需要瀏覽或編輯的數(shù)據(jù)表。②打開(kāi)“顯示”菜單,單擊“瀏覽”命令,顯示表的“瀏覽”窗口。③打開(kāi)“表”菜單,單擊“轉(zhuǎn)到記錄”命令,選擇移動(dòng)記錄指針的方式,如圖4-22所示。1.使用菜單方式移動(dòng)記錄指針圖4-22轉(zhuǎn)到記錄菜單圖4-23“定位記錄”對(duì)話框當(dāng)單擊“定位”命令后,打開(kāi)“定位記錄”對(duì)話框,如圖4-23所示。在“作用范圍”下拉列表框中定位記錄的范圍,F(xiàn)OR和WHILE中輸入定位的條件。然后單擊“定位”按鈕,系統(tǒng)在給定的范圍內(nèi)查找第一條符合條件的記錄,并將指針定位到該記錄。⑴絕對(duì)定位絕對(duì)定位是指將指針定位在指定記錄號(hào)的記錄上,命令格式如下:
GO|GOTO[RECORD]nRecordNumber[|TOP|BOTTOM][INnWorkArea|INcTableAlias]說(shuō)明:①RECORDnRecordNumber:省略GO|GOTO命令而只指定記錄號(hào),則只能在當(dāng)前工作區(qū)中移動(dòng)記錄指針。②INnWorkArea|INcTableAlias:記錄指針在指定表所在的工作區(qū)或表的別名中移動(dòng),無(wú)此子句,表示在當(dāng)前表中定位。③TOP|BOTTOM:將記錄指針定位在表的第一個(gè)記錄上或最后一個(gè)記錄上。如果此表使用升序索引,則第一個(gè)記錄是關(guān)鍵字值最小(大)的記錄;如果使用降序索引,則第一個(gè)記錄是關(guān)鍵字值最大(小)的記錄?!纠?-14】用GO或GOTO命令定位記錄的示例。USE學(xué)生 &&打開(kāi)表“學(xué)生.dbf”?RECNO() &&顯示當(dāng)前記錄號(hào)1GOBOTTOM&&指針指向最后1條記錄,當(dāng)前的記錄為第10個(gè)記錄?RECNO() &&顯示記錄號(hào)12?EOF() &&因沒(méi)有到文件末尾,顯示.F.……2.使用命令方式移動(dòng)記錄指針⑵相對(duì)定位記錄的定位可以使用SKIP命令進(jìn)行相對(duì)的定位,命令的使用格式如下SKIP[nRecords][INnWorkArea|cTableAlias]功能:使記錄指針在表中,在當(dāng)前記錄的位置上向前移動(dòng)或向后移動(dòng)。說(shuō)明:nRecords、INnWorkArea|cTableAlias:意義同上。
【例4-15】用SKIP命令定位記錄的示例。USE學(xué)生
&&以獨(dú)占方式打開(kāi)表xsqk.dbf?RECNO(),BOF() &&顯示1、.F.。表打開(kāi)時(shí),當(dāng)前記錄是第1條記錄SKIP-1 &&記錄指針向文件頭移動(dòng)一個(gè)位置?RECNO(),BOF() &&顯示1、.T.SKIP5 &&指針從第一個(gè)記錄開(kāi)始……3.使用LOCATE─CONTINUE命令進(jìn)行查找定位記錄查找定位的命令如下:
LOCATEFORlExpression1[Scope][WHILElExpression2]該命令的功能是:按順序查找表(也可查找索引表)從而找到滿足指定邏輯表達(dá)式的第一個(gè)記錄。說(shuō)明:LOCATE發(fā)現(xiàn)一個(gè)滿足條件的記錄之后,再執(zhí)行CONTINUE,從而在表的剩余部分尋找其他滿足條件的記錄。當(dāng)執(zhí)行CONTINUE時(shí),搜索操作從滿足條件的記錄的下一條記錄開(kāi)始繼續(xù)執(zhí)行。可重復(fù)執(zhí)行CONTINUE,直到到達(dá)范圍邊界或表尾。【例4-16】按順序查詢并顯示表“學(xué)生.dbf”中前兩二位團(tuán)員。USE學(xué)生ExclusiveLOCATEFOR團(tuán)員=.T. &&按順序查找第1個(gè)團(tuán)員記錄?EOF(),FOUND() &&分別顯示.F.和.T.?學(xué)號(hào),姓名,性別,總分,團(tuán)員CONTINUE &&繼續(xù)查找下一個(gè)團(tuán)員記錄
……4.3.3記錄的顯示記錄的顯示方法有菜單法和命令法,其中,菜單法顯示表記錄的操作方法是,表打開(kāi)后,通過(guò)“顯示”菜單的“瀏覽”選項(xiàng)即可以實(shí)現(xiàn)。一般情況下,我們使用LIST|DISPLAY命令來(lái)顯示記錄信息。LIST|DISPLAY命令的使用格式如下:DISPLAY|LIST[[FIELDS]FieldList][Scope][FORlExpression1][WHILElExpression2][OFF][TOPRINTER|TOFILEFileName]說(shuō)明:在VisualFoxPro主窗口或用戶自定義窗口中顯示與當(dāng)前表有關(guān)的信息。DISPLAY分屏顯示,而LIST則是以滾屏(連續(xù))顯示信息。【例4-17】在命令窗口中,依次鍵入如下命令,觀察在VsualFoxpro主窗口中顯示表“學(xué)生.dbf”記錄信息。略,參見(jiàn)P140記錄的“瀏覽”窗口采用二給表形式每行顯示一條記錄,使用非常方便。在瀏覽過(guò)程中,用戶可對(duì)記錄進(jìn)行追加、編輯、修改和刪除等操作。只有當(dāng)前表,才能使用“瀏覽”窗口。有多種方法打開(kāi)記錄的“瀏覽”窗口,如項(xiàng)目管理器方式、菜單方式、數(shù)據(jù)庫(kù)設(shè)計(jì)器方式和命令方式等。①項(xiàng)目管理器方式:選擇要操作的表,單擊“瀏覽“按鈕。②菜單方式:打開(kāi)表后,執(zhí)行VisualFoxpro系統(tǒng)“顯示”菜單中的“瀏覽”命令。③數(shù)據(jù)庫(kù)設(shè)計(jì)器方式:在數(shù)據(jù)庫(kù)設(shè)計(jì)器中選擇要操作的表,右擊鼠標(biāo),執(zhí)行快捷菜單中的“瀏覽“命令。打開(kāi)的“瀏覽”窗口如圖4-24所示。4.3.4記錄的瀏覽窗口圖4-24“瀏覽”窗口用戶可以在記錄瀏覽窗口做以下動(dòng)作。1.調(diào)整字段顯示寬度;2.調(diào)整字段顯示高度;3.調(diào)整字段顯示順序;4.拆分瀏覽窗口;5.在瀏覽窗口中修改記錄;6.在瀏覽窗口中刪除記錄。4.3.5記錄的修改表中的記錄可以隨時(shí)修改,以實(shí)現(xiàn)表數(shù)據(jù)和現(xiàn)實(shí)世界的一致。常用表記錄的修改可分為編輯修改、瀏覽修改、替換修改、SQL修改四種方式。編輯修改的命令為EDIT和CHANGE,是一種全屏幕的修改,在編輯修改窗口中,每個(gè)記錄的每一個(gè)字段各占一行。在菜單方式下表數(shù)據(jù)的編輯修改方法是,當(dāng)表處于顯示狀態(tài)時(shí),利用VisualFoxPro系統(tǒng)菜單中“顯示”菜單的“編輯”選項(xiàng)來(lái)進(jìn)行。EDIT和CHANGE命令的常用使用格式如下。
EDIT[FIELDSFieldList][Scope][FORlExpression1][WHILElExpression2][FONTcFontName[,nFontSize]][STYLEcFontStyle][FREEZEFieldName][NOAPPEND][NODELETE][NOEDIT|NOMODIFY][NOMENU]
利用EDIT和CHANGE命令修改完指定的記錄后,自動(dòng)保存并關(guān)閉編輯窗口(也可按組合鍵Ctrl+W)。按下Ctrl+Q放棄修改退出。1.EDIT/CHANGE編輯命令說(shuō)明:⑴FIELDSFieldList、FORlExpression1、WHILElExpression2:意義與前面相同。⑵FREEZEFieldName:在編輯窗口中只允許更改FieldName中指定的一個(gè)字段。其余字段能夠顯示,但不能編輯。⑶FONTcFontName[,nFontSize]:指定數(shù)據(jù)的顯示字體和大小。⑷STYLEcFontStyle:指定編輯時(shí),數(shù)據(jù)的顯示樣式。如:“B”代表粗體、“I”代表斜體等。⑸NOMENU:VisualFoxPro系統(tǒng)菜單欄將不出現(xiàn)“表”菜單。圖4-28使用EDIT/CHANGE編輯記錄【例4-18】用EDIT命令對(duì)“學(xué)生.dbf”從第3條記錄開(kāi)始以10號(hào)、楷體、加粗的形式顯示編輯其“出生日期”,結(jié)果如圖4-28所示。USE學(xué)生EXCLUSIVEGO3EDITFREEZE出生日期FONT“楷體”,10STYLE“B”
BROWSE命令窗口,集顯示、修改、查詢、刪除、添加記錄等功能于一體。與EDIT窗口不同,在BROWSE窗口每條記錄各占一行,因此窗口可顯示的記錄更多,光標(biāo)移動(dòng)更方便,并且它的窗口功能比EDIT更強(qiáng)大,是VisualFoxPro交互式命令中最常用的命令之一。由于BROWSE命令的子句非常多,我們這里只能給出一些常用選項(xiàng)。常用的瀏覽命令格式如下。
BROWSE[FIELDSFieldList][FONTcFontName[,nFontSize]][STYLEcFontStyle][FORlExpression1[REST]][FREEZEFieldName][LAST|NOINIT][LOCKnNumberOfFields][NOAPPEND][NODELETE][NOEDIT|NOMODIFY][NOMENU][TITLEcTitleText][VALID[:F]lExpression2[ERRORcMessageText]][WHENlExpression3]命令功能是:打開(kāi)瀏覽窗口,對(duì)當(dāng)前表從當(dāng)前記錄位置開(kāi)始進(jìn)行瀏覽。2.BROWSE瀏覽命令說(shuō)明:⑴LOCKnNumberOfFields:鎖定一個(gè)在瀏覽窗口左邊總能看到的字段的編號(hào)。⑵TITLEcTitleText:表示以cTitleText的內(nèi)容作為標(biāo)題在瀏覽窗口標(biāo)題欄顯示,無(wú)則顯示表文件名。⑶VALID[:F]lExpression[ERRORcMessageText]:每當(dāng)對(duì)當(dāng)前記錄進(jìn)行了修改而且想將光標(biāo)移動(dòng)到另一條記錄時(shí),VALID子句才執(zhí)行一次。但如果僅修改了備注型字段,VALID子句卻不執(zhí)行。
⑷WHENlExpression2:當(dāng)光標(biāo)要移向其它記錄時(shí)計(jì)算出一個(gè)移動(dòng)條件。若為真(.T.),用戶可以修改移到的記錄。⑸REST:若有FOR子句,BROWSE命令在打開(kāi)瀏覽窗口時(shí),記錄指針從當(dāng)前位置移向表頂部。若不包含REST,默認(rèn)情況下,BROWSE將記錄指針?lè)胖迷诒眄敳?。⑹LAST|NOINIT:保存瀏覽窗口外觀的任何變更,下次使用時(shí),瀏覽窗口和上次窗口的樣式相同。⑺FIELDS子句的字段列表還包含對(duì)顯示于瀏覽窗口中的字段進(jìn)行特殊處理的選項(xiàng),常用的處理參數(shù)有::R:指定字段為只讀字段,可顯示但不可編輯字段包含的數(shù)據(jù)。:H=cHeadingText:用cHeadingText指定的自定義標(biāo)頭替換默認(rèn)字段名。默認(rèn)情況下,在瀏覽窗口中用字段名作列標(biāo)頭。⑻對(duì)于BROWSE中的其他子句,同EDIT/CHANGE命令。【例4-19】用BROWSE命令瀏覽表“學(xué)生.dbf”中的記錄。USE學(xué)生ExclusiveBROWSE
【例4-20】接上題,從第3條記錄開(kāi)始,用BROWSE命令瀏覽表“學(xué)生.dbf”中所有非團(tuán)員的記錄,記錄指針不移動(dòng)。BROWSERESTFORNOT團(tuán)員 【例4-21】接上題,使用BROWSE命令瀏覽表“學(xué)生.dbf”,以10號(hào)、楷體、加粗的形式顯示瀏覽窗口。要求如下:①顯示的字段有:學(xué)號(hào),姓名,性別,出生日期和總分②只編輯其“出生日期”,并用“出生年月”替換標(biāo)題字段名,③同時(shí)鎖定學(xué)號(hào)和姓名等前面2個(gè)字段。BROWSELOCK2Fields學(xué)號(hào),姓名,性別,出生日期:H="出生年月",總分FREEZE出生日期FONT"楷體",10STYLE"B"顯示的結(jié)果如圖4-31所示。
圖4-31BROWSE的一個(gè)較復(fù)雜的使用替換修改有菜單方式和REPLACE替換命方式。菜單操作的方法是:當(dāng)表處于顯示狀態(tài)時(shí),利用VisualFoxpro系統(tǒng)菜單的“表”菜單中的“替換字段”命令進(jìn)行。REPLACE替換命令使用起來(lái),更加快捷方便,該命令的格式如下:
REPLACEFieldName1WITHeExpression1[ADDITIVE][,FieldName2WITHeExpression2[ADDITIVE]]...[Scope][FORlExpression1][WHILElExpression2][INnWorkArea|cTableAlias]功能:在指定“范圍”內(nèi)對(duì)指定字段用“表達(dá)式”的值成批修改。說(shuō)明:⑴Scope、FORlExpression1、WHILElExpression2:當(dāng)它們?nèi)咳笔r(shí),表示僅修改當(dāng)前一條記錄。⑵FieldNamenWITHExpressionn:用表達(dá)式Expressionn的值修改對(duì)應(yīng)字段FieldNamen的值,(n=1,2…,N)。⑶[ADDITIVE],僅對(duì)備注型字段有效,選之,則將表達(dá)式的內(nèi)容追加到備注字段的原內(nèi)容之后,如不選則替換掉原來(lái)的內(nèi)容。⑷replace命令用表達(dá)式的值替換字段中的數(shù)據(jù)。在替換未選定工作區(qū)中的字段時(shí),字段前面必須加上表的別名。⑸如果記錄指針已在當(dāng)前工作區(qū)中文件的末端,而指定的字段在另一個(gè)工作區(qū)中,則不發(fā)生任何替換。
3.REPLACE成批替換命令【例4-21】在“學(xué)生.dbf”表中,增加一個(gè)“獎(jiǎng)勵(lì)分”,數(shù)據(jù)類(lèi)型為“N(4.1)”。然后,根據(jù)計(jì)算獎(jiǎng)勵(lì)分,條件是:總分大于585分,獎(jiǎng)勵(lì)分=總分×10%,結(jié)果如圖4-22所示。ALTERTABLEjl_學(xué)生ADD獎(jiǎng)勵(lì)分N(4,1)REPLACEALL獎(jiǎng)勵(lì)分WITH總分*0.10FOR總分>=585BROWSEBROWSE
UPDATE-SQL也能實(shí)現(xiàn)表記錄的成批規(guī)律修改,其命令格式如下。
UPDATE[DatabaseName1!]TableName1SETColumn_Name1=eExpression1[,Column_Name2=eExpression2...]WHEREFilterCondition1[AND|ORFilterCondition2...]]該命令的功能是:以新值更新表中的記錄。說(shuō)明:⑴TableName1:指定要更新記錄的表。⑵SETColumn_Name1=eExpression1…:指定要更新的列以及這些列的新值。⑶WHERE...:記錄替換條件。⑷UPDATE-SQL命令只能用來(lái)更新單個(gè)表中的記錄。圖4-32替換結(jié)果瀏覽4.UPDATE-SQL更新命令【例4-22】在“學(xué)生.dbf”中,將所有總分大于580的男性學(xué)生的性別用“01”替換。UPDATE學(xué)生SET性別='01'WHERE總分>580and性別='男'5.INSERT插入命令在VisualFoxpro中,INSERT命令可以在當(dāng)前記錄處插入一條新記錄,其命令格式如下:
INSERT[<BEFORE>][<BLANK>]命令功能是:在當(dāng)前記錄之后(前)插入一條記錄(或空白記錄)。說(shuō)明:⑴必須事先打開(kāi)表,且移動(dòng)記錄指針到要插入的位置。
⑵BEFORE:把新記錄插入到當(dāng)前記錄之前,省略該子句,插入到當(dāng)前記錄之后。⑶BLANK:插入一條空記錄,但不會(huì)出現(xiàn)記錄編輯窗口,需要其他命令填入數(shù)據(jù)?!纠?-23】在“學(xué)生.dbf”中的第5條記錄之前插入一條空白記錄。GO5INSERTBEFOREBLANK在VisualFoxPro中,刪除記錄的方法是:先邏輯刪除,當(dāng)用戶確定后,再物理刪除記錄。若表有邏輯刪除的記錄時(shí),用DISPLAY或LIST命令顯示時(shí),在第一個(gè)字段名前有一個(gè)邏輯刪除標(biāo)記(*)。物理刪除是指刪除的的記錄不能恢復(fù)。
4.4刪除與恢復(fù)記錄邏輯刪除記錄就是給要?jiǎng)h除的記錄加上一個(gè)刪除標(biāo)記,給記錄加刪除標(biāo)記可通過(guò)菜單方式或命令方式來(lái)實(shí)現(xiàn)。被加上刪除標(biāo)記的記錄,就是已完成邏輯刪除操作的記錄。在對(duì)表進(jìn)行操作時(shí),如果系統(tǒng)環(huán)境設(shè)置為SETDELETEON狀態(tài),有刪除標(biāo)記的記錄可視為已不存在。4.4.1邏輯刪除表中的記錄⑴邏輯刪除一條記錄【例4-24】在表“學(xué)生.dbf”中的第2條記錄上做刪除標(biāo)記。操作步驟如下:①打開(kāi)表“學(xué)生.dbf”。②打開(kāi)“顯示”菜單,單擊“瀏覽”命令,打開(kāi)“瀏覽”窗口。③單擊第2條記錄前“刪除標(biāo)記欄”處的白色方框,變?yōu)楹谏?/p>
”,表示邏輯刪除,參見(jiàn)圖4-14所示。1.用菜單方式邏輯刪除記錄
⑵邏輯刪除多條記錄操作步驟如下:①通過(guò)瀏覽方式打開(kāi)表文件。②執(zhí)行“表”菜單中的“刪除記錄…”命令,如圖4-24所示。③在“作用范圍”中設(shè)定刪除記錄的范圍,輸入FOR或WHILE的刪除條件。圖4-24“刪除”對(duì)話框使用DELETE命令刪除記錄的格式如下:
DELETE[Scope][FORlExpression1][WHILElExpression2]該命令的功能是:為表中指定范圍內(nèi)滿足條件的記錄加上刪除標(biāo)記。說(shuō)明:⑴當(dāng)Scope、FOR|WHILE全缺省時(shí),僅邏輯刪除當(dāng)前一條記錄。⑵⑶邏輯刪除成功后,可使用DELETED()函數(shù)進(jìn)行測(cè)試,如果當(dāng)前記錄邏輯刪除,則該函數(shù)值為真(.T.),否則為假(.F.)。DELETED()函數(shù)使用格式是:DELETED([cTableAlias|nWorkArea])。2.用DELETE命令邏輯刪除記錄③在“作用范圍”中設(shè)定刪除記錄的范圍,輸入FOR或WHILE的刪除條件。④單擊“刪除”按鈕,即可刪除所選擇的記錄?!纠?-25】顯示邏輯刪除了性別為“女”記錄信息,如圖4-25所示。DELETEALLFOR性別=’女’DISPLAYALL圖4-25用DISPLAY或LIST顯示邏輯刪除的記錄做了刪除標(biāo)記的的記錄能否繼續(xù)參與表的操作,這取決于SETDELETED命令的狀態(tài)。該命令的格式如下:SETDELETEOFF|ON功能:指定系統(tǒng)以及有關(guān)命令是否處理標(biāo)有刪除標(biāo)記的記錄。說(shuō)明:ON:表示將加了刪除標(biāo)記的記錄視為“無(wú)效記錄”。對(duì)記錄進(jìn)行操作時(shí),包括關(guān)聯(lián)表中的記錄,“無(wú)效記錄”一律不參與操作。3.用SETDELETED命令隱藏邏輯刪除的記錄圖4-27SETDELETEDON狀態(tài)顯示結(jié)果【例4-26】接上題,分析SETDELETEOFF|ON的作用USE學(xué)生SETDELETEONBROWSE &&僅顯示無(wú)刪除標(biāo)記的記錄,結(jié)果如圖4-27所示。
SQL的中的DELETE命令也可實(shí)現(xiàn)記錄的邏輯刪除。此命令的使用格式如下:DELETEFROMTableName[WHEREFilterCondition1[AND|ORFilterCondition2...]]該命令的功能是:對(duì)指定的表TableName,邏輯刪除符合條件的記錄。其中,WHEREFilterCondition1[AND|ORFilterCondition2...]是指刪除條件,缺省時(shí)為全部記錄。【例4-27】利用DELETE-SQL命令將“學(xué)生.dbf”中所有1993年前出生的男同學(xué)邏輯刪除。DELETEFROM學(xué)生WHERE性別=’男’ANDYEAR(出生日期)<19934.使用DELETE-SQL命令邏輯刪除記錄恢復(fù)邏輯刪除就是取消刪除標(biāo)記,方法有菜單方式、BROWSE瀏覽窗口方式和和命令方式等。其中BROWSE窗口方式的使用方法,不再細(xì)述。4.4.2恢復(fù)表中邏輯刪除的記錄使用菜單方式恢復(fù)邏輯刪除記錄的操作步驟如下:⑴打開(kāi)表的“瀏覽”窗口。1.用菜單方式恢復(fù)記錄⑵打開(kāi)“表”菜單,單擊“恢復(fù)記錄”命令,打開(kāi)“恢復(fù)記錄”對(duì)話框,如圖4-28所示。⑶選擇作用范圍,并輸入恢復(fù)記錄條件表達(dá)式。⑷單擊“恢復(fù)記錄”按鈕,即可恢復(fù)記錄。圖4-28“恢復(fù)記錄”對(duì)話框使用命令RECALL,來(lái)快速恢復(fù)邏輯刪除的記錄。其命令格式如下:
RECALL[Scope][FORlExpression1][WHILElExpression2]該命令的功能是:恢復(fù)當(dāng)前表中符合條件的帶有刪除標(biāo)記的記錄。說(shuō)明:當(dāng)FOR和WHILE同時(shí)存在時(shí),優(yōu)先選擇WHILE所設(shè)定的條件。注意:用戶一旦對(duì)文件使用了PACK或ZAP命令,那么所有帶刪除標(biāo)記的記錄將不可恢復(fù)?!纠?-28】對(duì)例4-25邏輯刪除的記錄,恢復(fù)記錄號(hào)6之前的記錄。RECALLALLFORRECNO()<=62.用命令方式恢復(fù)記錄物理刪除又稱(chēng)為永久刪除。在物理刪除記錄之前,一般要求先邏輯刪除記錄,即給需要?jiǎng)h除的記錄加上刪除標(biāo)記。物理刪除記錄的菜單操作方式是執(zhí)行“表”菜單中的“徹底刪除”命令進(jìn)行。物理刪除的命令有PACK和ZAP兩個(gè)。4.4.3物理刪除表中的記錄操作步驟如下:①打開(kāi)表“瀏覽”窗口。②打開(kāi)“表”菜單,單擊“徹底刪除”命令,打開(kāi)提示信息框,如圖4-29所示。③單擊“是”按鈕,即可將邏輯刪除的記錄進(jìn)行物理刪除。1.用菜單方式物理刪除記錄2.用命令方式物理刪除記錄⑴PACK命令記錄的物理刪除命令PACK的使用格式如下:
PACK
該命令的功能是:對(duì)以獨(dú)占方式打開(kāi)的當(dāng)前表中永久刪除標(biāo)有刪除標(biāo)記的記錄,減少與該表相關(guān)的備注文件(.fpt)所占用的空間。圖4-29“刪除”提示信息對(duì)話框【例4-29】利用例4-27先復(fù)制一個(gè)和“學(xué)生.dbf”相同表文件“學(xué)生1.dbf”,然后物理刪除“學(xué)生1.dbf”被做了刪除標(biāo)記的記錄。USE學(xué)生COPYTO學(xué)生1SELECT2USE學(xué)生1P(pán)ACKBROWSE最后命令序列執(zhí)行的結(jié)果如圖4-30所示。
⑵ZAP命令ZAP命令與PACK命令不一樣的是,ZAP命令清空表中的全部記錄,僅留表的結(jié)構(gòu)。ZAP命令格式如下:
ZAP[INnWorkArea|cTableAlias]ZAP命令等價(jià)于DELETEALL和PACK聯(lián)用,但ZAP速度更快。
【例4-30】在例4-29的基礎(chǔ)上清空“學(xué)生1.dbf”中的全部記錄,然后瀏覽該表。USE學(xué)生1SETSAFETYOFF&&執(zhí)行ZAP命令不再出現(xiàn)“信息提示”對(duì)話框ZAPBROWSE圖4-30使用PACK命令物理刪除記錄1.用菜單方式設(shè)置字段過(guò)濾表過(guò)濾(Fi
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 南京江蘇正德職業(yè)技術(shù)學(xué)院公開(kāi)招聘人員筆試歷年參考題庫(kù)附帶答案詳解
- 廣東舞蹈戲劇職業(yè)學(xué)院《工程項(xiàng)目管理一》2023-2024學(xué)年第二學(xué)期期末試卷
- 濰坊職業(yè)學(xué)院《J2E應(yīng)用開(kāi)發(fā)》2023-2024學(xué)年第二學(xué)期期末試卷
- 瀟湘職業(yè)學(xué)院《自然災(zāi)害與防治》2023-2024學(xué)年第二學(xué)期期末試卷
- 西安醫(yī)學(xué)院《設(shè)計(jì)管理與營(yíng)銷(xiāo)(C)》2023-2024學(xué)年第二學(xué)期期末試卷
- 許昌陶瓷職業(yè)學(xué)院《理論生態(tài)學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 寧夏工商職業(yè)技術(shù)學(xué)院《C語(yǔ)言》2023-2024學(xué)年第二學(xué)期期末試卷
- 云南中醫(yī)藥大學(xué)《廣告策劃與創(chuàng)意》2023-2024學(xué)年第二學(xué)期期末試卷
- 北京農(nóng)學(xué)院《水工程測(cè)量》2023-2024學(xué)年第二學(xué)期期末試卷
- 黑龍江林業(yè)職業(yè)技術(shù)學(xué)院《地形圖應(yīng)用學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2024考研408真題+答案
- 靜脈治療護(hù)理技術(shù)操作標(biāo)準(zhǔn)解讀
- 一起干活安全協(xié)議書(shū)
- 從心理學(xué)角度談醫(yī)患溝通
- 賽力斯招聘在線測(cè)評(píng)題
- 《中醫(yī)基礎(chǔ)理論》課程教案
- 酒店裝修工程保修條款
- 2023年浙江省金華市義烏市小升初英語(yǔ)試卷
- 高強(qiáng)瓦楞原紙產(chǎn)品商業(yè)計(jì)劃書(shū)
- T-CTSS 86-2024 原味茶飲料標(biāo)準(zhǔn)
- 體育館項(xiàng)目總體規(guī)劃方案
評(píng)論
0/150
提交評(píng)論