課件Visual FoxPro數(shù)據(jù)庫-4課件_第1頁
課件Visual FoxPro數(shù)據(jù)庫-4課件_第2頁
課件Visual FoxPro數(shù)據(jù)庫-4課件_第3頁
課件Visual FoxPro數(shù)據(jù)庫-4課件_第4頁
課件Visual FoxPro數(shù)據(jù)庫-4課件_第5頁
已閱讀5頁,還剩46頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第4章數(shù)據(jù)表的基本操作本章學(xué)習(xí)目標(biāo)掌握工作區(qū)的概念與作用。掌握數(shù)據(jù)表的打開與關(guān)閉方法。掌握表中記錄錄入的方式和添加記錄的各種命令方法。熟悉表編輯記錄的各種方式和命令;掌握表記錄的刪除和恢復(fù);設(shè)置表的過濾方法等。4.1表的打開與關(guān)閉 4.2表的操作4.3記錄的操作4.4刪除與恢復(fù)記錄本章目錄4.5表的過濾4.1.1工作區(qū)的概念4.1表的打開與關(guān)閉表只有打開后方可使用,操作結(jié)束后也應(yīng)及時關(guān)閉以確保數(shù)據(jù)的安全。對數(shù)據(jù)庫表來說,即使打開了數(shù)據(jù)庫,包含在數(shù)據(jù)庫中的表也不會自動打開,經(jīng)過打開步驟。工作區(qū)(WorkArea)是為當(dāng)前正在使用的表開辟的一個內(nèi)存區(qū)域。系統(tǒng)提供了多達(dá)32767個工作區(qū),工作區(qū)號用1~32767表示。正在使用的工作區(qū)稱為當(dāng)前工作區(qū)。系統(tǒng)啟動后,默認(rèn)1號工作區(qū)為當(dāng)前工作區(qū)。

一個工作區(qū)只能打開一個表,如果再打開第二個表,系統(tǒng)將自動關(guān)閉第一個表。這種只能對一個表進(jìn)行的操作稱為單表操作。如果需要同時使用多個表,則需在不同的工作區(qū)分別打開,這種操作稱為多表操作。1.工作區(qū)的概念圖4-1“系統(tǒng)”提示信息一般情況下,一個表文件也不能在一個以上的工作區(qū)同時打開,否則將出現(xiàn)如圖4-1所示的“文件正在使用”的系統(tǒng)提示信息。

每個工作區(qū)為打開的表文件設(shè)置一個記錄指針,在一般情況下它們各自獨(dú)立移動,互不干擾。每個表打開后都有兩個默認(rèn)的別名,一個是表名自身,另一個是工作區(qū)所對應(yīng)的別名。編號為1~10的前10個工作區(qū)的默認(rèn)別名用A~J這10個字母表示,工作區(qū)11~32767中指定的別名是W11到W32767。另外,還可以在USE命令中使用ALIAS子句來指定別名。

注意:單個字母A~J不能用來作為表的文件名,它是系統(tǒng)的保留字。別名也可作為工作區(qū)的標(biāo)識。2.工作區(qū)選擇命令當(dāng)使用一個工作區(qū)時,就需要使用SELECT命令選擇一個工作區(qū),其命令格式如下:

SELECTnWorkArea|cTableAlias|0說明:①nWorkArea:指定要激活的工作區(qū),取值范圍:1~32767;也可使用A~J、W11~W32767。②cTableAlias:此參數(shù)是打開表的別名,如果表沒有起別名,則可以用表名代替別名。③0:激活尚未使用的工作區(qū)中編號最小的那一個,做為當(dāng)前工作區(qū)。說明:⑴函數(shù)SELECT()可返回當(dāng)前工作區(qū)號;函數(shù)ALIAS([nWorkArea])可返回當(dāng)前工作區(qū)或指定的工作區(qū)別名。

⑵當(dāng)前工作區(qū)的表文件的字段名可以被直接引用,但從當(dāng)前工作區(qū)訪問非當(dāng)前工作區(qū)中打開表的字段時只能讀不能寫,且使用如下格式:

alias.field或者alias->field打開表的方法有菜單方式和命令方式兩種。4.1.2打開表【例4-1】用菜單方式打開學(xué)生情況表“學(xué)生.dbf”。操作步驟略,參見P124。1.使用菜單方式2.使用命令方式可使用USE命令打開表,該命令的使用格式如下:

USE[[DatabaseName!]dbf_Name|?][ALIAS][INnWorkArea|cTableAlias][AGAIN][EXCLUSIVE][SHARED][NOUPDATE]說明:⑴[DatabaseName!]dbf_Name|?:指定要打開的表的名稱,“?”指定調(diào)出文件對話框供選擇要打開的表。表文件名可以帶盤符和路徑,擴(kuò)展名.dbf可省略。⑵INnWorkArea:指定要打開表所在的工作區(qū)。帶有IN子句和工作區(qū)編號的USE命令,可以關(guān)閉指定工作區(qū)中的表。在IN子句中0可作為工作區(qū)號,指定0可以在最低可用的工作區(qū)中打開表。例如,如果工作區(qū)1至工作區(qū)10中都有表打開,那么下面的命令將在工作區(qū)11中打開“通訊.dbf”表:USE通訊IN0⑶INcTableAlias:指定在當(dāng)前工作區(qū)中打開表。打開表的別名用cTableAlias指定。省略這兩個參數(shù)時,則在當(dāng)前工作區(qū)中打開表。⑷AGAIN:可在另一個工作區(qū)中打開一個已打開的表。再次打開的表被賦予工作區(qū)的默認(rèn)別名。⑸EXCLUSIVE:表以獨(dú)占方式打開。使用USE命令不能打開其他用戶以獨(dú)占方式打開的數(shù)據(jù)庫。⑹SHARED:表以共享方式打開。⑺NOUPDATE:禁止以修改方式打開表,防止修改表結(jié)構(gòu)和表記錄?!纠?-2】選擇工作區(qū)編號為5的工作區(qū)以獨(dú)立方式打開學(xué)生表,再在編號為20的工作區(qū)打開學(xué)生表。SETDEFAULTTOD:\JXGL\DATASELECT5USE學(xué)生EXCLUSIVESELECT20USE學(xué)生AGAIN4.1.3關(guān)閉表要關(guān)閉表,可以使用系統(tǒng)的“文件”菜單下的的“退出”命令,或單擊程序窗口的“關(guān)閉”按鈕,即通過退出VisualFoxPro系統(tǒng)來關(guān)閉表。若要關(guān)閉當(dāng)前工作區(qū)打開的表,只需在命令窗口中鍵入USE命令即可。關(guān)閉表的其他命令方式如下:CLOSE命令的使用格式如下:CLOSE[ALL|DATABASES[ALL]|TABLES[ALL]]該命令的功能是:關(guān)閉數(shù)據(jù)庫及等各種類型的文件。說明:

⑴ALL:關(guān)閉所有工作區(qū)中打開的數(shù)據(jù)庫、表、表單設(shè)計器、查詢設(shè)計器和和索引等各類文件,并選擇工作區(qū)1為當(dāng)前工作區(qū)。

⑵CLOSEDATABASES:關(guān)閉當(dāng)前打開的數(shù)據(jù)庫和表。并選擇工作區(qū)1為當(dāng)前工作區(qū)。

⑶CLOSEDATABASESALL:關(guān)閉所有打開的數(shù)據(jù)庫和其中的表,所有打開的自由表、所有索引和格式文件,并選擇工作區(qū)1為當(dāng)前工作區(qū)。

⑷CLOSETABLES[ALL]:關(guān)閉所有當(dāng)前選中數(shù)據(jù)庫中的所有表及所有工作區(qū)內(nèi)的自由表。包含ALL時,可以關(guān)閉所有數(shù)據(jù)庫中的所有表以及自由表,但所有數(shù)據(jù)庫保持打開。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ù)庫、表等對象,在本節(jié)中我們將介紹數(shù)據(jù)表結(jié)構(gòu)的顯示和復(fù)制等操作。4.2表的操作4.2.1表結(jié)構(gòu)的顯示表結(jié)構(gòu)顯示的方法有菜單方式和命令兩種方法。當(dāng)表處于顯示狀態(tài)時,利用VisualFoxPro系統(tǒng)菜單中的“顯示”菜單的“表設(shè)計器”選項進(jìn)行。這里介紹顯示表結(jié)構(gòu)的命令。

表結(jié)構(gòu)的命令使用格式如下:

DISPLAY|LISTSTRUCTURE[INnWorkArea|cTableAlias][TOPRINTER|TOFILEFileName]該命令的功能是:顯示一個表文件的結(jié)構(gòu)。說明:⑴TOPRINTER:將DISPLAYSTRUCTURE的結(jié)果輸出到打印機(jī)。⑵TOFILEFileName:將顯示的結(jié)果輸出到FileName指定的文件中。⑶DISPLAYSTRUCTURE所顯示的內(nèi)容包括表的路徑和表名、記錄數(shù)、最近更新日期、備注字段塊的大小和每個的名、類型、寬度和小數(shù)位。若如果結(jié)構(gòu)復(fù)合索引中的標(biāo)識與表中的一個字段同名,標(biāo)識的順序(升序或降序)和標(biāo)識的排序序列就顯示在字段名旁邊。⑷如果用SETFIELDS限制了對表中字段的訪問,一個尖括號就會出現(xiàn)在可以被訪問的字段名旁邊。⑸LISTSTRUCTURE和DISPLAYSTRUCTURE的區(qū)別,前者以滾屏,后者是分屏的方式對表結(jié)構(gòu)進(jìn)行顯示?!纠?-3】顯示表“學(xué)生.dbf”的結(jié)構(gòu)。USE學(xué)生DISPLAYSTRUCTURE顯示結(jié)果如圖4-14所示。4.2.2表結(jié)構(gòu)的復(fù)制當(dāng)復(fù)制的對象僅為表的結(jié)構(gòu)而不涉及表的記錄時,稱為表結(jié)構(gòu)的復(fù)制。結(jié)構(gòu)的復(fù)制有兩種操作,第一種操作是將當(dāng)前表的結(jié)構(gòu)復(fù)制成一個新表的結(jié)構(gòu);第二種操作是將表的結(jié)構(gòu)復(fù)制成表的結(jié)構(gòu)描述文件。圖4-14表“學(xué)生.dbf”的結(jié)構(gòu)將當(dāng)前表的結(jié)構(gòu)復(fù)制成一個新表的結(jié)構(gòu),是指所利用的表結(jié)構(gòu)必須是當(dāng)前工作區(qū)中已打開的表。復(fù)制表結(jié)構(gòu)的命令使用格式如下:

COPYSTRUCTURETOFileName[FIELDSFieldList]此命令的功能是:用當(dāng)前選擇的表結(jié)構(gòu)創(chuàng)建一個新的自由表結(jié)構(gòu)。說明:⑴FileName:指定要創(chuàng)建的自由表的名稱,新表中每一個字段的默認(rèn)值和null值支持與當(dāng)前選定表的設(shè)置是相同的。1.將當(dāng)前表的結(jié)構(gòu)復(fù)制成一個新表的結(jié)構(gòu)⑵FIELDSFieldList:只將FieldList指定的字段復(fù)制到新表。若省略FIELDSFieldList,則把所有字段復(fù)制到新表?!纠?-4】利用“學(xué)生.dbf”數(shù)據(jù)表,生成一個名為“xs1.dbf”的表,字段含有:學(xué)號、姓名、性別,出生日期。在命令窗口中依次輸入如下命令:USE學(xué)生COPYSTRUCTURETOxs1FIELDS學(xué)號,姓名,性別,出生日期USExs1DISPLAYSTRUCTURE結(jié)果如圖4-15所示??梢钥闯?,“xs1.dbf”表有4個字段。結(jié)構(gòu)描述文件(也稱為“表的結(jié)構(gòu)延伸文件”)是一個特殊的表文件,它的結(jié)構(gòu)固定,由16個字段組成,各字段名字分別是:Field_Name、Field_Type、Field_Len、Field_Dec、Field_Null、……、Table_Cmt。它的記錄由每個字段的特性組成。用戶對表的結(jié)構(gòu)描述文件可以像對表記錄一樣方便地進(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)建一個表的結(jié)構(gòu)描述文件,它的字段包含當(dāng)前選定表的結(jié)構(gòu)信息。說明:⑴FileName:指定要創(chuàng)建的新表。⑵DATABASEDatabaseName:指定要添加新表的數(shù)據(jù)庫。⑶NAMELongTableName:指定新表(數(shù)據(jù)庫)的長名稱。表4-1結(jié)構(gòu)描述文件中字段的名稱和內(nèi)容⑷FIELDSFieldList:指定在新表的記錄中只包含由FieldList指定的字段。若省略FIELDSFieldList,則所有字段在新表中都有一個記錄。⑸當(dāng)前選定表內(nèi)每個字段的信息被復(fù)制到新表的一條記錄中。新表的結(jié)構(gòu)在格式上固定,由16個字段組成,如表4-1所示?!纠?-5】利用“學(xué)生.dbf”數(shù)據(jù)表,生成一個名為“ext_學(xué)生.dbf”的表,然后打開并顯示它結(jié)構(gòu)和記錄。USE學(xué)生COPYSTRUCTUREEXTENDEDTOext_學(xué)生database教學(xué)管理NAME學(xué)生表的結(jié)構(gòu)描述文件USEext_學(xué)生BROWSE&&瀏覽表顯示結(jié)果如圖4-15所示??梢钥闯觯怼癳xt_學(xué)生.dbf”的記錄剛好是表“學(xué)生.dbf”的9個字段。用戶可對“ext_學(xué)生.dbf”表進(jìn)行修改,然后使用CREATEFROM創(chuàng)建一個不同結(jié)構(gòu)的新表。具體的例子,請見本章習(xí)題中的上機(jī)題第6題。圖4-15表的結(jié)構(gòu)描述文件表復(fù)制是保證數(shù)據(jù)安全的措施之一,VisualFoxPro中提供了菜單方式和命令方式。菜單方式的操作方法是:當(dāng)表被打開后,利用“文件”菜單的“導(dǎo)出”選項進(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ù)制成一個新表(或指定類型的)文件。說明:⑴FileName:指定要創(chuàng)建的新文件名。系統(tǒng)在復(fù)制.dbf文件時,自動復(fù)制.fpt文件。⑵DATABASEDatabaseName和NAMELongTableName:含義前面已敘述,這里不再重復(fù)。4.2.3復(fù)制表⑶FIELDSFieldList:指定要復(fù)制到新文件的字段。若省略FIELDSFieldLsit,則將所有字段復(fù)制到新文件。⑷FIELDSLIKESkeleton:復(fù)制Skeleton框架相匹配的表字段。⑸FIELDSEXCEPTSkeleton:復(fù)制時,排除Skeleton框架相匹配的表字段。例如,命令:COPYTOmytableFIELDSLIKEA*,P*,表示在新文件中包含以字母A和P開頭的所有字段。⑹Scope:指定要復(fù)制到新文件的記錄范圍。⑺FORlExpression1:復(fù)制邏輯條件lExpression1為“真”(.T.)的記錄到文件中。⑻WHILElExpression2:當(dāng)邏輯表達(dá)式lExpression2為“真”(.T.)時才復(fù)制記錄。⑼[WITH]CDX|[WITH]PRODUCTION:創(chuàng)建一個與已有表的結(jié)構(gòu)索引文件相同的新表結(jié)構(gòu)索引文件。CDX等同于PRODUCTION子句。若創(chuàng)建的文件不是數(shù)據(jù)表,則不要包含CDX或PRODUCTION。⑽TYPE:若要創(chuàng)建的文件不是表,則指定該文件類型。指定文件類型時不必包含TYPE關(guān)鍵字。⑾SDF|XL5:SDF,表示創(chuàng)建的文件是ASCII文本文件,其中記錄都有固定長度,并以回車和換行符結(jié)尾。字段不分隔。若不包含擴(kuò)展名,則指定SDF文件的擴(kuò)展名為.TXT。XL5表示創(chuàng)建一個MicrosoftExcel5.0版的電子表格文件。當(dāng)前選定表中的每個字段變?yōu)殡娮颖砀裰械囊涣?,每條記錄變?yōu)橐恍?。若不包含文件擴(kuò)展名,則新建電子表格的擴(kuò)展名指定為.XLS。⑿DELIMITED:創(chuàng)建分隔文件。分隔文件是ASCII文本文件,其中每條記錄以一個回車和換行符結(jié)尾。默認(rèn)的字段分隔符是逗號。因為字符型數(shù)據(jù)可能包含逗號,所以另外用雙引號分隔字符型字段。除非另外指定,否則所有新建DELIMITED文件的擴(kuò)展名都指定為.TXT。⒀DELIMITEDWITHDelimiter:創(chuàng)建用字符代替引號分隔字符型字段的分隔文件。分隔字符型字段的字符用Delimiter指定。⒁DELIMITEDWITHBLANK:創(chuàng)建用空格代替逗號分隔字符型字段的分隔文件。⒂DELIMITEDWITHTAB:創(chuàng)建用制表符代替逗號分隔字符型字段的分隔文件。⒃若已設(shè)置了索引排序方式,則按主索引順序復(fù)制記錄?!纠?-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é)號”、“姓名”和“性別”3個字段,且性別為“男”的記錄。USE學(xué)生ExclusiveCOPYTOxs3FIELDS學(xué)號,姓名,性別FOR性別="男"USExs3ExclusiveBROWSE新表“xs3.dbf”的瀏覽界面,如圖4-16所示。圖4-16“xs3.dbf”表的瀏覽界面圖4-17文件“xs.txt”的顯示結(jié)果【例4-8】利用“學(xué)生.dbf”表,復(fù)制生成一個“xs.txt”,文件中數(shù)據(jù)項用空格分隔。新文件中含有“學(xué)號”、“姓名”和“性別”3個字段,且性別為“男”的記錄。USE學(xué)生ExclusiveCOPYTOxs.txtFIELDS學(xué)號,姓名,性別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ù)據(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)提示對話框中,若要立即輸入數(shù)據(jù),單擊“是”按鈕,出現(xiàn)記錄編輯窗口,參見圖3-13,即可開始輸入數(shù)據(jù)。在“瀏覽”方式下給表中追加記錄的操作步驟如下:①打開表文件。②打開VisualFoxPro系統(tǒng)的“顯示”菜單,單擊“瀏覽”命令。③再次打開“顯示”命令,單擊“追加方式”命令,即可在當(dāng)前表的末尾追加新記錄。如果在表的末尾只添加一條記錄,用戶也可按下快捷鍵Ctrl+Y,或執(zhí)行VisualFoxPro系統(tǒng)的“表”菜單中的“追加新記錄”命令。在關(guān)閉了表“瀏覽”或“編輯”窗口后,用戶也可使用命令A(yù)PPEND來給數(shù)據(jù)表追加數(shù)據(jù)。APPEND命令的使用語法如下:

APPEND[BLANK]說明:當(dāng)命令帶有選項BLANK時,則在表的尾部追加一條空白記錄,但不進(jìn)入編輯窗口。APPEND可在任何時候給表追加記錄。3.執(zhí)行APPEND命令追加數(shù)據(jù)圖4-18追加一條空白記錄【例4-9】使用APPENDBLANK命令為表“學(xué)生.dbf”追加一條空白記錄,追加空白記錄成功后,瀏覽界面如圖4-18所示。USE學(xué)生EXCLUSIVEAPPENDBLANKBROWSE &&瀏覽記錄可使用INSERT-SQL命令,且并非一定要將表打開的情況下追加新記錄。命令的使用格式如下。

INSERTINTOdbf_name[(FieldName1[,FieldName2,...])]VALUES(eExpression1[,eExpression2,...])4.用INSERT-SQL命令逐條追加記錄或

INSERTINTOdbf_nameFROMARRAYArrayName|FROMMEMVAR該命令的功能是:在表尾追加一個包含指定字段值的記錄。說明:⑴⑵FieldName1[,FieldName2,...]:要追加新記錄數(shù)據(jù)的各個字段名,如果缺省指全部字段。⑶VALUES(eExpression1[,eExpression2,...]):要追加新記錄的各個字段的值。⑷FROMARRAYArrayName:將一個數(shù)組中的數(shù)據(jù)插入到新記錄中。從第一個數(shù)組元素開始,數(shù)組中的每個元素的內(nèi)容依次插入到記錄的對應(yīng)字段中。⑸FROMMEMVAR:把內(nèi)存變量的內(nèi)容插入到與它同名的字段中。如果某一字段不存在同名的內(nèi)存變量,則該字段為空。

【例4-10】利用INSERT-SQL命令向“學(xué)生.dbf”中追加一條新記錄,使該記錄的學(xué)號、姓名、性別、總分等四個字段值如下:s1101113、多啦A夢、男、600。INSERTINTO學(xué)生(學(xué)號,姓名,性別,總分)VALUES("s1101113","多啦A夢","男",600)在VisualFoxPro中,數(shù)組和記錄之間可以實現(xiàn)數(shù)據(jù)交換。⑴將表中數(shù)據(jù)傳送給數(shù)組將表中數(shù)據(jù)傳送給數(shù)組時,可以使用SCATTER命令,該命令的格式如下:SCATTER[FIELDSFieldNameList|FIELDSLIKESkeleton|FIELDSEXCEPTSkeleton][MEMO]TOArrayName|TOArrayNameBLANK|MEMVAR|MEMVARBLANK此命令的功能:從當(dāng)前記錄中把數(shù)據(jù)復(fù)制到一組內(nèi)存變量或數(shù)組中。說明:①FIELDSFieldNameList:把指定的字段列表所對應(yīng)的字段內(nèi)容依次傳送給數(shù)組ArrayName。如果省此子句,則傳送所有字段。如果在字段列表后放一個關(guān)鍵字MEMO,則字段列表中可以包含備注字段。SCATTER總是忽略通用和圖片字段,②FIELDSLIKESkeleton|FIELDSEXCEPTSkeleton:用符指定需要傳送或排除的字段,如果包括LIKE子句,那么與Skeleton相匹配的字段被傳送到內(nèi)存變量或數(shù)組中。如果包括EXCEPTSkeleton,那么除了與Skeleton相匹配的字段外,其他所有字段都傳送到內(nèi)存變量或數(shù)組中??梢酝瑫r使用LIKE和EXCEPT子句。5.利用數(shù)組追加記錄③TOArrayName:指定接受記錄內(nèi)容的數(shù)組。從第一個字段起,SCATTER按順序?qū)⒚總€字段的內(nèi)容復(fù)制到數(shù)組的每個元素中。如果指定數(shù)組的元素比字段數(shù)多,則多余數(shù)組元素的內(nèi)容不發(fā)生變化。如果指定數(shù)組不存在,或者它的元素個數(shù)比字段數(shù)少,則系統(tǒng)自動創(chuàng)建一個新數(shù)組,數(shù)組元素與對應(yīng)字段具有相同的大小和數(shù)據(jù)類型。④TOArrayNameBLANK:創(chuàng)建一個空的數(shù)組,它的元素與表中字段具有相同大小和數(shù)據(jù)類型,但沒有內(nèi)容。⑤MEMVAR:把數(shù)據(jù)傳送到一組內(nèi)存變量而不是數(shù)組中。新創(chuàng)建的內(nèi)存變量與對應(yīng)字段具有相同的名稱、大小和數(shù)據(jù)類型。注意:不要在使用MEMVAR時加入TO。如果加入了TO,VisualFoxPro創(chuàng)建一個名為MEMVAR的數(shù)組。⑥MEMVARBLANK:創(chuàng)建一組空內(nèi)存變量。【例4-11】定義一個數(shù)組xs(5),然后再打開“學(xué)生.dbf”,并將當(dāng)前記錄傳送給數(shù)組。在命令窗口中依次鍵入如下命令:DIMENSIONxs(5)USE學(xué)生SCATTERTOxsMEMODISPLAYMEMO命令執(zhí)行的結(jié)果是,將數(shù)組xs的元素個數(shù)自動增加為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ù)替換為某個數(shù)組、內(nèi)存變量組或?qū)ο笾械臄?shù)據(jù)。說明:①FROMArrayName:用一個數(shù)組它的數(shù)據(jù)替換當(dāng)前記錄中的數(shù)據(jù)。從數(shù)組的第一個元素起,各元素的內(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)存變量同名的字段。如果沒有與某個字段同名的內(nèi)存變量,則不替換此字段。注意:使用MEMVAR子句時,GATHER不能帶FROM。③NAMEObjectName:指定某個對象,其屬性與表的字段同名。每個字段的內(nèi)容分別替換為與字段同名的屬性的值。如果沒有與某個字段同名的屬性,則此字段的內(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命令將跳過備注字段。【例4-12】創(chuàng)建一個含有5個數(shù)組元素的數(shù)組S,并令S(1)="s1101113",S(2)="夏日奈雪",S(3)="女",S(4)={^1992-12-26},S(5)=600。將數(shù)組S中各元素值復(fù)制到當(dāng)前記錄對應(yīng)的字段中。use學(xué)生MODIFYDATABASEappendblankdimensions(5)

S(1)="s1101113"S(2)="夏日奈雪"S(3)="女"S(3)="女"S(4)={^1992-12-26}S(5)=600gatherfromsfields學(xué)號,姓名,性別,出生日期,總分將一個表或一個指定格式文件的記錄數(shù)據(jù)一次操作就部分或全部添加到當(dāng)前表文件的末尾,稱為成批追加記錄。成批追加記錄的方法有兩個,一是菜單方式,即利用VisualFoxPro系統(tǒng)菜單的“表”菜單中的“追加記錄”選項可實現(xiàn)記錄的成批追加。二是命令方式,這里介紹命令方式:成批追加的命令格式如下。APPENDFROMFileName|?[FIELDSFieldList][FORlExpression][[TYPE][DELIMITED[WITHDelimiter|WITHBLANK|WITHTAB|WITHCHARACTERDelimiter]|SDF|XL5[SHEETcSheetName]|XL8[SHEETcSheetName]]]此命令的功能是:從一個文件中讀入記錄,追加到當(dāng)前表的尾部。說明:①FileName:指定追加數(shù)據(jù)的源文件名,如果給出的文件名不包含擴(kuò)展名,則將文件默認(rèn)為.DBF。源數(shù)據(jù)表中標(biāo)記為刪除的記錄也將添加到當(dāng)前表中。②FIELDSFieldList:要追加的字段列表,缺省時為全部字段。③FORlExpression:要追加記錄應(yīng)滿足的條件,缺省時為全部記錄。④TYPE:果指定的源文件類型不是表,則必須指定文件類型。6.成批追加記錄⑤DELIMITED:指定源文件為分隔數(shù)據(jù)文件(.TXT數(shù)據(jù)的格式)。⑥D(zhuǎn)ELIMITEDWITHDelimiter|BLANK|TAB|CHARACTERDelimiter:字符字段由(Delimiter)標(biāo)識、由空格符(BLANK)分隔字段、由制表符(TAB)來分隔、字段之間由給定的Delimiter分隔(如果Delimite是分號,應(yīng)用引號括起來)。

⑦SDF|XL5|XL8:可從一個標(biāo)準(zhǔn)ASCII文本文件,或MicrosoftExcel5.0或97版文件中導(dǎo)入數(shù)據(jù)。工作表的每列為表的一個字段,每行為表的一條記錄。工作表文件的擴(kuò)展名為.XLS?!纠?-13】完成以下二項操作。①首先利用“學(xué)生.dbf”數(shù)據(jù)表的結(jié)構(gòu),創(chuàng)建一個名為“app_學(xué)生.dbf”表,然后再使用成批追加命令為該表添加性別為“男”的同記錄。②使用例4-8中建立的xs.txt為xs1.dbf追加數(shù)據(jù)。在命令窗口中依次鍵入如下命令:USE學(xué)生COPYSTRUCTURETOapp_學(xué)生USEapp_學(xué)生APPENDFROM學(xué)生FOR性別="男"USExs1APPENDFROMxsDELIMITEDWITHBLANK表中每個記錄都有一個編號,稱為記錄號,記錄號是根據(jù)輸入的先后次序自動編號的。對于打開的表,系統(tǒng)會分配一個指針,稱為記錄指針。記錄指針指向的記錄稱為當(dāng)前記錄。記錄的定位就是移動記錄指針,使指針指向符合條件的記錄的過程。

使用RECNO()函數(shù)可以獲得當(dāng)前記錄的記錄號。很多時候需要移動記錄指針,例如,想修改某個記錄時就需要將指針指向此記錄。表文件有兩個特殊的位置:文件頭(表起始標(biāo)記)和文件尾(表結(jié)束標(biāo)記)。文件頭在表中第一個記錄之前,當(dāng)記錄指針指向文件頭時,函數(shù)BOF()的值為.T.;文件尾在最后一個記錄之后,當(dāng)記錄指針指向文件尾時,函數(shù)EOF()的值為.T.,如圖4-21所示。4.3.2記錄的定位圖4-21表的結(jié)構(gòu)當(dāng)表以物理順序(無索引,參閱第5章)打開時,記錄指針指向第一條記錄,RECNO()返回1,BOF()返回.F.;當(dāng)表為空表時,BOF()和EOF()都為.T.,函數(shù)RECNO()與RECCOUNT()分別為1和0。按指針的移動分為絕對定位、相對定位、移動記錄指針到表的首/末記錄三種。按指針操作方式又可以把記錄的定位分為命令定位和菜單定位法、命令定位法和條件定位法等幾種方法。使用菜單移動記錄指針的操作步驟如下:①打開需要瀏覽或編輯的數(shù)據(jù)表。②打開“顯示”菜單,單擊“瀏覽”命令,顯示表的“瀏覽”窗口。③打開“表”菜單,單擊“轉(zhuǎn)到記錄”命令,選擇移動記錄指針的方式,如圖4-22所示。1.使用菜單方式移動記錄指針圖4-22轉(zhuǎn)到記錄菜單圖4-23“定位記錄”對話框當(dāng)單擊“定位”命令后,打開“定位記錄”對話框,如圖4-23所示。在“作用范圍”下拉列表框中定位記錄的范圍,F(xiàn)OR和WHILE中輸入定位的條件。然后單擊“定位”按鈕,系統(tǒng)在給定的范圍內(nèi)查找第一條符合條件的記錄,并將指針定位到該記錄。⑴絕對定位絕對定位是指將指針定位在指定記錄號的記錄上,命令格式如下:

GO|GOTO[RECORD]nRecordNumber[|TOP|BOTTOM][INnWorkArea|INcTableAlias]說明:①RECORDnRecordNumber:省略GO|GOTO命令而只指定記錄號,則只能在當(dāng)前工作區(qū)中移動記錄指針。②INnWorkArea|INcTableAlias:記錄指針在指定表所在的工作區(qū)或表的別名中移動,無此子句,表示在當(dāng)前表中定位。③TOP|BOTTOM:將記錄指針定位在表的第一個記錄上或最后一個記錄上。如果此表使用升序索引,則第一個記錄是關(guān)鍵字值最?。ù螅┑挠涗?;如果使用降序索引,則第一個記錄是關(guān)鍵字值最大(?。┑挠涗洝!纠?-14】用GO或GOTO命令定位記錄的示例。USE學(xué)生 &&打開表“學(xué)生.dbf”?RECNO() &&顯示當(dāng)前記錄號1GOBOTTOM&&指針指向最后1條記錄,當(dāng)前的記錄為第10個記錄?RECNO() &&顯示記錄號12?EOF() &&因沒有到文件末尾,顯示.F.……2.使用命令方式移動記錄指針⑵相對定位記錄的定位可以使用SKIP命令進(jìn)行相對的定位,命令的使用格式如下SKIP[nRecords][INnWorkArea|cTableAlias]功能:使記錄指針在表中,在當(dāng)前記錄的位置上向前移動或向后移動。說明:nRecords、INnWorkArea|cTableAlias:意義同上。

【例4-15】用SKIP命令定位記錄的示例。USE學(xué)生

&&以獨(dú)占方式打開表xsqk.dbf?RECNO(),BOF() &&顯示1、.F.。表打開時,當(dāng)前記錄是第1條記錄SKIP-1 &&記錄指針向文件頭移動一個位置?RECNO(),BOF() &&顯示1、.T.SKIP5 &&指針從第一個記錄開始……3.使用LOCATE─CONTINUE命令進(jìn)行查找定位記錄查找定位的命令如下:

LOCATEFORlExpression1[Scope][WHILElExpression2]該命令的功能是:按順序查找表(也可查找索引表)從而找到滿足指定邏輯表達(dá)式的第一個記錄。說明:LOCATE發(fā)現(xiàn)一個滿足條件的記錄之后,再執(zhí)行CONTINUE,從而在表的剩余部分尋找其他滿足條件的記錄。當(dāng)執(zhí)行CONTINUE時,搜索操作從滿足條件的記錄的下一條記錄開始繼續(xù)執(zhí)行??芍貜?fù)執(zhí)行CONTINUE,直到到達(dá)范圍邊界或表尾?!纠?-16】按順序查詢并顯示表“學(xué)生.dbf”中前兩二位團(tuán)員。USE學(xué)生ExclusiveLOCATEFOR團(tuán)員=.T. &&按順序查找第1個團(tuán)員記錄?EOF(),FOUND() &&分別顯示.F.和.T.?學(xué)號,姓名,性別,總分,團(tuán)員CONTINUE &&繼續(xù)查找下一個團(tuán)員記錄

……4.3.3記錄的顯示記錄的顯示方法有菜單法和命令法,其中,菜單法顯示表記錄的操作方法是,表打開后,通過“顯示”菜單的“瀏覽”選項即可以實現(xiàn)。一般情況下,我們使用LIST|DISPLAY命令來顯示記錄信息。LIST|DISPLAY命令的使用格式如下:DISPLAY|LIST[[FIELDS]FieldList][Scope][FORlExpression1][WHILElExpression2][OFF][TOPRINTER|TOFILEFileName]說明:在VisualFoxPro主窗口或用戶自定義窗口中顯示與當(dāng)前表有關(guān)的信息。DISPLAY分屏顯示,而LIST則是以滾屏(連續(xù))顯示信息。【例4-17】在命令窗口中,依次鍵入如下命令,觀察在VsualFoxpro主窗口中顯示表“學(xué)生.dbf”記錄信息。略,參見P140記錄的“瀏覽”窗口采用二給表形式每行顯示一條記錄,使用非常方便。在瀏覽過程中,用戶可對記錄進(jìn)行追加、編輯、修改和刪除等操作。只有當(dāng)前表,才能使用“瀏覽”窗口。有多種方法打開記錄的“瀏覽”窗口,如項目管理器方式、菜單方式、數(shù)據(jù)庫設(shè)計器方式和命令方式等。①項目管理器方式:選擇要操作的表,單擊“瀏覽“按鈕。②菜單方式:打開表后,執(zhí)行VisualFoxpro系統(tǒng)“顯示”菜單中的“瀏覽”命令。③數(shù)據(jù)庫設(shè)計器方式:在數(shù)據(jù)庫設(shè)計器中選擇要操作的表,右擊鼠標(biāo),執(zhí)行快捷菜單中的“瀏覽“命令。打開的“瀏覽”窗口如圖4-24所示。4.3.4記錄的瀏覽窗口圖4-24“瀏覽”窗口用戶可以在記錄瀏覽窗口做以下動作。1.調(diào)整字段顯示寬度;2.調(diào)整字段顯示高度;3.調(diào)整字段顯示順序;4.拆分瀏覽窗口;5.在瀏覽窗口中修改記錄;6.在瀏覽窗口中刪除記錄。4.3.5記錄的修改表中的記錄可以隨時修改,以實現(xiàn)表數(shù)據(jù)和現(xiàn)實世界的一致。常用表記錄的修改可分為編輯修改、瀏覽修改、替換修改、SQL修改四種方式。編輯修改的命令為EDIT和CHANGE,是一種全屏幕的修改,在編輯修改窗口中,每個記錄的每一個字段各占一行。在菜單方式下表數(shù)據(jù)的編輯修改方法是,當(dāng)表處于顯示狀態(tài)時,利用VisualFoxPro系統(tǒng)菜單中“顯示”菜單的“編輯”選項來進(jìn)行。EDIT和CHANGE命令的常用使用格式如下。

EDIT[FIELDSFieldList][Scope][FORlExpression1][WHILElExpression2][FONTcFontName[,nFontSize]][STYLEcFontStyle][FREEZEFieldName][NOAPPEND][NODELETE][NOEDIT|NOMODIFY][NOMENU]

利用EDIT和CHANGE命令修改完指定的記錄后,自動保存并關(guān)閉編輯窗口(也可按組合鍵Ctrl+W)。按下Ctrl+Q放棄修改退出。1.EDIT/CHANGE編輯命令說明:⑴FIELDSFieldList、FORlExpression1、WHILElExpression2:意義與前面相同。⑵FREEZEFieldName:在編輯窗口中只允許更改FieldName中指定的一個字段。其余字段能夠顯示,但不能編輯。⑶FONTcFontName[,nFontSize]:指定數(shù)據(jù)的顯示字體和大小。⑷STYLEcFontStyle:指定編輯時,數(shù)據(jù)的顯示樣式。如:“B”代表粗體、“I”代表斜體等。⑸NOMENU:VisualFoxPro系統(tǒng)菜單欄將不出現(xiàn)“表”菜單。圖4-28使用EDIT/CHANGE編輯記錄【例4-18】用EDIT命令對“學(xué)生.dbf”從第3條記錄開始以10號、楷體、加粗的形式顯示編輯其“出生日期”,結(jié)果如圖4-28所示。USE學(xué)生EXCLUSIVEGO3EDITFREEZE出生日期FONT“楷體”,10STYLE“B”

BROWSE命令窗口,集顯示、修改、查詢、刪除、添加記錄等功能于一體。與EDIT窗口不同,在BROWSE窗口每條記錄各占一行,因此窗口可顯示的記錄更多,光標(biāo)移動更方便,并且它的窗口功能比EDIT更強(qiáng)大,是VisualFoxPro交互式命令中最常用的命令之一。由于BROWSE命令的子句非常多,我們這里只能給出一些常用選項。常用的瀏覽命令格式如下。

BROWSE[FIELDSFieldList][FONTcFontName[,nFontSize]][STYLEcFontStyle][FORlExpression1[REST]][FREEZEFieldName][LAST|NOINIT][LOCKnNumberOfFields][NOAPPEND][NODELETE][NOEDIT|NOMODIFY][NOMENU][TITLEcTitleText][VALID[:F]lExpression2[ERRORcMessageText]][WHENlExpression3]命令功能是:打開瀏覽窗口,對當(dāng)前表從當(dāng)前記錄位置開始進(jìn)行瀏覽。2.BROWSE瀏覽命令說明:⑴LOCKnNumberOfFields:鎖定一個在瀏覽窗口左邊總能看到的字段的編號。⑵TITLEcTitleText:表示以cTitleText的內(nèi)容作為標(biāo)題在瀏覽窗口標(biāo)題欄顯示,無則顯示表文件名。⑶VALID[:F]lExpression[ERRORcMessageText]:每當(dāng)對當(dāng)前記錄進(jìn)行了修改而且想將光標(biāo)移動到另一條記錄時,VALID子句才執(zhí)行一次。但如果僅修改了備注型字段,VALID子句卻不執(zhí)行。

⑷WHENlExpression2:當(dāng)光標(biāo)要移向其它記錄時計算出一個移動條件。若為真(.T.),用戶可以修改移到的記錄。⑸REST:若有FOR子句,BROWSE命令在打開瀏覽窗口時,記錄指針從當(dāng)前位置移向表頂部。若不包含REST,默認(rèn)情況下,BROWSE將記錄指針放置在表頂部。⑹LAST|NOINIT:保存瀏覽窗口外觀的任何變更,下次使用時,瀏覽窗口和上次窗口的樣式相同。⑺FIELDS子句的字段列表還包含對顯示于瀏覽窗口中的字段進(jìn)行特殊處理的選項,常用的處理參數(shù)有::R:指定字段為只讀字段,可顯示但不可編輯字段包含的數(shù)據(jù)。:H=cHeadingText:用cHeadingText指定的自定義標(biāo)頭替換默認(rèn)字段名。默認(rèn)情況下,在瀏覽窗口中用字段名作列標(biāo)頭。⑻對于BROWSE中的其他子句,同EDIT/CHANGE命令?!纠?-19】用BROWSE命令瀏覽表“學(xué)生.dbf”中的記錄。USE學(xué)生ExclusiveBROWSE

【例4-20】接上題,從第3條記錄開始,用BROWSE命令瀏覽表“學(xué)生.dbf”中所有非團(tuán)員的記錄,記錄指針不移動。BROWSERESTFORNOT團(tuán)員 【例4-21】接上題,使用BROWSE命令瀏覽表“學(xué)生.dbf”,以10號、楷體、加粗的形式顯示瀏覽窗口。要求如下:①顯示的字段有:學(xué)號,姓名,性別,出生日期和總分②只編輯其“出生日期”,并用“出生年月”替換標(biāo)題字段名,③同時鎖定學(xué)號和姓名等前面2個字段。BROWSELOCK2Fields學(xué)號,姓名,性別,出生日期:H="出生年月",總分FREEZE出生日期FONT"楷體",10STYLE"B"顯示的結(jié)果如圖4-31所示。

圖4-31BROWSE的一個較復(fù)雜的使用替換修改有菜單方式和REPLACE替換命方式。菜單操作的方法是:當(dāng)表處于顯示狀態(tài)時,利用VisualFoxpro系統(tǒng)菜單的“表”菜單中的“替換字段”命令進(jìn)行。REPLACE替換命令使用起來,更加快捷方便,該命令的格式如下:

REPLACEFieldName1WITHeExpression1[ADDITIVE][,FieldName2WITHeExpression2[ADDITIVE]]...[Scope][FORlExpression1][WHILElExpression2][INnWorkArea|cTableAlias]功能:在指定“范圍”內(nèi)對指定字段用“表達(dá)式”的值成批修改。說明:⑴Scope、FORlExpression1、WHILElExpression2:當(dāng)它們?nèi)咳笔r,表示僅修改當(dāng)前一條記錄。⑵FieldNamenWITHExpressionn:用表達(dá)式Expressionn的值修改對應(yīng)字段FieldNamen的值,(n=1,2…,N)。⑶[ADDITIVE],僅對備注型字段有效,選之,則將表達(dá)式的內(nèi)容追加到備注字段的原內(nèi)容之后,如不選則替換掉原來的內(nèi)容。⑷replace命令用表達(dá)式的值替換字段中的數(shù)據(jù)。在替換未選定工作區(qū)中的字段時,字段前面必須加上表的別名。⑸如果記錄指針已在當(dāng)前工作區(qū)中文件的末端,而指定的字段在另一個工作區(qū)中,則不發(fā)生任何替換。

3.REPLACE成批替換命令【例4-21】在“學(xué)生.dbf”表中,增加一個“獎勵分”,數(shù)據(jù)類型為“N(4.1)”。然后,根據(jù)計算獎勵分,條件是:總分大于585分,獎勵分=總分×10%,結(jié)果如圖4-22所示。ALTERTABLEjl_學(xué)生ADD獎勵分N(4,1)REPLACEALL獎勵分WITH總分*0.10FOR總分>=585BROWSEBROWSE

UPDATE-SQL也能實現(xiàn)表記錄的成批規(guī)律修改,其命令格式如下。

UPDATE[DatabaseName1!]TableName1SETColumn_Name1=eExpression1[,Column_Name2=eExpression2...]WHEREFilterCondition1[AND|ORFilterCondition2...]]該命令的功能是:以新值更新表中的記錄。說明:⑴TableName1:指定要更新記錄的表。⑵SETColumn_Name1=eExpression1…:指定要更新的列以及這些列的新值。⑶WHERE...:記錄替換條件。⑷UPDATE-SQL命令只能用來更新單個表中的記錄。圖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)前記錄之后(前)插入一條記錄(或空白記錄)。說明:⑴必須事先打開表,且移動記錄指針到要插入的位置。

⑵BEFORE:把新記錄插入到當(dāng)前記錄之前,省略該子句,插入到當(dāng)前記錄之后。⑶BLANK:插入一條空記錄,但不會出現(xiàn)記錄編輯窗口,需要其他命令填入數(shù)據(jù)?!纠?-23】在“學(xué)生.dbf”中的第5條記錄之前插入一條空白記錄。GO5INSERTBEFOREBLANK在VisualFoxPro中,刪除記錄的方法是:先邏輯刪除,當(dāng)用戶確定后,再物理刪除記錄。若表有邏輯刪除的記錄時,用DISPLAY或LIST命令顯示時,在第一個字段名前有一個邏輯刪除標(biāo)記(*)。物理刪除是指刪除的的記錄不能恢復(fù)。

4.4刪除與恢復(fù)記錄邏輯刪除記錄就是給要刪除的記錄加上一個刪除標(biāo)記,給記錄加刪除標(biāo)記可通過菜單方式或命令方式來實現(xiàn)。被加上刪除標(biāo)記的記錄,就是已完成邏輯刪除操作的記錄。在對表進(jìn)行操作時,如果系統(tǒng)環(huán)境設(shè)置為SETDELETEON狀態(tài),有刪除標(biāo)記的記錄可視為已不存在。4.4.1邏輯刪除表中的記錄⑴邏輯刪除一條記錄【例4-24】在表“學(xué)生.dbf”中的第2條記錄上做刪除標(biāo)記。操作步驟如下:①打開表“學(xué)生.dbf”。②打開“顯示”菜單,單擊“瀏覽”命令,打開“瀏覽”窗口。③單擊第2條記錄前“刪除標(biāo)記欄”處的白色方框,變?yōu)楹谏?/p>

”,表示邏輯刪除,參見圖4-14所示。1.用菜單方式邏輯刪除記錄

⑵邏輯刪除多條記錄操作步驟如下:①通過瀏覽方式打開表文件。②執(zhí)行“表”菜單中的“刪除記錄…”命令,如圖4-24所示。③在“作用范圍”中設(shè)定刪除記錄的范圍,輸入FOR或WHILE的刪除條件。圖4-24“刪除”對話框使用DELETE命令刪除記錄的格式如下:

DELETE[Scope][FORlExpression1][WHILElExpression2]該命令的功能是:為表中指定范圍內(nèi)滿足條件的記錄加上刪除標(biāo)記。說明:⑴當(dāng)Scope、FOR|WHILE全缺省時,僅邏輯刪除當(dāng)前一條記錄。⑵⑶邏輯刪除成功后,可使用DELETED()函數(shù)進(jìn)行測試,如果當(dāng)前記錄邏輯刪除,則該函數(shù)值為真(.T.),否則為假(.F.)。DELETED()函數(shù)使用格式是:DELETED([cTableAlias|nWorkArea])。2.用DELETE命令邏輯刪除記錄③在“作用范圍”中設(shè)定刪除記錄的范圍,輸入FOR或WHILE的刪除條件。④單擊“刪除”按鈕,即可刪除所選擇的記錄。【例4-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)記的記錄。說明:ON:表示將加了刪除標(biāo)記的記錄視為“無效記錄”。對記錄進(jìn)行操作時,包括關(guān)聯(lián)表中的記錄,“無效記錄”一律不參與操作。3.用SETDELETED命令隱藏邏輯刪除的記錄圖4-27SETDELETEDON狀態(tài)顯示結(jié)果【例4-26】接上題,分析SETDELETEOFF|ON的作用USE學(xué)生SETDELETEONBROWSE &&僅顯示無刪除標(biāo)記的記錄,結(jié)果如圖4-27所示。

SQL的中的DELETE命令也可實現(xiàn)記錄的邏輯刪除。此命令的使用格式如下:DELETEFROMTableName[WHEREFilterCondition1[AND|ORFilterCondition2...]]該命令的功能是:對指定的表TableName,邏輯刪除符合條件的記錄。其中,WHEREFilterCondition1[AND|ORFilterCondition2...]是指刪除條件,缺省時為全部記錄?!纠?-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ù)邏輯刪除記錄的操作步驟如下:⑴打開表的“瀏覽”窗口。1.用菜單方式恢復(fù)記錄⑵打開“表”菜單,單擊“恢復(fù)記錄”命令,打開“恢復(fù)記錄”對話框,如圖4-28所示。⑶選擇作用范圍,并輸入恢復(fù)記錄條件表達(dá)式。⑷單擊“恢復(fù)記錄”按鈕,即可恢復(fù)記錄。圖4-28“恢復(fù)記錄”對話框使用命令RECALL,來快速恢復(fù)邏輯刪除的記錄。其命令格式如下:

RECALL[Scope][FORlExpression1][WHILElExpression2]該命令的功能是:恢復(fù)當(dāng)前表中符合條件的帶有刪除標(biāo)記的記錄。說明:當(dāng)FOR和WHILE同時存在時,優(yōu)先選擇WHILE所設(shè)定的條件。注意:用戶一旦對文件使用了PACK或ZAP命令,那么所有帶刪除標(biāo)記的記錄將不可恢復(fù)?!纠?-28】對例4-25邏輯刪除的記錄,恢復(fù)記錄號6之前的記錄。RECALLALLFORRECNO()<=62.用命令方式恢復(fù)記錄物理刪除又稱為永久刪除。在物理刪除記錄之前,一般要求先邏輯刪除記錄,即給需要刪除的記錄加上刪除標(biāo)記。物理刪除記錄的菜單操作方式是執(zhí)行“表”菜單中的“徹底刪除”命令進(jìn)行。物理刪除的命令有PACK和ZAP兩個。4.4.3物理刪除表中的記錄操作步驟如下:①打開表“瀏覽”窗口。②打開“表”菜單,單擊“徹底刪除”命令,打開提示信息框,如圖4-29所示。③單擊“是”按鈕,即可將邏輯刪除的記錄進(jìn)行物理刪除。1.用菜單方式物理刪除記錄2.用命令方式物理刪除記錄⑴PACK命令記錄的物理刪除命令PACK的使用格式如下:

PACK

該命令的功能是:對以獨(dú)占方式打開的當(dāng)前表中永久刪除標(biāo)有刪除標(biāo)記的記錄,減少與該表相關(guān)的備注文件(.fpt)所占用的空間。圖4-29“刪除”提示信息對話框【例4-29】利用例4-27先復(fù)制一個和“學(xué)生.dbf”相同表文件“學(xué)生1.dbf”,然后物理刪除“學(xué)生1.dbf”被做了刪除標(biāo)記的記錄。USE學(xué)生COPYTO學(xué)生1SELECT2USE學(xué)生1PACKBROWSE最后命令序列執(zhí)行的結(jié)果如圖4-30所示。

⑵ZAP命令ZAP命令與PACK命令不一樣的是,ZAP命令清空表中的全部記錄,僅留表的結(jié)構(gòu)。ZAP命令格式如下:

ZAP[INnWorkArea|cTableAlias]ZAP命令等價于DELETEALL和PACK聯(lián)用,但ZAP速度更快。

【例4-30】在例4-29的基礎(chǔ)上清空“學(xué)生1.dbf”中的全部記錄,然后瀏覽該表。USE學(xué)生1SETSAFETYOFF&&執(zhí)行ZAP命令不再出現(xiàn)“信息提示”對話框ZAPBROWSE圖4-30使用PACK命令物理刪除記錄1.用菜單方式設(shè)置字段過濾表過濾(Fi

溫馨提示

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

評論

0/150

提交評論