




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第2章數據表的基本操作段云娜1、掌握六種常量的特點及書寫規則。2、掌握變量的分類及如何向變量賦值。3、了解一維數組及二維數組的定義及賦值語句。4、熟記表達式的概念及分類,掌握運算符的優先級。5、掌握函數的組成、分類及意義、熟記常用函數的拼寫。6、熟練掌握如何建立和修改數據表的表結構。7、熟練掌握表數據的輸入方法。8、掌握數據表的維護方法。9、掌握VF命令的格式及書寫規則教學重點2.1.1數據類型
數據是計算機程序處理的對象,也是運算的結果。數據的類型決定了其在計算機中的存儲方式和使用方式。在VisualFoxPro中,將數據分為七種類型:
2.1VisualFoxPro的語言基礎1、字符型(Character)2、數值型(N)3、日期型(Date)4、日期時間型(DateTime)5、邏輯型(Logic)6、備注型(Memo)7、通用型(General)1、字符型(Character)
字符型數據是通常表示文本類型的信息。它由中/英文字符、數字、空格和各種專用符號組成,長度是0—254個字符。用定界符括起來的字符串為字符型常量。如:“123”、‘文化’、[%%abc]。2、數值型(N)數值型數據用來表示數量的大小,包括五種類型:數值型(Numeric):最大長度20位,包括數字、正負號和小數點,可以使用科學記數法形式書寫。浮點型(Float):與數值型數據等價,以浮點格式存儲雙精度型(Double):高精度數值型數據,只用于表中類型。 浮點格式存儲整型(Interger):不包含小數部分的數值型數據,以二進制形式存儲貨幣型(Currency):用來表示貨幣值,格式與數值型類似 但數值前要加$符號。以4位小數存儲3、日期型(Date)
表示日期,默認格式[mm/dd/yy],存儲長度固定8位。例如:09/05/064、日期時間型(DateTime)
存儲長度固定為8位,默認格式[mm/dd/yyyyhh:mm:ss]
例如:09/05/200612:22:545、邏輯型(Logic)
描述客觀事物的真假,表示邏輯判斷結果。邏輯數據只有真(.t.)和假(.f.)兩個值,存儲長度為1位6、備注型(Memo)
用于存放較長的字符型數據。 只用于表中字段,字段長度固定為4位,備注型數據沒有長度限制,僅受限于現有的磁盤空間,它的數據內容存放在與數據表同名的備注文件中。表中只存放一個指向這個備注文件的指針。7、通用型(General)
存儲OLE對象,可以是電子表格、文檔、圖片等,只能用于數據表中,數據存儲方式同備注型數據相同。OLE(ObjectLinkingandEmbedding對象連接與嵌入)2.1.2數據存儲數據容器:用戶存放數據的地方,包括常量、變量、數組、記錄、對象。
1、常量(6種數據類型) (1)數值型常量:由0-9、小數點和正負號構成。 例:112、3.14125、-7.34、5.123E12(2)貨幣型常量:數值前加“$”符號。
如:$123.473(3)字符型常量:即字符串。定界符不能是全角;左右必須匹配;同一種定界符不能嵌套。 例:“計算機”、‘“123”’、[]、[](空串)(4)日期型常量:包括年、月、日三部分,用一對花括號括起來,各部分之間用分隔符分隔,系統默認分隔符為“/”,其它還有“-”、“.”和空格。 日期型常量有傳統和嚴格兩種格式:傳統的日期格式月、日各2位,年份2位或4位,命令setcenturyon/off控制;系統默認美國日期格式mm/dd/yy,由命令setdateto控制
例如:setdatetoymd{06/02/27} setdatetodmy {27/02/06}
例如:setcenturyon{09/01/2006}setcenturyoff
{09/01/06}2003/09/01setcenturyoffsetmarkto“.”setdatetomdy?{^2003-09-01}嚴格的日期格式格式:{^yyyy-mm-dd}說明:①不受setdate影響,必須有脫字符^、年份必須4
位,年月日順序不能改變;②在任何情況下使用,而傳統格式只能在執行如下
命令后才能使用:
setstrictdateto0 ③若只使用嚴格日期格式,則執行如下命令:
setstrictdateto1 ④可用命令setmarkto設定日期分隔符例:setcenturyonsetmarkto(默認分隔符)setdatetoymd?{^2003-09-01}09.01.03(5)日期時間型常量格式:{<日期>,<時間>}。說明:日期部分也有傳統和嚴格兩種格式
時間部分的格式為:[hh[:mm[:ss]][a|p]]。例:SETMARKTO ?{^2003-09-0111:10:10},{^2003-09-0115:10:10}(6)邏輯型常量
邏輯型數據只有邏輯真和邏輯假兩個值。 邏輯真的常量:.T.
,.t.,.Y.和.y.。 邏輯假的常量:.F.
,.f.
,.N.和.n.
舉例:?34>45 ?123=12309/01/0311:10:10AM09/01/033:10:10PM.F..T.2.變量
分為字段變量和內存變量兩大類。
1)內存變量可以存不同類型數據。命名規則以字母、漢字、下劃線開頭后跟字母、漢字、下劃線、數字,長度不超過128個字符變量命名一般不與系統保留字同名建議第一個字母采用小寫并能表明該變量的類型 例:cName、n工資、nVal、dtime、c姓名分類:簡單內存變量和系統內存變量。
簡單內存變量直接賦值,不必事先定義。 例:X=10給變量X賦值為10
系統內存變量由VFP系統運行時自動建立、使用,名字都以下劃線開頭,例:_dos,_screen等。說明:內存變量可與字段變量重名,這時訪問變量時,系統會優先認為是字段變量,因此若訪問內存變量時,必須在內存變量前加前綴M.或M->。2)數組數組元素可通過數組名及相應的下標來訪問。
例:a(4)
每個數組元素相當于一個簡單內存變量,可以給各個元素分別賦值。在VisualFoxPro中,一個數組中各個元素的數據類型可以不同。
例:a(1)=34
a(2)=“數組的概念”
數組在使用前必須先定義,說明是一維還是二維數組,以及數組名和數組大小(下標從1開始)。數組定義后,每個數據元素的初值自動為.F.。定義數組:①DIMENSION<數組名>(<下標上限1>[,<下標上限2>][,……])②DECLARE<數組名>(<下標上限1>[,<下標上限2>][,……])
使用數組元素應注意下列問題:一切使用簡單內存變量的地方,均可使用數組元素;數組元素的數據類型由所賦值的數據類型決定;一個數組中各元素的數據類型可以相同,也可以不同;可以使用一維數組方式訪問二維數組;例:bb(1)—bb(1,1)、bb(4)—bb(2,1)例:DECLAREaa(5),bb(2,3)
創建兩個數組aa和bbaa有5個數組元素:aa(1)、aa(2)、aa(3)、aa(4)、aa(5)bb有6個數組元素:bb(1,1)、bb(1,2)、bb(1,3)bb(2,1)、bb(2,2)、bb(2,3)3.內存變量常用命令(1)內存變量的賦值格式1:STORE<表達式>TO<變量名表>格式2:<內存變量名>=<表達式>功能:格式1計算表達式的值并賦給一個或多個內存變量 格式2只能給一個變量賦值說明:給變量賦值時,如變量不存在,則自動建立 可以通過對內存變量重新賦值來改變其內容和類型舉例:aa=10 bb=‘word’ ?aa,bb store100tocc,dd,bb?aa,bb,cc,dddimensionarray(10)array=20?array(1)?array(2)array(1)=.f.?array(1)2020.F.10word10100100100(2)內存變量的顯示格式1:LISTMEMORY[LIKE<通配符>][TOPRINTER|TOFILE<文件名>]格式2:DISPLAYMEMORY[LIKE<通配符>][TOPRINTER|TOFILE<文件名>]功能:顯示內存變量的當前信息,包括變量名、作用域、類型、取值。說明:通配符*表示任意多個字符,?表示任意一個字符
list命令滾動顯示內存變量信息;而display則分屏顯示變量信息,超過一屏會停頓等待。例:listmemorylikea*displaymemory(3)內存變量的清除格式1:CLEARMEMORY
清除所有內存變量格式2:RELEASE<內存變量名表>
清除指定的內存變量格式3:RELEASEALL[EXTENDED]
清除所有內存變量,包括程序中的公共變量格式4:RELEASEALL[LIKE<通配符>︳EXCEPT<通配符>]
清除與LIKE匹配或與EXCEPT不匹配的內存變量例:RELEASEALLLIKEa?bRELEASEALLEXCEPTa*(4)內存變量的保存格式:SAVETO<文件名>ALL[LIKE<通配符>︳EXCEPT<通配符>]功能:將指定范圍的內存變量保存在內存變量文件中,內存變量文件的擴展名為.mem。例:savetovarnamealllikea*(5)內存變量的恢復格式:RESTOREFROM<文件名>[ADDITIVE]功能:把內存變量文件中的變量送回內存,不選ADDITIVE則送回之前先清除內存中已有的內存變量。例:restorefromvarnameadditive4.字段變量
字段變量的類型:數值型、浮動型(浮點型)、整型、雙精度型、字符型、邏輯型、日期型、日期時間型、貨幣型、備注型和通用型等當表打開時,字段變量就可以進行訪問,字段變量的值就是表中某個記錄中的屬性值。字段變量的命名規則:以字母、漢字開頭由字母、漢字、數字、下劃線組成,長度不超10個字符不可與系統保留字同名說明:函數名是系統規定的,函數名與括號間不能有空格自變量表可以是一個或多個以逗號分隔的自變量自變量表也可以為空,但括號不能省略函數調用后有一個運算結果,稱為函數值或返回值2.1.3函數函數的概念函數就是針對一些常見問題預先編好的一系列子程序。當要解決此類問題時,就可以調用相應的函數即執行該子程序,得到結果。函數調用的格式:函數名(<自變量表>)
MAX(27.4,98.9,-7) DATE() ABS(-78.6)1.數學函數(數值函數)求絕對值函數ABS
格式:ABS(<數值表達式>)
舉例:x=abs(-5) y=-3.6?abs(45)
?x
?abs(y)求整函數INT,不進行四舍五入 格式:INT(<數值表達式>)
舉例:?int(12.9) m=int(-13.7) 四舍五入函數ROUND
格式:ROUND(<數值表達式>,<保留小數位>)
舉例:?round(12345.6789,2) ?round(12345.6789,0) ?round(12345.6789,-1)
說明:保留小數位可以是負數,此時從小數點向前數位數指數函數EXP、自然對數函數LOG、平方根函數SQRT、 格式:EXP|LOG|SQRT(<數值表達式>)
舉例:a=exp(0)x=1?sqrt(2) ?a?log(x)?sqrt(4)取模(求余數)函數MOD
格式:MOD(<數值表達式1>,<數值表達式2>)
功能:取<數值表達式1>除以<數值表達式2>的余數,符號與數值表達式2符號一致。 舉例:?mod(20,3)?mod(20,-3)?mod(-20,3)?mod(-20,-3) 2-11-2求最大值MAX、最小值MIN
格式:MAX|MIN(<表達式1>,<表達式2>,…,<表達式n>)
舉例:a=34b=65 ?max(a,b,30)?min(a,b)2.字符串函數(1)判斷子字符串函數AT格式:AT(<字符表達式1>,<字符表達式2>)功能:求<字符表達式1>在<字符表達式2>的起始位置數值。說明:<字符表達式2>中不包含<字符表達式1>,函數值為零若<字符表達式2>的值含有兩個以上的<字符表達式1>的值,則函數給出第一個值的位置。大小寫字母在檢索中視為不同。舉例:?at(“數據”,“計算機數據管理”)
?AT(“book”,“computer”),at(“a”,“Iamateacher”) ?at(“th”,“Thisisatable”)
(2)取子串函數SUBSTR格式:SUBSTR(<字符表達式>,<起始位置>[,<長度>])功能:對<字符表達式>從給定的<起始位置>開始截取指定長度的字符,生成一個新的字符串;說明:若無<長度>或<長度>大于后面剩余的字符個數,則截至末尾;若<起始位置>大于字符串長度,則輸出空串
(3)取左子串函數LEFT格式:LEFT(<字符表達式>,<數值表達式>)功能:LEFT從<字符表達式>左邊截取由<數值表達式>的值指定的字符,生成一個新的字符串。
(4)取右子串函數RIGHT格式:RIGHT(<字符表達式>,<數值表達式>)功能:從<字符表達式>右邊截取由<數值表達式>的值指定的字符,生成一個新的字符串。
(5)宏代換函數&格式:&<字符型內存變量>[.]功能:替換出<字符型內存變量>的值。即將<字符型內存變量>值的定界符去掉,使其可能代表一個變量名、文件名、命令、表達式等。說明:在表達式中使用該函數時,如果函數中的字符型內存變量名與其后面的字符無明顯分界時,應使用圓點將它們隔開。例如:A="北京"B="中國"
?"&A.是&B.首都"
(6)字符串長度函數LEN格式:LEN(<字符表達式>)功能:測試字符表達式的結果中包含多少個字符例如:?LEN(“FOXPRO數據庫管理系統!”)(7)刪除首部和尾部空格的函數格式:LTRIM|TRIM|RTRIM|ALLTRIM(<字符表達式>)功能:LTRIM是刪除字符串首部的空格;TRIM或RTRIM是刪除字符串尾部的空格;ALLTRIM刪除字符串首部和尾部的空格。
(8)構造空格函數SPACE格式:SPACE(<數值表達式>)
功能:產生由<數值表達式>的值決定的空格數。(9)生成重復字符串函數REPLICATE格式:REPLICATE(<字符表達式>,<數值表達式>)功能:把<字符表達式>的值(字符串)重復由<數值表達式>
的值指定的次數,生成新的字符串。(10)大小寫字母轉換函數LOWER|UPPER格式:LOWER|UPPER(<字符表達式>)功能:LOWER把<字符表達式>中的大寫字母轉換為小寫字母
UPPER把<字符表達式>中的小寫字母轉換為大寫字母(11)字符串替換函數STUFF格式:STUFF(<字符表達式1>,<起始位置>,<字符個數>,<字符表達式2>)功能:從指定位置開始,用<字符表達式2>指定的字符串替換
<字符表達式1>中<字符個數>指定的字符串。說明:<字符表達式2>中的字符個數與<字符表達式1>中的字符個數可以不等;如果<字符個數>為0,則插入<字符表達式2>;如果<字符表達式2>為空字符串,則刪除<字符表達式1>中指定字符。舉例:?stuff(’熱烈歡迎各位來我校參觀指導!’,9,4,[各校領導])3.日期和時間函數(1)系統日期和時間函數DATE|TIME|DATETIME格式:DATE()|TIME()|DATETIME()功能:DATE()返回當前系統日期,函數值為日期型;
TIME()以24小時制返回當前系統時間,值為字符型;
DateTime()返回當前系統日期時間,為日期時間型。(3)星期函數DOW|CDOW格式1:DOW(<日期表達式>)格式2:CDOW(<日期表達式>)功能:格式1給出<日期表達式>指定的日期是一星期的第幾天。1表示星期日,2表示星期一,……,7表示星期六;格式2給出星期幾的英文名稱,函數值為字符型。(2)年、月、日函數YEAR|MONTH|DAY格式:YEAR|MONTH|DAY(<日期表達式>)功能:從<日期表達式>中求出年份、月份、日份的數值。4.類型轉換函數(1)字符轉換為數值函數VAL格式:VAL(<字符表達式>)功能:將字符型數據轉換為數值型數據。說明:若<字符表達式>由數字字符和小數點組成,則轉換成相 應的數值,但只保留兩位小數,其余小數四舍五入。若<字符表達式>由非數字字符打頭,則轉換為0.00。若<字符表達式>由數字字符打頭,且混有非數字字符時則轉換到第一個非數字字符為止。例:?VAL("1234.567"),VAL("Fox"),VAL("1234FOX.5678")主屏幕顯示:1234.570.001234.00(2)數值轉換為字符函數STR格式:STR(<數值表達式>[,<長度>[,<小數位數>]])功能:把<數值表達式>的運算結果轉換為指定長度的字符串。
STR(345.678,5,2)345.7說明:<長度>應包括小數點在內,不指定長度時,系統默認整數位10位。
STR(123456789.56)123456790若指定<長度>小于<數值表達式>整數位數,則用一串“*”號表示數據溢出,“*”的個數為長度值;若<長度>為0,則返回空字符串。
STR(123.456,2)**STR(123.567,0)轉換時要四舍五入(3)字符轉換為日期函數CTOD格式:CTOD(<字符表達式>)功能:將符合yy/mm/dd、mm/dd/yy日期格式的字符串轉換為相應日期,不符時為“
//”。
(4)日期轉換為字符函數DTOC格式:DTOC(<日期表達式>[,1])功能:將<日期表達式>轉換為相應的字符串。說明:不選用1時,按mm/dd/yy格式轉換;選用1時,按
yyyymmdd格式轉換。(5)ASCII碼值轉換為字符函數CHR格式:CHR(<數值表達式>)功能:將<數值表達式>表示的ASCII碼值轉換為相應的字符。
(6)字符轉換成ASCII碼值函數ASC格式:ASC(<字符表達式>)功能:返回<字符表達式>最左邊的一個字符的ASCII碼值。5.測試函數(1)值域測試函數BETWEEN格式:BETWEEN(<表達式1>,<表達式2>,<表達式3>)功能:判斷一個表達式的值是否介于另外兩個表達式的值之間。當<表達式1>值大于等于<表達式2>且
小于等于<表達式3>時,函數值為邏輯真(.T.),否則函數只為邏輯假(.F.)。舉例:?between(34,78,96).F.(2)空值(NULL值)測試函數ISNULL格式:ISNULL(<表達式>)功能:判斷一個表達式的運算結果是否為NULL值,是則返回邏輯值.T.,否則返回邏輯值.F.。舉例:store.NULL.tox/storeNULLtox ?x,ISNULL(x)(3)“空”值測試函數EMPTY格式:EMPTY(<表達式1>)功能:測試表達式的運算結果是否為空,返回邏輯真.T.
或邏輯假.F.說明:空值對C型指空串、空格、制表符、回車、換行,
D和T型是指空值,如ctod(‘’),其它型是指0值。(4)數據類型測試函數VARTYPE格式:VARTYPE(<表達式>)功能:測試<表達式>的類型,返回一個大寫字母,函數值為字符型。若<表達式>是一個數組,則根據第一個數組元素的類型返回字符串。舉例:?vartype("AAA"),vartype(234),vartype($200)(5)條件測試函數IIF格式:IIF(<邏輯表達式>,<表達式1>,<表達式2>)功能:測試<邏輯表達式>的值,若為邏輯真.T.,函數返回
<表達式1>的值,若為邏輯假.F.,函數返回<表達式2>
的值。<表達式1>和<表達式2>的類型不要求相同。
舉例:x=15?iif(x>10,x+10,x+5),iif(x<10,x+10,x+5)2.1.4表達式表達式是由常量、變量和函數等通過特定的運算符連接起來的式子。表達式包括兩種形式:單一的對象(例如:123,X,date())由運算符將運算對象連接起來形成的式子(例如:x+5)表達式按運算規則能計算出一個結果,稱表達式的值 表達式的值可以賦給變量,屏幕顯示,或參加運算。按表達式運算結果的不同,表達式可分為以下幾類數值表達式字符表達式日期時間表達式關系表達式和邏輯表達式1.數值表達式由算術運算符和數值型的常量、變量、數組元素、字段、函數組成。運算結果是數值型數據。算術運算符及運算優先級如下:函數的優先級僅次于括號2.字符表達式字符表達式由字符串運算符將字符型數據連接起來形成,其運算結果仍然是字符型數據。字符串運算符有以下兩個:+:前后兩個字符串首尾連接形成一個新的字符串-:連接前后兩個字符串,并將前字符串的尾部空格移到合并后的新字符串尾部。字符串運算符的優先級相同舉例:a=“長春”
b=“信息經濟學院”
?a+b,“aa”?a-b,“aa”3.日期時間表達式日期時間表達式中可以使用的運算符也有+和-兩個。4.關系表達式關系表達式由關系運算符和字符表達式、算術表達式、時間日期表達式組成,其運算結果為邏輯型常量。關系成立時,表達式的結果為.T.,反之,表達式結果為.F.。關系表達式格式:<表達式1><關系運算符><表達式2>關系運算符的優先級相同舉例:?2+3=6,10>-11,$10>$15 ?{^2003-01-01}>{^2002-12-28}?.T.<.F.子串包含測試
store"計算機"tos1 store"微型計算機"tos2 ?s1$s2,s2$s1字符串精確比較與EXACT設置
“==”比較兩個字符串時,只有當兩個字符串完全相同時(包括空格及各字符的位置),運算結果才為.T.
“=”比較兩個字符串時,運算結果與setexacton/off有關,默認設置是SETEXACTOFF,此時,只要等號右邊的字符串與左邊字符串的前面部分內容相同,結果為.T.
設置SETEXACTON后,比較前會在較短字符串尾部加上若干空格,使兩個字符串相等,然后再比較。5.邏輯表達式邏輯表達式由邏輯運算符將邏輯型數據連接起來而形成,運算結果仍是邏輯型數據。邏輯運算符有三個:
.NOT.或!(邏輯非):對后面的邏輯值求反
.AND.(邏輯與):只兩個邏輯值都為真,運算結果為真
.OR.(邏輯或):只要有一個邏輯量為真,運算結果為真
也可以省略兩端的點(省略時邏輯運算符兩邊必須有空格)優先級順序為:NOT、AND、OR。舉例:身高=1.8
體重=130 ?身高>1.7and體重>110 ?身高>1.7and體重>200?not身高>1.7and體重>200?not(身高>1.7and體重>200)?身高>1.7or體重>200?not身高>1.7or體重>2006.運算符優先級在每一類運算符中,各個運算符有一定的運算優先級。而不同類型的運算也可能出現在同一個表達式中,這時它們的運算優先級順序從高到低為:
*括號
*函數
*算術運算、字符串運算和日期時間運算
*關系運算
*邏輯運算一、賦值語句、顯示語句、表達式
a=3.14?a=4.68
姓名=“王大力”?姓名
str1=“thisisatable”?“Word”
生日={^1898-08-23}?Substr(str1,4,2)二、賦值號與比較運算符(=)
x=23?x=3 y=46?y=46 z=x=y&&先進行x、y的比較,將結果賦給z
?x=y=z&&比較x,y,再將比較的結果與z比較
e1=not3>4.and.y=46
?e1=not3>4.and.Y=46&&將e1與not3>4比較,再將結果與y=46的比較結果進行求邏輯與。上機題1、指出以下左邊各變量的值及類型
A=10*2**3+100B=(10*2)**3+100 C=A=BD=A<BE1=A=B.AND.A<B E2=A=B.OR.A<BE3=.NOT.A=B.AND.A<BE4=.NOT.(A=B.AND.A<B) E5=.NOT.(A=B.OR.A<B)E6=“ABC”$BDABCD”.AND.A=B.OR.(10+5)<>10*5E7=E6.AND.“C”+”A”$“A”上機題2、在命令窗口中輸入如下命令:A=“Thisisacomputer”B=“It’smine”寫出滿足下列要求的命令:取A的第8個字符賦給C取A的左邊7個字符賦給D取A的右邊4個字符賦給E求出字符A、B的長度判斷A中是否包含D及E(兩種方法)上機題3、上機執行下列命令,熟悉函數的功能(1)B=DTOC(DATE(),1)?“今天是:”+left(B,4)+“年”;+iif(subs(B,5,1)=“0”,subs(B,6,1),subs(b,5,2));+“月”+right(B,2)+“日”/*日子也可按月份處理方法處理(2)X=STR(12.4,4,1)(3)X=“奔騰586”Y=RIGHT(X,3)Y=“個人計算機”
Z=“&x+&y”?LEN(X),RIGHT(X,3)+Y?Z,&Z?”&X.&Y”,X+Y(4)?AT(“人民”,“中華人民共和國”)?VAL(SUBSTR(‘668899’,5,2))+1?SUBSTR(‘668899”,3)-’1’(5)DD=DATE()?str((year(dd),4)+”年”+str(month(dd,2)+”月“+str(day(dd),2)+”日”上機題數據表的概念 在VisualFoxPro中,一張二維表對應一個數據表,稱為表文件,它是擴展名為.dbf的文件數據表的分類
*數據庫表:包含在數據庫中的表
*自由表:不包含在任何數據庫中而獨立存在的表
自由表可以添加在數據庫中而成為數據庫表,數據庫表也可以從數據庫中移出而成為自由表。2.2.1創建數據表結構
2.2創建數據表1)數據庫的概念把有關系的表存放在同一數據庫中,確定它們的關聯關系,數據庫中的數據才能被更充分的利用。數據庫是一個邏輯上的概念和手段,通過一組系統文件將相互聯系的數據表及其相關的數據庫對象進行統一組織和管理。數據庫實際是一個擴展名為dbc的文件,與之相關的還會自動建立一個擴展名為dct的數據庫備注(memo)文件和一個擴展名為dcx的數據庫索引文件。1.創建數據庫2)建立數據庫的三種方法:在項目管理器中建立數據庫通過“新建”對話框建立數據庫使用命令建立數據庫CREATEDATABASE[數據庫文件名|?]建立數據庫需注意的幾點:如果指定的數據庫已經存在,可能覆蓋已經存在的數據庫。
setsafetyon(默認值),出現警告對話框請用戶確認;
setsafetyoff則直接覆蓋同名數據庫。命令方式建立的數據庫不顯示數據庫設計器,而另兩種方式建立的數據庫會立即打開數據庫設計器。數據表的構成表名(文件名)數據表的結構(字段名、字段類型、字段寬度、索引)數據表的記錄字段類型和寬度
C、Y、N、F、B、I、D、T、L、M、G字段名:字段名就是關系的屬性名或表的列名。數據表中字段名的命名規則如下:自由表字段名最長10個字符數據庫表的字段名最長為128個字符必須以字母或漢字開頭、后跟字母、漢字、數字和下劃線字段名中不能包含空格2.創建數據表1)設計表結構編號名稱啟用日期價格部門主要設備備注商標016-1車床03/05/9062044.6121.T.memogen016-2車床01/15/9227132.7321.T.memogen037-2磨床07/21/90241292.1222.T.memogen038-1鉆床10/12/895275.0023.F.memogen100-1微機08/12/978810.0012.T.memogen101-1復印機06/01/9210305.0112.F.memogen210-1轎車05/08/95151000.0011.F.memogen表結構實例:設備清單表(P33)字段名類型寬度小數位數編號字符型5名稱字符型6啟用日期日期型8價格數值型92部門字符型2主要設備邏輯型1備注備注型4商標通用型4設備表的結構(SB.DBF)創建方法:(啟動表設計器后創建) 2)利用表設計器創建表結構(1)
使用命令的方法
格式:CREATE[<表文件名>|[.dbf]] 例:建立數據表SB.DBF時可使用命令:
CREATE[盤符\路徑\]SB(2)
在項目管理器中創建
在項目管理器中選擇自由表或數據庫表,單擊“新建”按鈕,打開自由表或數據庫表的表設計器.表設計器的使用說明(1)數值型數據總最大長度20位,包括小數位(2)有些數據類型的寬度是固定的,不需指定:
雙精度數固定8個字節,整數固定4個字節
貨幣型數固定8個字節,邏輯型固定1個字節
日期型和日期時間型固定8個字節
通用型和備注型固定4個字節(3)NULL值的確定
.NULL.表示是否充許字段值為空值,它與空串和0具有不同的意義,空值就是缺值或該值還沒確定,而不是任何意義的數據。關鍵字段不允許設為空值。空值不是一種數據類型,只是一個值,輸入空值時Ctrl+0(4)設計表結構時,不能隨便按回車鍵,否則會退出表結構的設計狀態,而應使用光標移動鍵。索引前:索引文件索引后:(按身高建立升序索引)索引文件示例索引值記錄號
1.62 41.63 91.65 51.67 101.7321.75 71.78 81.80 11.80 31.82 6(1)索引的基本概念一個記錄號與關鍵字索引值的列表,不改變表中所存儲記錄的順序,只改變VFP系統讀取記錄的順序。建立在索引文件中,一個表可建立多個索引,每一索引代表一種處理記錄的順序。分為復合索引和單索引,其對應的索引文件的擴展名分別是.CDX和.IDX;復合索引又分為結構復合索引和非結構復合索引,結構復合索引的索引文件名與表同名,而非結構復合索引需另外起名。索引(2)功能角度VFP系統的索引類型:主索引:指定字段或表達式中不允許出現重復值的索引,確保字段中輸入值的唯一性。一個表只能建立一個主索引(自由表沒有主索引)候選索引:與主索引類似,索引值的記錄唯一的。一個表允許建立多個候選索引。普通索引:允許表中有重復索引值的記錄。在一個表中可以加入多個普通索引。唯一索引:允許表中索引值的記錄不唯一,但索引文件中不能有相同的索引值,即對于索引值相同的記錄,只有記錄號最小的記錄號才能存于索引文件中。這是為兼容舊版本而保留的一種形式。建立結構復合索引:(3)創建索引表設計器中建立將生成與表同名的索引文件,擴展名為CDX格式:INDEXON
索引表達式TAG索引名[FOR條件表達式]
[ASCENDING│DESCENDING][UNIQUE│CANDIDATE]功能:建立一個結構復合索引,該索引保存在CDX文件中。使用命令建立說明:索引表達式可以是字段名或包含字段名的表達式,但只能是N、C、D、L四種類型。涉及多個字段時,索引排序是按表達式中字段從左到右進行的。一個命令只建立一個索引;ASCENDING:升序;DESCENDING:降序。默認升序。UNIQUE:唯一索引;CANDIDATE:候選索引。默認普通索引。新建立的索引成為邏輯排序的依據,稱為當前索引(主控索引),每個表都可以指定一個當前索引,而且只能是一個。結構復合索引文件在打開表時自動打開,只有表關閉時才會關閉;文件中可包括多個索引;當索引文件打開時,在添加、更改或刪除記錄時自動維護索引.如修改表中內容時索引文件沒有打開,則需用reindex重新索引或重新建立索引。例:usesbindexon價格tagjgdescendingindexon部門+str(價格,9,2)tagbmjgindexon-價格/1000000tagjg1candidate生成shebei.cdx文件,其中包含3個索引。設置字段屬性(1)格式用于鍵入格式表達式,從整體格式角度約束,確定字段值在瀏覽窗口或輸入時采用的格式。格式設置對已有記錄不做檢查。3)設定數據庫表的完整性舉例:
1、對“編號”字段設置格式屬性為:AT2、對“名稱”字段設置格式屬性為:M鉆床,磨床,機床,微機
3、對“價格”字段設置格式屬性為:^格式代碼含義說明A只允許是字母符號,禁止漢字、空格或標點E以英國日期格式編輯日期型數據L將數值型數據前面的空格位用零添充M以列表的方式為字符型字段預置多個可選項,當輸入或修改時用空格進行選擇T刪除字段中的的前導空格和尾部空格!將字段中的小寫字母轉換為大寫字母^使用科學記數法顯示數值型字段的值格式代碼列表(2)輸入掩碼
用于“按位”指定字段的輸入格式,限制輸入數據的范圍,控制輸入的正確性,不符合規則的數據不能輸入,對已有記錄不驗證該規則。
掩碼含義說明X可輸入任何字符9可輸入數字和正負號#可輸入數字、空格、正負號$在指定位置顯示當前的貨幣符號.用來指定小數點的位置,用來分隔小數點左邊的整數部分,通常作為千分位隔點例:1、在“編號”字段的輸入掩碼文本框中輸入“999-9”;
2、將‘$’顯示在“價格”字段的前面。(3)標題
顯示區的標題文本框用于為瀏覽窗口、表單或報表中的字段標簽鍵入表達式。例:將“價格”字段的標題文本框中輸入設備價格;(4)字段有效性規則文本框用于輸入對指定字段數據有效性進行檢查的規則,它實際上是一個條件。用條件驗證該字段數據合法性。信息文本框用于指定出錯提示信息,當該字段輸入的數據違反條件時,出錯信息將照此顯示。信息內容要定界。默認值文本框用于指定字段的默認值。值類型與字段一致例:(設置“啟用日期”字段)1、在有效性規則輸入啟用日期<=date()2、在信息規則中輸入“輸入日期錯誤!”3、在默認值中輸入date()說明:
光標離開字段時引起字段有效性的檢驗,如不符合規則,必須加以改正。該規則對已有記錄也要驗證。(5)字段注釋字段注釋信息需用雙引號定界。當在項目管理器中選擇字段時,字段注釋信息顯示在項目管理器的底部。
設置記錄規則(在“表”選項卡中設置)(1)記錄驗證規則:用于指定記錄級有效性檢查規則。信息:用于指定出錯提示信息。出錯提示信息內容必須用西文引號括起。說明:記錄級有效性檢查規則用來檢查同一記錄中不同字段之間的邏輯關系。記錄驗證規則是當記錄的值被改變后,記錄指針準備離開該記錄時被激活的。記錄規則設置后對已經存在的記錄也要驗證。(2)觸發器
觸發器是一個在插入、刪除或更新表中記錄時被激活的表達式,用于驗證插入、刪除或更新的記錄是否符合規則。觸發器有下面三種:插入觸發器:用于指定一個規則,每次向表中插入或追加記錄時該規則被觸發,據此檢查插入的記錄是否滿足規則。更新觸發器:用于指定一個規則,每次更新記錄時觸發該規則。刪除觸發器:用于指定一個規則,每次向表中刪除記錄(打上刪除標記)時觸發該規則。說明:觸發器設置對已經存在的記錄不做檢查。例如:將刪除觸發器設置為“RECNO()>10”,表示只有記錄號大于10的記錄才可以被邏輯刪除。(3)長表名和表注釋 長表名最多128個字符,它出現在瀏覽窗口中 表注釋出現在項目管理器的底部。表數據的輸入時機:
表數據就是表記錄,可以在創建表結構時直接輸入表的數據;也可以建立完成后追加記錄,追加記錄前必須用use命令先打開表,然后使用下面方法追加記錄。2.2.2輸入表數據輸入記錄的兩種方法(1)
使用APPEND命令
格式:APPEND|APPENDBLANK
執行一次APPENDBLANK命令后在表尾添加一條空記錄
(2)
使用菜單方法
打開表【顯示】-【瀏覽···】菜單,出現“瀏覽”窗口(或用brow命令)【顯示】-【追加方式】可一次追加多條記錄 或【表】-【追加新記錄】增加一條空白記錄。記錄數據輸入說明(1)對于日期型字段,只需輸入月份、日期、兩位年份,不需輸入“/”.如setcenturyon,則輸入兩位或四位年份都可以。兩位時56以下認為是’20--’年,以后認為是’19--’年。(2)邏輯型字段輸入內容時,只需輸入T或F,且不分大小寫(3)在輸入記錄的字段值時,只能輸入對字段類型有效的值。如果輸入了無效數據,則在屏幕的右上角彈出一個信息框顯示出錯信息,在更正錯誤之前,無法將光標移動到其它字段上去。(4)記錄輸入完畢后,關閉當前窗口(也可按組合鍵Ctrl+W),保存添加的記錄信息到表文件中。若欲放棄對當前記錄的編輯修改,可按Esc鍵。(5)備注型字段和通用型字段有特殊的輸入方法。兩字段的實際內容保存在一個擴展名為.FPT的文件中,在定義通用型和備注型字段時,字段寬度都只有4個字節,這4個字節只存放一個指針,指向存儲實際內容的.FPT的文件中,因此要確保.dbf和.fpt文件永遠在一起。備注型數據顯示為“Memo”或“memo”,其中“Memo”表示對應的記錄的備注字段已經輸入了數據,而“memo”表示該字段中沒有備注內容。要為某記錄的備注字段輸入數據或修改其中的內容,可雙擊該記錄的備注字段,進入備注字段的編輯窗口,編輯完后按<Ctrl>+<W>或單擊窗口的“關閉”按鈕結束并保存輸入的新內容;按<ESC>結束并不保存輸入的新內容。通用型字段數據顯示為Gen或gen,Gen表示該字段有內容,gen表示沒有內容。雙擊字段進入編輯窗口,可通過剪貼板或執行“編輯”—“插入對象”菜單命令來插入圖形或其他對象,也可通過Ctrl+X刪除內容。保存或放棄方法與備注型數據相同。(6)備注字段和通用型字段數據的輸入和修改
表結構的修改范圍
表結構修改包括:增加、刪除字段,修改字段名、字段類型、字段寬度,建立、修改刪除索引。數據庫表還可以建立、修改、刪除有效性規則等。2.2.3表結構的修改
利用表設計器修改表結構的兩種方法首先用use命令打開表,然后命令:MODIFYSTRUCTURE2.3.1VISUALFOXPRO命令結構及常用子句命令的構成:命令動詞、語句體(若干個子句)、注釋VFP命令格式:
<命令動詞>[<功能子句1>][<功能子句2>][...]&&注釋部分例:顯示命令LIST的格式:
LIST[<范圍>][[<FIELDS>]<字段名表達式表>] [FOR<條件>][WHILE<條件>][OFF] [TO<設備名|文件名|內存變量名>]&&注釋2.3數據表的維護
1.命令動詞
表示要執行的操作,是一個命令中必不可少的部分。2.語句體
語句體由一系列短語(子句)構成,可使用的常用子句如下所示:
(1)FIELDS<字段名表>
用于選定操作的“字段”,<字段名表>中有多個字段時,字段名之間用逗號分隔。例:
usesblistfields名稱,部門
&&顯示表中“名稱”“部門”兩列數據(2)FOR<條件>
只對表中滿足“條件”的所有記錄進行操作。例:
usesb listfor價格>100000
&&顯示表中價格大于10萬元的
&&所有設備記錄(3)WHILE<條件>
對滿足條件的記錄進行操作。從表中當前正在使用的記錄開始向下順序判斷,當遇到第一個不滿足條件的記錄時,停止命令執行,而不管其后是否還有滿足條件的記錄。例:listfields名稱,部門for價格>100000while主要設備=.t.
當命令中同時有for和while子句時,要優先滿足while條件(4)<范圍>
表示記錄的執行范圍。
VFP系統對表中的記錄是逐條進行處理的。VFP為每一個打開的表設置了一個內部使用的記錄指針,指向正在被操作的記錄,該記錄稱為當前記錄。記錄指針的作用是標識表的當前記錄。 范圍可以是以下四種參數之一:
ALL:表示全部記錄;
NEXT<n>:表示從當前記錄開始的以下n條記錄;
RECORD<n>:表示第n號記錄;
REST:表示從當前記錄到最后一條記錄。
(5)TO<設備名|文件名|內存變量名>
表示操作結果的輸出去向。3.命令書寫格式說明
在書寫命令格式時,還用到一些符號,這些符號只是在書寫時使用,實際操作時并不輸入。這些符號以及它們所表示的意義如下:
<>:表示其中內容為必選項,實際命令中不包括它;
[]:表示其中內容為可選項,即可以省略該子句;
|:表示其兩側項目只能任選一項;
…:表示同類項的多次重復。
4.命令的書寫與使用規則每條命令以命令動詞開始,以回車鍵結束,命令中各短語的順序是任意的。命令動詞、短語中的英文單詞及函數名均可縮寫為前四個字符,大小寫可混用。命令動詞、語句體及其各短語之間均以空格相隔。一行只能寫一個命令,不能將兩個命令寫在同一行。命令一行寫不下時,可以由系統自然換行或在行尾加分號(;),回車強制換行。命令行的長度小于或等于2048個字符。1、表的打開打開:將表從外存調入內存,以便顯示或對其操作菜單:【文件】-【打開】(或工具欄上的“打開”按鈕)命令:Use<表名>[.dbf]&&打開默認路徑下的表說明:USE命令打開一個新表的同時會自動關閉先打開的表2.3.2表的打開與關閉2、表的關閉use
&&關閉當前使用的表closetables&&關閉當前數據庫中所有打開的表closetablesall&&關閉所有打開的表closeall&&關閉所有打開的表、程序文件及表單等clearall&&關閉所有的表、程序文件及表單等,清
&&除內存變量1.同時進行數據瀏覽和修改的操作使用瀏覽器來瀏覽和修改數據表,打開瀏覽器的常用方法有以下幾種:首先打開要操作的表-【顯示】-【瀏覽···】。在項目管理器中選擇要操作的表,然后單擊“瀏覽”按鈕。在命令方式下,首先用USE命令打開要操作的表,然后鍵入BROWSE命令。BROWSE命令的格式如下:
BROWSE[<范圍>][Fields<字段名表>] [For<條件表達式>][<NOAPPEND>][<NOMODIFY>]2.3.3表數據的瀏覽和修改交互式地對當前表記錄進行編輯的命令:
CHANGE|EDIT[<范圍>][Fields<字段名表>] [For<條件表達式>][while<條件表達式>]2.數據的選擇顯示數據的顯示也可使用LIST和DISPLAY命令,命令格式如下:
List|Display[<范圍>];
[[Fields]<字段名表達式表>];
[For<條件表達式>][WHILE<條件表達式>];
[ToPrinter][ToFile<文件名>][off]
說明:(1)Display命令分屏顯示數據,面List命令不分屏顯示(2)沒有For和While子句時,如省略<范圍>子句,則List命令認為是All,而Display命令默認為是當前記錄。有For和While子句時,則都默認為All。(3)OFF參數表示不顯示記錄號1.指定主控索引(1)命令方式格式:SETORDERTO[<數值表達式>|[TAG]索引名];
[ASCENDING|DESCENDING]]2.3.4索引文件的使用主控索引一個表可以建立或打開一個或多個索引,但同一時刻只有一個索引起作用,稱為當前索引或主控索引。此時表的邏輯順序以主控索引的順序排列。主控索引可隨時指定。說明:
數值表達式指出索引列表中第幾個索引為主控索引指定主控索引時可以重新指定索引的升、降序
setorderto[0]取消主控索引新打開的結構索引對表的邏輯順序不起控制作用如果某個索引不再使用了可刪除在表設計器中的“索引”選項卡刪除,先打開索引文件,然后使用下面命令刪除:
DELETETAGALL|<索引名列表>
其中,選擇ALL時表示刪除打開的所有索引。2.刪除索引表的邏輯結構:VFP命令對表中記錄逐條處理,一個表剛打開時,指針指向第一條記錄,此時第一條記錄是當前記錄。表第一條記錄記為TOP;最后一條記錄記為BOTTOM。在TOP之前有一個文件起始標識,稱為文件首BOF(BeginningofFile,簡稱BOF);在BOTTOM后有一個文件結束標識,稱為文件尾(EndofFile,簡稱EOF)。記錄指針可以移動,移動指針就是要把指針定位在某個記錄上。2.3.5記錄指針的移動BeginningofFile(BOF)EndofFile(EOF)TOPBOTTOM1.命令方法移動指針(1)GO命令
絕對定位命令,它將記錄指針定位于指定位置。GO命令有如下兩種格式:格式1:GO[TO]TOP|BOTTOM
格式2:[GO[TO]]<數值表達式>說明:GOTOP指針定位首記錄;GOBOTTOM指針定位末記錄;
<數值表達式>的值是正整數,指針定位在指定記錄(2)SKIP命令
相對定位命令,是相對于當前記錄進行定位的命令。格式:SKIP[<數值表達式>]說明:<數值表達式>的值取正/負整數,表示指針從當前記錄開始移動多少個記錄:值大于零時指針往文件尾移動;小于零時指針往文件頭移動;當<數值表達式>缺省時表示1。LIST、DISPLAY、LOCATE和REPLACE等命令執行后會移動記錄指針。
usesblistnext3//如沒有到結尾,則為當前記錄dispnext3disprest//最后一條記錄之后list//最后一條記錄之后(1)文件結束測試函數EOF格式:EOF([<數值表達式>]│<表別名>])功能:測試<數值表達式>指定工作區中表文件記錄指針是否指向文件結束位置(表文件尾。若指向,函數值為邏輯真(.T.),否則函數值為假(.F.)。3.與指針及表相關的測試函數舉例:usesbgobottom?eof()skip ?eof()go4 list?eof()(2)文件起始測試函數BOF格式:BOF([<數值表達式>]│<表別名>])功能:測試<數值表達式>指定的工作區中表文件記錄指針是否指向起始位置。若指向,函數值為邏輯真(.T.),否則為假(.F.)。舉例:usesbgotop ?eof(),bof()skip-1?eof(),bof()(3)記錄號測試函數RECNO格式:RECNO([<數值表達式>│<表別名>])功能:給出<數值表達式>指定的工作區中打開的數據表的當前記錄號;無參數時,給出當前表當前記錄號;沒有打開的表時,返回值為0;如果指針指向文件尾,函數值為表文件中的記錄數加1,如果記錄指針指向文件首,函數值為最上面記錄的記錄號舉例:usesb ?recno()skip–1 ?recno() gobottom ?recno() skip ?recno()(4)記錄數測試函數RECCOUNT格式:RECCOUNT([<數值表達式>|<表別名>])功能:測試<數值表達式>指定的工作區中數據表的記錄個數 無參數時,測試當前工作區中數據表中的記錄個數;若沒有打開的數據表,返回值為0(5)文件測試函數FILE格式:FILE(<字符表達式>)功能:測試<字符表達式>指定的磁盤文件是否存在,若存在,函數值為邏輯真(.T.),否則函數值為假(.F.)。例如:?file(‘f:\sb.dbf’)
&&文件全名,可是任意類型
(6)記錄大小測試函數RECSIZE格式:RECSIZE([<數值表達式>|<表別名>])功能:測試<數值表達式>指定的工作區中數據表記錄的長度說明:記錄長度為各字段長度之和再加1(用于存放刪除標記),若設計表結構時定義了充許空值,長度再加1(7)數據類型測試函數TYPE格式:TYPE(<表達式>)功能:測試<表達式>的數據類型。表達式需用定界符定界舉例: aa=10 ?type(‘aa’)說明:type函數判斷前先做宏替換操作,而vartype直接判斷(8)檢索測試函數FOUND格式:FOUND()功能:測試執行LOCATE、CONTINUE、SEEK和FIND等定位命令的定位是否成功,定位成功則FOUND()的函數值為.T.,否則為.F.。舉例:locatefor名稱=“轎車”
?found()(9)記錄刪除測試函數DELETE格式:DELETED([<表的別名>∣<工作區號>])功能:測試指定的表,或在指定工作區中所打開的表,記錄指針所指的當前記錄是否有刪除標記“*”。若有刪除標記,函數值為真,否則為假。若缺省自變量,則測試當前工作區中所打開的表。(10)表文件名測試函數DBF格式:DBF([<表的別名>∣<工作區號>])功能:測試指定的表,或在指定工作區中所打開的表在磁盤的位置。若缺省自變量,則測試當前工作區中所打開的表。舉例: ?dbf()
(11)字段數測試函數FCOUNT格式:FCOUNT([<表的別名>∣<工作區號>])功能:測試指定的表,或在指定工作區中所打開的表的字段數,若缺省自變量,則測試當前工作區中所打開的表。1.只復制表文件結構COPYSTRUCTURETO<文件名>[FIELDS<字段名表>]
功能:按指定的字段表復制表結構到一個新文件,若不指定字段表,則復制與當前表相同的結構。說明:復制時被復制的表必須是打開的;當被復制的表有對應的.FTP文件時,對應的.FTP文件會
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 皮革制品的產品差異化競爭考核試卷
- 住宅房屋裝修設計與應用考核試卷
- 礦產勘查中的礦產資源綜合利用與節能減排考核試卷
- 電子制造中的高精度切割技術考核試卷
- 燈具的智能控制系統與家居集成考核試卷
- 淀粉在工業用粘合劑的增強應用考核試卷
- 健身器材行業項目管理與質量控制考核試卷
- 2025合作經營合同協議書
- 20254月生物降解耗材采購環保降解周期檢測協議
- 居民用電安全知識培訓
- 2024年廣東省南海區中考一模數學試題(解析版)
- 煤炭開采單位產品能源消耗限額-編輯說明
- 技術標標書范本
- MOOC 思辨式英文寫作-南開大學 中國大學慕課答案
- 書香校園-世界讀書日主題教育班會
- 辦公室安全用電培訓
- 國家安全+你我共筑-415國家安全教育主題班會課件
- 餐飲前廳服務培訓課件
- 智慧農業中的農業無人機技術與應用
- 2024年6月廣東省高中學業水平考試地理試卷(含答案)
- 小學綜合實踐活動《業體驗及其他活動 走進愛國主義教育基地、國防教育場所》
評論
0/150
提交評論