第一篇:6-VFP講稿(單命令一)(定稿)
單命令(一)
一、命令基本格式。
掌握FoxPro的命令格式(也稱語法結(jié)構(gòu)、句法結(jié)構(gòu)、語法規(guī)則等)和各組成部分的功能,是學(xué)習(xí)FoxPro單命令的重要環(huán)節(jié)。為便于講述和學(xué)習(xí),此處首先給出FoxPro單命令的基本格式和大部分命令公用的組成部分。需要首先說明的是:由于FoxPro的命令比較復(fù)雜,在今后介紹有關(guān)命令的具體格式時(shí),不常用的部分將被略去,欲知其詳,可另參考有關(guān)書籍。
命令的基本格式如下:
<命令動詞> [<操作對象>|<命令短語> ?]
二、表基本操作命令 1.瀏覽命令
BROWSE [FIELDS <字段名表>] [FOR <條件>] 說明:
①“FIELDS <字段名表>”短語用于決定表中的哪些字段顯示在瀏覽窗口中、以及這些字段的顯示順序。
<字段名表>由一個或多個字段名組成,如果有多個字段名,字段名和字段名之間用逗號分隔。<字段名表>按從左至右的顯示順序列出了所有需顯示的字段,未列出的字段不被顯示。
短語舉例:FIELDS 學(xué)號,姓名,總分
如果省略了FIELDS短語,BROWSE命令按表結(jié)構(gòu)中的字段順序顯示出全部的字段。
②“FOR <條件>”短語用于選擇哪些記錄出現(xiàn)在瀏覽窗口、以及哪些不出現(xiàn)。符合條件的出現(xiàn),不符合條件的不出現(xiàn)。
短語舉例:FOR 性別=“女”.AND.職務(wù)=“經(jīng)理” 2.添加記錄命令
APPEND [FROM <表文件名>] [FIELDS <字段名表>] [FOR <條件>] APPEND BLANK
3、插入命令
INSERT [BEFORE][BLANK]
4、刪除與恢復(fù)記錄
(1)邏輯刪除記錄:DELETE [<范圍>] [FOR <條件>] 范圍短語用于確定命令的作用范圍,即命令作用于記錄的范圍。有四種具體的形式:
RECORD n 表文件中的第n條記錄。n可以是常數(shù),也可是數(shù)值表達(dá)式; NEXT n
從當(dāng)前記錄開始(包括當(dāng)前記錄)的n條記錄。n可以是常數(shù),也可是數(shù)值表達(dá)式;
REST
從當(dāng)前記錄開始(包括當(dāng)前記錄)至最后一條記錄; ALL
表文件中的所有記錄。
(2)邏輯刪除的環(huán)境設(shè)置
SET DELETE ON|OFF(3)恢復(fù)記錄:RECALL [<范圍>] [FOR <條件>](4)物理刪除記錄:PACK(5)物理刪除全部記錄:
ZAP(6)安全保護(hù)模式的設(shè)置:SET SAFETY ON|OFF 5.顯示記錄
P107 LIST | DISPLAY [<范圍>] [[FIELDS] <表達(dá)式表>] [FOR <條件>][OFF] [TO PRINTER] [PROMPT] 說明:
①LIST用于連續(xù)顯示,DISPLAY用于分屏顯示。
②當(dāng)省略范圍時(shí),LIST的默認(rèn)范圍是ALL,DISPLAY的默認(rèn)范圍是當(dāng)前記錄。③CLEAR命令清除主窗口。④OFF用于禁止輸出記錄號。
⑤TO PRINTER短語用于把結(jié)果直接打印在打印機(jī)上。
⑥執(zhí)行完顯示命令后,記錄指針指向范圍內(nèi)的最后一條記錄,如果明確指定了范圍ALL或默認(rèn)為ALL,則指向表的尾部,函數(shù)EOF()的值為.T.。
第二篇:VFP對口高考命令-3至5
DO <查詢文件名> 功能:運(yùn)行指定的查詢
例:do d:chax1.qpr 運(yùn)行名為chax1的查詢文件
MODIFY QUERY <查詢文件名> 功能:打開指定的查詢文件 例:modify query d:chax1.qpr 打開名為chax1的查詢文件
注:不論用什么方法打開查詢文件,VFP都會自動打開查詢設(shè)計(jì)器
SELECT <字段列表> FROM [數(shù)據(jù)庫名!] <表名> [,[數(shù)據(jù)庫名!] <表名>,?] [WHERE 條件] [GROUP BY 分組項(xiàng)列表] [ORDER BY 排序項(xiàng)[DESC]?] [INTO 目標(biāo)|TO FILE 文件名|TO PRINTER] 功能:從一個或多個表中查詢數(shù)據(jù)
例:select b1.語文,b1.數(shù)學(xué),b1.英語 from sjk1!b1 where b1.語文>70 group by b1.語文 order by b1.學(xué)號 desc 查詢sjk1數(shù)據(jù)庫中的b1表的語文,數(shù)學(xué),英語字段中滿足語文大于70的數(shù)據(jù),按照b1表的語文字段分組,按照b1表的學(xué)號排序,且設(shè)置排序方式為倒序。
[INTO 目標(biāo)]的“目標(biāo)”可以使用如下3種:“ARRAY 數(shù)組名”、“CURSOR 表名”、“DBF 表名”。
[ORDER BY[desc]]中若缺省“desc”則按升序排序。否則則按降序排序。[TO PRINTER]:將查詢結(jié)果送往打印機(jī)輸出
[TO FILE 文件名]:將查詢結(jié)果輸出到指定的文本文件中
CREATE VIEW <視圖名> AS <查詢語句> 功能:為當(dāng)前數(shù)據(jù)庫創(chuàng)建視圖 例:open database d:sjk1 打開數(shù)據(jù)庫sjk1
create view st1 as select * from sjk1!b1 為當(dāng)前數(shù)據(jù)庫創(chuàng)建一個視圖st1其功能為“查詢數(shù)據(jù)庫sjk1的表b1中所有字段數(shù)據(jù)”
注:使用上述命令創(chuàng)建的視圖還需要在視圖設(shè)計(jì)器中指定可更新字段,才能實(shí)現(xiàn)更新數(shù)據(jù)的功能
DROP VIEW <視圖名> 功能:刪除當(dāng)前數(shù)據(jù)庫中指定的視圖 例:open database d:sjk1 打開數(shù)據(jù)庫sjk1
drop view st1 刪除視圖st1 CREATE REPORT <報(bào)表文件名> 功能:建立一個空白報(bào)表 例:create report d:bb1 建立一個報(bào)表bb1
MODIFY REPORT <報(bào)表文件名> 功能:打開指定的報(bào)表文件 例:modify report d:bb1 打開報(bào)表bb1
REPORT FORM <報(bào)表文件名> TO PRINTER 功能:打印指定的報(bào)表 例:report form d:bb1 to printer 打印報(bào)表bb1
MODIFY COMMAND <程序文件名> 功能:建立一個程序文件 例:modify command cx1 建立一個名為cx1的程序文件并打開編寫 DO <程序文件名> 功能:運(yùn)行指定的程序 例:do d:cx1 運(yùn)行程序cx1
注:如果在A程序中使用命令調(diào)用B程序,則B程序稱為A程序的子程序,A程序稱為B程序的主程序。
VFP中可以使用“*”號和NOTE命令可以給某一行加注釋,也可以使用“&&”在語句行后面添加注釋。
注:給某一個行加注釋就是以“*”或NOTE開頭后進(jìn)行注釋,給語句行加注釋就是使用“&&”直接在語句后面加上注釋,相比來說“&&”注釋更加靈活。
例:clear &&清屏
給clear加注釋“清屏” 注:注釋的作用就是幫助理解程序的功能,以利今后修改程序時(shí)提高工作效率,一般注釋的內(nèi)容在VFP中以綠色顯示。
CLEAR 功能:清除屏幕上的顯示信息 ACCEPT [提示信息] TO <內(nèi)存變量>
功能:把用戶輸入的字符串保存到指定的內(nèi)存變量中
例:accept to x 在屏幕上光標(biāo)處輸入字符串,并將字符串保存到變量x中
accept ”請輸入x:” to x
在屏幕上”請輸入x:”后輸入字符串,并將字符串保存變量x中 INPUT [提示信息] TO <內(nèi)存變量>
功能:把用戶輸入的表達(dá)式的值保存到指定的內(nèi)存變量 例:input ”請輸入y:” to y 在“清輸入y:”后輸入數(shù)據(jù),并將數(shù)據(jù)保存到變量y中 注:input與accept的區(qū)別是,前者可以輸入數(shù)值型數(shù)據(jù)、邏輯型數(shù)據(jù),也可輸入字符型數(shù)據(jù),在輸入字符型數(shù)據(jù)時(shí)要加定界符,后者輸入的數(shù)據(jù)都一律被認(rèn)為是字符型數(shù)據(jù),且不用加定界符。
WAIT [提示信息] [TO 內(nèi)存變量] [WINDOW] [TIMEOUT 時(shí)間] 功能:等待用戶輸入一個字符
例:wait 屏幕上顯示“按任意鍵繼續(xù)?”,并要求任意輸入一個字符以繼續(xù)
wait “是否繼續(xù)(Y/N)?” to x window timeout 2 在屏幕右上角中的系統(tǒng)窗口中顯示“是否繼續(xù)(Y/N)?”系統(tǒng)窗口存在2秒,并將輸入的字符保存到變量x中
注:wait命令和accept命令中的變量的一定是字符型變量且不用加定界符,而input命令的變量的類型由輸入表達(dá)式值的數(shù)據(jù)類型決定。wait命令常用于輸入單字符和顯示信息,accept命令常用于輸入字符串,input命令常用于輸入其他類型的數(shù)據(jù)。
@<行,列> SAY <顯示信息> 功能:在指定位置輸出信息 例:@1,1 say ”你好” 在第一行第一列顯示“你好” @<行,列> [SAY 顯示信息] GET <變量> 功能:在指定位置輸入數(shù)據(jù),并把輸入的數(shù)據(jù)保存在指定的變量 例:@1,1 say”姓名:” get xm
read 在第一行第一列顯示“姓名:”并在其后面輸入數(shù)據(jù)并將數(shù)據(jù)其保存給變量xm 注:該命令需要與read命令共同使用,才能激活命令中的變量,接收輸入的數(shù)據(jù)。注:不與read命令共同使用的話,系統(tǒng)將自動將原先變量的值載入。ROW()功能:返回當(dāng)前坐標(biāo)的行坐標(biāo) COL()功能:返回當(dāng)前坐標(biāo)的列坐標(biāo) SET TALK ON|OFF
功能:設(shè)置是否顯示某些命令執(zhí)行的結(jié)果,ON為顯示,OFF為不顯示 SET SAFETY ON|OFF
功能:設(shè)置刪除文件數(shù)據(jù)時(shí)是否顯示提示信息,ON為顯示,OFF為不顯示 CLEAR ALL 功能:清除用戶自定義的內(nèi)存變量和對象 IF <條件>
功能:單分支選擇結(jié)構(gòu)
<語句組> ENDIF 例:if x<0 判斷x是否小于0,其返回值是.T.或.F.?”x小于0”
返回.T.時(shí)執(zhí)行,執(zhí)行后執(zhí)行endif后面的語句
endif
返回.F.時(shí)執(zhí)行endif后面的語句 IF<條件> 功能:雙分支選擇結(jié)構(gòu)
<語句組1> ELSE
<語句組2> ENDIF 例:if x<0 判斷x是否小于0,其返回值是.T.或.F.?”x小于0”
返回.T.時(shí)執(zhí)行,執(zhí)行后執(zhí)行endif后面的語句
else
?”x大于等于0” 返回.F.時(shí)執(zhí)行,執(zhí)行后執(zhí)行endif后面的語句
endif 注:條件是一個邏輯表達(dá)式,其返回值為.T.或.F.。
注:if和endif必須成對使用,分別表示選擇結(jié)構(gòu)開始和選擇結(jié)構(gòu)結(jié)束 DO CASE
功能:多分支選擇結(jié)構(gòu)
CASE <條件1>
<語句組1> CASE <條件2> <語句組2> ?
CASE <條件n> <語句組n> [OTHERWISE 語句組] ENDCASE 例:do case
case x=1
?”x等于1”
x等于1時(shí)執(zhí)行,執(zhí)行后執(zhí)行endcase后面的語句
case x=2 ?”x等于2”
x等于2時(shí)執(zhí)行,執(zhí)行后執(zhí)行endcase后面的語句
case x=3
?”x等于3”
x等于3時(shí)執(zhí)行,執(zhí)行后執(zhí)行endcase后面的語句
otherwise
? ”x是大于3的數(shù)”
x不滿足以上的所有條件時(shí)執(zhí)行,執(zhí)行后執(zhí)行endcase后面的語句 endcase 注:do case和endcase必須成對使用,分別表示選擇結(jié)構(gòu)開始和選擇結(jié)構(gòu)結(jié)束
DO WHILE <條件> 功能:基于條件的循環(huán)結(jié)構(gòu) <語句組>
ENDDO 例:do while x<10 判斷x是否小于10,其返回值是.T.或.F.?”x小于10”
x=x+1
返回.T.時(shí)執(zhí)行,執(zhí)行完畢后跳回循環(huán)開始處(do while <條件>)再次判斷條件是不是滿足或不滿足
enddo 返回.F.時(shí)執(zhí)行enddo后面的語句
SCAN [FOR條件] 功能:針對表記錄的循環(huán)結(jié)構(gòu) <語句組> ENDSCAN
例:use d:b1 由于是針對表記錄的循環(huán),所以需打開一張表
scan for 性別=”男”
display
每個性別字段等于“男”的記錄都會執(zhí)行一次語句組的語句,全部執(zhí)行完畢后,執(zhí)行endscan后面的語句
endscan FOR <變量>=<初值> TO <終值> [STEP 步長] 功能:指定次數(shù)的循環(huán)
<語句組> ENDFOR
例:s=0 設(shè)置累加器s
for x=1 to 11 step 2 給x賦初值1,終值11,其步長為s=s+x
因步長為2,故x的值為1、3、5、7、9、11,s將x從初值1到11的每一步的值都加起來,當(dāng)x的值下一步大于其終值時(shí),執(zhí)行endfor后面的語句
endfor 注:do while enddo,scan endscan,for endfor必須成對使用
LOOP 功能:終止本次循環(huán),使程序再次檢查是否滿足循環(huán)條件,以決定是否進(jìn)行下一次循環(huán)即直接跳回循環(huán)開始處(如do while <條件>)。
EXIT 功能:結(jié)束循環(huán),使程序執(zhí)行循環(huán)結(jié)構(gòu)后面的語句即直接跳到循環(huán)結(jié)束處(如 enddo)。PROCEDURE <過程名> 功能:定義一個過程 <語句組> ENDPROC 例:procedure x 定義一個過程,過程名為x
display
該過程的語句
endproc
結(jié)束過程
SET PROCEDURE TO [過程文件名] 功能 :打開指定的過程文件 例:set procedure to 關(guān)閉正在打開的過程
set procedure to d:gc1 打開過程文件gc1 注:缺省可選項(xiàng)則關(guān)閉已經(jīng)打開的過程文件。DO <程序名|過程名> [WITH 參數(shù)表] 功能:調(diào)用指定的程序,并把指定的參數(shù)傳遞給調(diào)用的下級程序。注:缺省可選項(xiàng),則不傳遞參數(shù)。
PAREMETERS <參數(shù)表> 功能:接受上級程序傳遞來的參數(shù) 例:input”你出生的年份:” to c
input”現(xiàn)在的年份:” to n
do c1 with c,n
調(diào)用過程c1并傳遞參數(shù)c和n,并執(zhí)行過程c1的語句
?”你現(xiàn)在”+alltrim(str(n))+alltrim(”歲”)
在屏幕上顯示“你現(xiàn)在n(變量)歲”,因n為數(shù)值型,所有要用str()函數(shù)轉(zhuǎn)換成字符型,用alltrim()函數(shù)消除多余的空格
return
procedure c1 定義過程c1
parameters x,y 接收上級傳遞過來的參數(shù),c對應(yīng)x,n對應(yīng)y
y=y-x 即用現(xiàn)在的年份減去你出生的年份,算出要計(jì)算的年齡
endproc
結(jié)束過程,并將參數(shù)y,x的值傳遞回c,n,此時(shí)執(zhí)行調(diào)用該過程之后的語句 注:在這里c,n稱為實(shí)參,即實(shí)際使用的參數(shù)。x,y稱為形參,即位置相同,形式相同的參數(shù)。
CREATE FORM <表單文件名> 功能:創(chuàng)建一個空白表單 例:create form d:bd1 建立一個名為bd1的表單 DO FORM <表單文件名> 功能:運(yùn)行指定的表單 例:do form d:bd1 運(yùn)行表單bd1
MODIFY FORM <表單文件名> 功能:打開指定的表單 例:modify form d:bd1 打開表單bd1 Thisform.refresh 功能:刷新表單
Thisform.release 功能:釋放并關(guān)閉表單,即從內(nèi)存中清除表單
Thisform.<對象名>.<屬性名>=<屬性值> 功能:修改或設(shè)置表單對象的屬性值Thisform.text1.value=”VFP”
這個表單的text1控件的value屬性值是”VFP” DO <菜單程序名> 功能:運(yùn)行指定的菜單 例:do d:cd1.mpr 運(yùn)行菜單cd1
DO <菜單程序名> WITH this ,T,功能:使用表單調(diào)用菜單 例:do d:cd1 with this ,T, 在當(dāng)前表單上調(diào)用菜單cd1
例:5
第三篇:VFP命令、函數(shù)及程序語句解讀
VFP命令、函數(shù)及程序語句大全(1 學(xué)過VFP(Microsoft Visual FoxPro的朋友都知道它是微軟公司開發(fā)的數(shù)據(jù)庫管理系統(tǒng)。它
經(jīng)歷了從dBASE、FoxBASE、FoxPro直到VFP的發(fā)展過程。本文便以VFP 6.0為例介紹它的命令、函數(shù)
及程序語句,為學(xué)習(xí)VFP的朋友提供必要的學(xué)習(xí)參考,也為已經(jīng)精通VFP的朋友提供復(fù)習(xí)的好機(jī)會。
一、主要命令:
1、CREATE 作用:建立一個新的表。
格式:CREATE [<文件>|?](注意,命令字符可取前面四個字符,后面可省略不寫,即CREA,下
同;中括號表示其中的參數(shù)是可選的;|管道符號表示兩個參數(shù)只能選擇一個,不能同時(shí)選擇,下
同。
說明:文件指建立以.dbf為擴(kuò)展名的VFP數(shù)據(jù)庫文件,在命令后面加上一個問號表示系統(tǒng)會彈出
對話框,要求用戶輸入想要建立的表名。在命令中不加文件名或問號系統(tǒng)也會彈出對話框,要求用
戶輸入想要建立的表名。
2、MODIFY STRUCTURE
作用:顯示表文件結(jié)構(gòu),并允許修改此表的結(jié)構(gòu)。格式:MODIFY STRUCTURE 說明:只有在用USE命令打開表文件以后,才能顯示或修改表文件的結(jié)構(gòu)。
3、APPEND 作用:在當(dāng)前表的尾部(無論表中有無記錄追加記錄(在當(dāng)前表指當(dāng)前正使用的表。
格式:APPEND [BLANK] 說明:在APPEND命令后面加上BLANK參數(shù)表示在當(dāng)前表的尾部添加一條空白記錄。無BLANK 參數(shù)
時(shí),表示在當(dāng)前表的尾部添加一條記錄并要求用戶輸入相應(yīng)的字段內(nèi)容。
4、INSERT 作用:在表文件中間插入一個新記錄。格式:INSERT [BEFORE] [BLANK] 說明:INSERT 在當(dāng)前記錄后插入一記錄;INSERT BEFORE 在當(dāng)前記錄前插入一記錄;INSERT BEFORE BLANK 在當(dāng)前記錄前插入一空記錄。INSERT-SQL命令追加記錄
INSERT INTO 表名[(字段1[,字段2…]];VALUES(表達(dá)式1[,表達(dá)式2…]
例:INSERT INTO XS(XH,XM,XB,XIMING VALUES(“950106”,“高山”,“男”,“”
5、UPDATE 作用:修改數(shù)據(jù)
update <表名> set <字段1=表達(dá)式1>,<字段2=表達(dá)式2...> where <條件> 例: update <表名> set <字段1,字段2...>=<表達(dá)式1,表達(dá)式2...> where <條件>
6、BROWSE 作用:主要用于打開瀏覽窗口,查閱表文件并同時(shí)進(jìn)行修改。格式:BROWSE 作用:打開一個“瀏覽”窗口,供用戶瀏覽或修改記錄。格式:BROWSE [FIELDS <字段名表>]
7、USE 作用:打開和關(guān)閉表文件。格式:USE [<文件名>] USE 說明:前一個命令用來打開<文件名>指定的表文件,該表如有備注型字段,則同時(shí)打開相應(yīng)的
備注文件(.fpt文件;后一個命令關(guān)閉當(dāng)前打開的表文件。
8、LIST和DISPLAY
作用:顯示表(.dbf的內(nèi)容、結(jié)構(gòu)或狀態(tài)。
格式:LIST|DISPLAY [OFF] [<范圍>] [FIELDS] <表達(dá)式表> [WHILE <條件>] [FOR <條件>] [TO PRINT|TO FILE <文件>] LIST|DISPLAY STRUCTURE TO PRINT|TO FILE <文件> LIST|DISPLAY STATUS [TO PRINT|TO FILE <文件>] 說明:命令帶OFF參數(shù)表示不顯示記錄號,范圍指定對哪些記錄進(jìn)行操作,范圍包括:RECORD n 第幾號記錄、NEXT n 當(dāng)前記錄開始的幾個記錄、REST 自當(dāng)前記錄開始至文件末尾的所有記錄、ALL 所有的記錄。不選范圍則隱含范圍為ALL;FIELDS后跟字段名,字段名與字段名之間用逗號分
隔。WHILE后跟條件,FOR后面也跟條件,區(qū)別是,WHILE后的條件如果不滿足,便停止查找;FOR后的條件查找所有滿足條件的記錄。TO PRINT和TO FILE <文件>分別表示將顯示結(jié)果在打印機(jī)上打印出
來和將顯示結(jié)果輸出到文件。
格式中,下面兩個命令分別為顯示表結(jié)構(gòu)(STRUCTURE和工作狀態(tài)(STATUS。注:LIST命令一次連續(xù)顯示完所有記錄內(nèi)容。DISPLAY命令在顯示記錄滿屏后,要求用戶按
任意鍵繼續(xù)顯示。如果LIST與DISPLAY都無任何選擇項(xiàng)時(shí),LIST顯示文件的全部記錄, DISPLAY僅顯示當(dāng)前記錄。
9、記錄的定位
作用:用記錄指針(POINTER定位記錄。格式: 1GO[TO] RECORD n|TOP|BOTTOM 命令定位 GO [RECORD] N GO BOTTOM GO TOP 2n 3SKIP [+|-] n 說明:第一個命令又叫絕對定位,其中,RECORD n定位到n號記錄,TOP定位到第1個記錄, BOTTOM定位到最后一個記錄。第二個命令定位到第n個記錄,n是一個數(shù)值。第三個命令又叫相對定
位,它以當(dāng)前記錄為基準(zhǔn)前移(-或后移(+n個記錄,不選任選項(xiàng),則默認(rèn)記錄指針后移一個記
錄。
LOCATE [<范圍>] FOR <表達(dá)式> 范圍: ALL NEXT N RECORD N
REST
10、CHANGE和EDIT 作用:顯示要編輯或修改的字段。
格式:CHANGE|EDIT [<范圍>] [FIELDS <字段名表>] [WHILE <條件>] [FOR <條件>]
11、REPLACE 作用:用表達(dá)式的值代替命令中與之相對應(yīng)的字段的內(nèi)容。
格式:REPLACE [<范圍>] <字段1> WITH <表達(dá)式1>[,<字段2> WITH <表達(dá)式2>] [FOR <條件> ] [WHILE<條件>] 例:USE B2-1 REPLACE ALL 工資 WITH 工資+200 FOR 工資<1000 BROW
12、DELETE、PACK、ZAP和RECALL 作用:分別是給要刪除的記錄作刪除標(biāo)記、徹底刪除、刪除所有記錄和取消被選中的表記錄的
刪除標(biāo)志。
格式:DELETE [<范圍>] [WHILE<條件>] [FOR <條件>](特例:DELETE FILE FILENAME.DBF,該命令刪除指定的表文件
PACK
ZAP RECALL [<范圍>] [FOR <條件>] [WHILE<條件>]
13、SORT和INDEX 1SORT 作用:是建立一個其記錄以新的物理順序排列的新表文件,原文件不變.格式:SORT TO <文件名> ON <字段名1> [/A] [/C] [/D][,<字段名2> [/A] [/C] [/D>...[ASCENDING|DESCENDING] [<范圍>] [FOR <條件>] [WHILE<條件>] [FIELDS<字段表>] 2INDEX 作用: 對當(dāng)前表根據(jù)關(guān)鍵字表達(dá)式的值從小到大排列,并存入TO后指定的索引文件名的文件或復(fù)合索引文件的一個標(biāo)識中。
格式: INDEX ON <關(guān)鍵字表達(dá)式> TO <文件名> INDEX ON <關(guān)鍵字表達(dá)式> TAG <標(biāo)識名> [OF <文件名>] [FOR <條件>] 說明:第1個命令中,/A按字段名升序排序,/D按字段名降序排序,/C忽略大小寫,針對字符型
關(guān)鍵字而言,ASCENDING和DESCENDING分別表示升序和降序。第1個命令建立.dbf表文件,第2個命令建立.idx單一索引文件,第3個命令建立.cdx復(fù)合索引文件(Compound Index。
刪除索引
DELETE TAG ALL [OF 復(fù)合索引文件名]
DELETE TAG 索引標(biāo)識1 [OF 復(fù)合索引文件名1][,索引標(biāo)識2 [OF 復(fù)合索引文件名2>…
14、USE <表文件名> INDEX <索引文件名表>、SET INDEX TO和SET ORDER TO 作用:分別是打開表文件的同時(shí)打開索引文件、打開索引文件和改變主索引。并確定第一個索引文件為主控索引文件.(當(dāng)前起作用的索引文件稱為主控索引文件, 當(dāng)前起作用的索引標(biāo)識稱為主控索引
格式:USE <表文件名> INDEX <索引文件名表> SET INDEX TO [<索引文件名表>] 作用:打開當(dāng)前表的一個或多個索引文件并確定第一個索引文件為主控索引文件,該命令用于單索引文件.格式:SET INDEX TO [<索引文件表>] [ADDITIVE] 說明:(1[<索引文件表>]中第一個索引文件為主控索引文件.(2若缺省ADDITIVE選項(xiàng),則在用本命令打開索引文件時(shí),除結(jié)構(gòu)復(fù)合索引文件以外的索引文件均被關(guān)閉
SET ORDER TO [<數(shù)值表達(dá)式>]|[<單索引文件名>]|[TAG] <索引標(biāo)識> [ASCENDING|DESCENDING>(特例:重新索引命令:REINDEX 作用:對于打開表時(shí)自動打開的復(fù)合索引文件確定主索引,也能確定主索引文件.(1 數(shù)值表達(dá)式表示已打開的索引的序號.系統(tǒng)先為單索引文件編號,故結(jié)構(gòu)復(fù)合索引文件的序號比單索引文件大.(2 SET ORDER TO 或 SET ORDER TO 0命令取消主索引和主索引文件,表中記錄將按物理記錄輸出.15、CLOSE INDEX 或 SET INDEX TO 單獨(dú)關(guān)閉索引文件,并不關(guān)閉與之相關(guān)的表文件
16、FIND、SEEK和LOCATE及CONTINUE 作用:前兩個命令FIND和SEEK是在一個已經(jīng)建立了索引文件的表中,定位到關(guān)鍵字中的內(nèi)容與命
令行中字符串相同的第一個記錄。后一個命令在用USE打開表文件以后,直接查詢表中字段內(nèi)容。
格式:FIND <“字符串”>|<字符串> SEEK <表達(dá)式>(表達(dá)式的數(shù)據(jù)類型可為字符型、數(shù)字型、日期型和邏輯型。LOCATE [<范圍>] [FOR <條件>] [WHILE<條件>] CONTINUE 說明:FIND命令與SEEK命令的區(qū)別是前者后跟字符串,而后者后跟表達(dá)式。在用LOCATE命令找到
一個匹配記錄后,可用CONTINUE命令搜索表的剩余部分來尋找其他匹配的記錄。
例:SET ORDER TO NL ?確定索引關(guān)鍵字為NL(年齡 FIND 28 ?找年齡字段為“28“的記錄 DISPLAY ?顯示當(dāng)前記錄
SET ORDER TO NL ?確定索引關(guān)鍵字為NL(年齡 SEEK “28”?找年齡字段為“28“的記錄
DISPLAY 17.從磁盤上刪除任意文件:(1ERASE filename|?(2DELETE FILE [filename|?]
18、COUNT 作用:統(tǒng)計(jì)當(dāng)前表文件中符合條件的記錄數(shù)。
格式:COUNT [<范圍>] [FOR <條件>] [WHILE<條件>] [TO <內(nèi)存變量名>] 說明:內(nèi)存變量名可用除參數(shù)外的任意字符。
19、SUM 作用:對當(dāng)前表中選中記錄的全部或指定的數(shù)值字段或由指定字段組成的數(shù)值表達(dá)式累加求和。
格式:SUM [<范圍>] [數(shù)值<表達(dá)式>] [TO <內(nèi)存變量名表>] [FOR <條件>] [WHILE<條件>] 20、AVERAGE 作用:對當(dāng)前表中選中記錄的全部或部分?jǐn)?shù)值型字段及其組成的表達(dá)式求平均值并顯示。
格式:AVERAGE [<范圍>] [數(shù)值<表達(dá)式>] [TO <內(nèi)存變量名表>] [FOR <條件>] [WHILE<條件>]
21、TOTAL 作用:分類匯總命令,按<表達(dá)式>做過索引或排序的表文件的數(shù)字型字段進(jìn)行分類匯總。它把與<表達(dá)式>值相同的所有記錄中的數(shù)字字段的值分別進(jìn)行求和,并各
自作為一條記錄存放在由文件指定的文件中去。在新生成的記錄中,還將包括與<表達(dá)式>值相同的所有記錄中的首項(xiàng)記錄的其他字段內(nèi)容。
格式:TOTAL TO <文件名> ON <表達(dá)式>[FIELDS <數(shù)值型字段名表>][<范圍>][FOR <邏輯表達(dá)式1>][WHILE <邏輯表達(dá)式2>] 例:USE B2-1 INDEX ON 職稱 TO ZC TATOL ON 職稱 TO B2-1T FILEDS 工資 22.APPEND FROM 作用:從其他文件向表文件添加數(shù)據(jù)。數(shù)據(jù)來源文件既可以是表文件,也可是文本文件或其他符合規(guī)定的文件。
格式:APPEND FROM <文件名>|?[FIELDS <字段名表>][FOR <邏輯表達(dá)式>] FIELDS <字段名表>和FOR <邏輯表達(dá)式>,用于源文件為表文件時(shí),指定追加記錄的字段和條件。在字段名表和邏輯表達(dá)式中的字段名,必須是在來源和目的兩個文件中公有的,共注意寬度和類型匹配。實(shí)際應(yīng)用中,數(shù)據(jù)來源文件常為表文件(.DBF和ASCII碼文本文件(.TXT 對于文本文件又有標(biāo)準(zhǔn)格式(SDF和通用格式(DELIMITED之分.例: USE B2-1 APPE FROM S3-1.TXT SDF BROWSE 23.COPY(選擇表的部分內(nèi)容生成一個新表
作用:把打開的表文件結(jié)構(gòu)及數(shù)據(jù)復(fù)制成由<文件名>所指定的并符合規(guī)定要求的文件。如果默認(rèn)全部選擇項(xiàng)和文件名的擴(kuò)展名,則結(jié)構(gòu)及全部數(shù)據(jù)都被復(fù)制,且其文件擴(kuò)展名由系統(tǒng)規(guī)定為“.DBF”。
格式:COPY TO<文件名> [FIELDS <字段名表>][<范圍>][FOR <邏輯表達(dá)式1>][WHILE <邏輯表達(dá)式2>] 格式中的或用來為新表建立一個與原表相同的結(jié)構(gòu)索引.例1: COPY TO B3-2 COPY TO S3-2.TXT SDF 例2: USE RS COPY TO RS3 FIELDS 姓名,基本工資,獎金 USE RS3 LIST 24.COPY FILE復(fù)制數(shù)據(jù)整表:(可用于復(fù)制任何類型文件 COPY FILE 原文件名 TO 目標(biāo)文件名
注:復(fù)制表時(shí),還應(yīng)當(dāng)復(fù)制和它相配的備注文件(.FPT,如有備注字段和結(jié)構(gòu)復(fù)合索引文件。
當(dāng)前表應(yīng)關(guān)閉。(如果已打開表:COPY TO 新文件名 例:將RS.DBF復(fù)制為RS1.DBF COPY FILE RS.DBF TO RS1.DBF 或USE RS
COPY TO RS1 USE RS1 LIST 25.COPY STRUCTURE(只復(fù)制結(jié)構(gòu)不復(fù)制數(shù)據(jù)
作用:表文件結(jié)構(gòu)復(fù)制,生成一個指定文件名和包括指定字段的表文件結(jié)構(gòu);如有CDX或PRODUCTION選擇項(xiàng)還將為新表建立一個與源表相同的結(jié)構(gòu)索引.格式: COPY STRUCTURE TO<文件名> [FIELDS <字段名表>] 例: COPY STRUCTURE TO B3-3 FIELDS 編號,姓名,何時(shí)工作,職稱 26.copy to建立結(jié)構(gòu)擴(kuò)展文件
作用:把已打開的表文件的結(jié)構(gòu)作為數(shù)據(jù)記錄復(fù)制到由<文件名>指定的庫文件中去.格式: COPY TO<文件名> STRUCTURE EXTENDED 例: USE B3-3 COPY TO B3-4 STRUCTURE EXTENDED USE B3-4 BROW 該命令可以用于測試表文件結(jié)構(gòu),也可以用于順序方式建立庫文件結(jié)構(gòu).新庫文件的結(jié)構(gòu)是一個由系統(tǒng)規(guī)定的標(biāo)準(zhǔn)結(jié)構(gòu),它由4個字段構(gòu)成: FIELD_NAME 字段名
FIELD_TYPE 字段類型 FIELD_LEN 字段寬度 FIELD_DEC 小數(shù)位數(shù) 27.常用命令: 庫表
建立數(shù)據(jù)庫: CREATE DATABASE 庫文件名.DBC 建立表: CREATE 表文件名.DBF CREATE TABLE/DBF 表名(各個字段屬性 打開數(shù)據(jù): OPEN DATABASE 庫文件名 打開表: USE 表文件名
使用非前庫的表:USE 庫名!表名 打開索引表:USE 表名 INDEX 索引名 顯示庫信息:DISP DATABASE [TO PRINTER] 顯示記錄:LIST(快速查看 BROWSE(分屏瀏覽可修改 DISP(顯示當(dāng)前記錄
關(guān)閉數(shù)據(jù)庫:CLOSE ALL(關(guān)閉所有庫、表、索引 關(guān)閉表: USE
CLOSE DATABASES(關(guān)閉當(dāng)前庫、表 CLOSE TABLES(關(guān)閉當(dāng)前表,不關(guān)庫 CLOSE INDEXES(關(guān)閉當(dāng)前索引
修改庫:MODI DATA 庫名 [NOWAIT] [NOEDIT] 修改表結(jié)構(gòu):MODI STRU ALTER TABLE 表名 ADD 字段名 ALTER TABLE 表名 ALTER 字段名 ALTER TABLE 表名 DROP 字段名 添加表:ADD TABLE 表名追加記錄: INSERT INTO 表名(字段名列表 VALUES(對應(yīng)數(shù)值 APPEND APPEND FROM 源文件 移去表:REMOVE TABLE 表名
刪除記錄:DELETE ALL FOR [條件](邏輯刪除 PACK(物理刪除 ZAP(全部徹底刪除
刪除庫:DELETE DATABASE 庫名(先關(guān)閉庫 刪除表:DELETE FILE 表名(先關(guān)閉表 VFP命令、函數(shù)及程序語句大全(2
二、常用函數(shù)
1、數(shù)學(xué)函數(shù) 函數(shù)用途
ABS(<數(shù)值表達(dá)式>絕對值,|x| CEILING(<數(shù)值表達(dá)式> >=自變量的最小整數(shù) EXP(<數(shù)值表達(dá)式>對基E的冪,e=2.71828 FLOOR(<數(shù)值表達(dá)式> <=自變量的最大整數(shù) INT(<數(shù)值表達(dá)式>取整(舍尾自變量
LOG(<數(shù)值表達(dá)式>自變量的自然對數(shù),ln x LOG10(<數(shù)值表達(dá)式>自變量的普通對數(shù),lg x MAX(<表達(dá)式1>,<表達(dá)式2>兩個值的最大值 MIN(<表達(dá)式1>,<表達(dá)式2>兩個值的最小值 MOD(<數(shù)值表達(dá)式1>,<數(shù)值表達(dá)式2>求余數(shù) RAND([<數(shù)值表達(dá)式1>]返回偽隨機(jī)數(shù)
ROUND(<數(shù)值表達(dá)式1>,<數(shù)值表達(dá)式2>四舍五入第一個自變量 SIGN(<數(shù)值表達(dá)式>自變量的符號 SQRT(<數(shù)值表達(dá)式>平方根(正根
2、字符串操作函數(shù) 函數(shù)用途
&<內(nèi)存變量> 用于代替內(nèi)存變量內(nèi)容
LEN(<字符串表達(dá)式>返回字符串表達(dá)式的字符個數(shù) SPACE(<數(shù)值表達(dá)式>生成空格
SUBSTR(<字符串表達(dá)式>,<數(shù)值表達(dá)式n>[,<數(shù)值表達(dá)式L>]求子字符串,從指定的字符串表達(dá)式第n個開始,總長為L的字符串
LOWER(<字符串表達(dá)式>將字符串字母轉(zhuǎn)換成小寫字母 UPPER(<字符串表達(dá)式>將字符串字母轉(zhuǎn)換成大寫字母 TRIM(<字符串表達(dá)式>刪除字符串尾空格
ASC(<字符串表達(dá)式>返回字符串表達(dá)式最左邊的第一個字符的ASCII碼 CHR(<數(shù)值表達(dá)式>將數(shù)值表達(dá)式轉(zhuǎn)換成字符
AT(<字符串表達(dá)式1>,<字符串表達(dá)式2>[,<數(shù)值表達(dá)式n>] 確定字符串表達(dá)式1在字符串表達(dá)式2中的位置,n為字符串表達(dá)式第幾次出現(xiàn) STR(<數(shù)值表達(dá)式>[,<數(shù)值表達(dá)式L>][,<數(shù)值表達(dá)式n>將數(shù)值轉(zhuǎn)換為字符串,L為數(shù)值表達(dá)式總長,n為小數(shù)位數(shù)
VAL(<字符串表達(dá)式>將數(shù)字字符串轉(zhuǎn)換為數(shù)字 TYPE(<表達(dá)式>檢測表達(dá)式值的數(shù)據(jù)類型 LTRIM(<字符串表達(dá)式>刪除字符串左部空格 RTRIM(<字符串表達(dá)式>刪除字符串右部空格
LEFT(<字符串表達(dá)式>,<數(shù)值表達(dá)式n>取字符串左邊部分字符,n為返回的字符個數(shù)
RIGHT(<字符串表達(dá)式>,<數(shù)值表達(dá)式n>取字符串右邊部分字符,n從右邊截取字符個數(shù)
3、表(.dbf操作函數(shù)
函數(shù)用途
BOF([<工作區(qū)號或別名>]查表文件開始函數(shù) EOF([<工作區(qū)號或別名>]表文件結(jié)尾測試函數(shù)
RECNO([<工作區(qū)號或別名>]測試當(dāng)前或指定工作區(qū)表的當(dāng)前記錄號 DELETED([<工作區(qū)號或別名>]記錄刪除測試函數(shù) FILE(<“字符串”>測試文件是否存在函數(shù) DBF([<工作區(qū)號或別名>]檢測表的文件名函數(shù)
4、日期、時(shí)間函數(shù) 函數(shù)用途
DATE(查系統(tǒng)當(dāng)前日期函數(shù)
TIME([<數(shù)值表達(dá)式>]查系統(tǒng)當(dāng)前時(shí)間函數(shù)
YEAR(<日期型表達(dá)式>|<日期時(shí)間型表達(dá)式>由日期查年函數(shù) MONTH(<日期型表達(dá)式>|<日期時(shí)間型表達(dá)式>從日期查月份函數(shù) CMONTH(<日期型表達(dá)式>|<日期時(shí)間型表達(dá)式>由日期查月份名函數(shù) DAY(<日期型表達(dá)式>|<日期時(shí)間型表達(dá)式>從日期查當(dāng)月的日函數(shù)
DOW(<日期型表達(dá)式>|<日期時(shí)間型表達(dá)式>[,<數(shù)值表達(dá)式>]由日期查星期函數(shù)
CDOW(<日期型表達(dá)式>|<日期時(shí)間型表達(dá)式>從日期查星期名函數(shù) DTOC(<日期型表達(dá)式>|<日期時(shí)間型表達(dá)式>日期轉(zhuǎn)換為字符函數(shù)
CTOD(<字符串表達(dá)式>字符串轉(zhuǎn)換為日期函數(shù) CTOT(<字符串表達(dá)式>返回日期時(shí)間值函數(shù) TTOC(<日期時(shí)間型表達(dá)式>返回字符值
5、顯示、打印位置函數(shù) 函數(shù)用途
ROW(判斷光標(biāo)行位置函數(shù) COL(判斷光標(biāo)列位置函數(shù)
INKEY([<數(shù)值表達(dá)式>]檢測用戶所擊鍵對應(yīng)的ASCII碼函數(shù),數(shù)值表達(dá)式以秒為單位等待擊鍵的時(shí)間
6、其他函數(shù) 函數(shù)用途
DISKSPACE(返回默認(rèn)磁盤驅(qū)動器中可用字節(jié)數(shù)函數(shù) OS(檢測操作系統(tǒng)名稱的函數(shù) VERSION(返回VFP版本號的函數(shù) VFP命令、函數(shù)及程序語句大全(3
三、主要程序語句
1、條件判斷語句 格式:(1IF <條件> <命令語句組>
ENDIF 說明:如果條件為真,則執(zhí)行命令語句組中的各語句,否則跳過這些命令語句不執(zhí)行, 而執(zhí)行ENDIF后的語句。(2IF <條件> <命令語句組1> ELSE <命令語句組2> ENDIF 說明:如果條件為真,執(zhí)行命令語句組1,否則執(zhí)行命令語句組2。(3IF <條件1> IF <條件2> <命令語句組1> ELSE <命令語句組2> ENDIF...ELSE <命令語句組N>
ENDIF 說明:進(jìn)行多重條件的嵌套選擇。(4DO CASE CASE <條件1> <命令語句組1> CASE <條件2> <命令語句組2> CASE <條件3> <命令語句組3>......CASE <條件N> <命令語句組N> [OTHERWISE] [<命令語句組N+1>] ENDCASE 說明:依次判斷條件,轉(zhuǎn)入條件為真的命令語句組中執(zhí)行。當(dāng)所有條件都不成立時(shí),若有
OTHERWISE項(xiàng),則執(zhí)行命令語句組N+1,否則執(zhí)行ENDCASE后面的語句。
2、循環(huán)語句
格式:(1DO WHILE <條件> <命令語句組> [LOOP] <命令語句組> [EXIT] <命令語句組> ENDDO 說明:判斷條件是否為真,如為真就重復(fù)執(zhí)行循環(huán)體中的命令語句組,直到條 件為假,結(jié)束循環(huán)。(2)SCAN <命令語句組> ENDSCAN 說明:在一個表中建立一個執(zhí)行命令語句組的循環(huán),并執(zhí)行對每一條記錄的操 作,直到表文件 記錄完為止。
第四篇:vfp命令、語句等說明總結(jié)
VFP命令、函數(shù)及程序語句大全
VFP提供一些簡單的程序設(shè)計(jì)語言命令,包括賦值語句、控制語句、設(shè)置命令等,我們可根據(jù)某種功能的需要,利用這些命令及數(shù)據(jù)庫操作的有關(guān)命令構(gòu)成語句,分行存在文件中(稱為命令文件,以. PRG為擴(kuò)展名,在項(xiàng)目管理器中標(biāo)為“程序”)或一些對象的過程或事件處理程序中。如被調(diào)用,系統(tǒng)將一條條順序執(zhí)行各行命令,如遇到控制語句(IF,DO,CALL,F(xiàn)OR?等),依據(jù)控制語句的指定,轉(zhuǎn)移到指定語句再一條條順序執(zhí)行。
這些命令書寫時(shí),每條語句應(yīng)在一行中寫完,如不能寫完,可用分號“;”結(jié)束,表示下一行繼續(xù)。兩條語句不能寫在一行上。每條語句中命令字及選項(xiàng)中保留字大多數(shù)可只書寫前四個字符。
一般一個簡單的VFP應(yīng)用系統(tǒng)由若干模塊組成,各自完成一定的功能,總的系統(tǒng)用一個總控模塊去控制,通過它調(diào)用子模塊,層層調(diào)用以實(shí)現(xiàn)全系統(tǒng)的功能。這種結(jié)構(gòu)如圖5.4所示。這種方式便于設(shè)計(jì)、調(diào)試,保證程序的正確性,也容易實(shí)現(xiàn)模塊共亭,實(shí)現(xiàn)軟件重用,提高程序設(shè)計(jì)效率。
主模塊可由主封面表單、主命令文件和主菜單文件構(gòu)成;各個模塊可由過程、自定義函數(shù)、表單、表單集、應(yīng)用程序或子菜單等構(gòu)成。
一個表單或一個表單集中可有一到多個用戶界面,可設(shè)置一到多個命令按鈕及其他程序控件,用戶可利用按鈕及程序控件,產(chǎn)生特定的消息觸發(fā)執(zhí)行一個程序,完成一個功能。應(yīng)用程序是對一個模塊編譯后的. APP執(zhí)行文件,“過程”是由命令組成的程序,以RETURN語句結(jié)束,它可為另一個程序所調(diào)用,調(diào)用執(zhí)行時(shí)遇到RETURN語句將返回其調(diào)用程序。
圖 5.4 VFP程序總體結(jié)構(gòu)
一.變量賦值與顯示語句
在項(xiàng)目管理器中選“代碼→程序→新建”或在命令框利用命令MODIFY COMMAND建立命令文件。
1.MODIFY COMMAND
意義:創(chuàng)建命令文件。
命令格式:MODIFY COMMAND 文件名
例如:MODIFY COMMAND PROC1
執(zhí)行此命令后,將進(jìn)入全屏幕編輯狀態(tài)。如原已建立了該文件proc1,將調(diào)出該文件在屏幕上顯示,用戶可對之修改。如是新文件,則用戶可利用全屏幕編輯鍵,輸入自己的程序。新文件將自動加上擴(kuò)展名.PRG。
2.DO
意義:執(zhí)行命令文件程序,有三種方法:①在項(xiàng)目管理器中選“代碼→程序→選擇程序名→運(yùn)行”。②在主菜單中選“程序→運(yùn)行→輸入(選擇)程序名→運(yùn)行”。③在程序中或命令窗日中使用DO命令。命令格式:DO 程序名[WITH 表達(dá)式表]
程序名可以是上述方式建立的命令文件(.PRG文件)、可執(zhí)行文件(.EXE文件)、應(yīng)用程序(.APP文件),及對.PRG文件編譯后的文件(.FXP文件)。如調(diào)用DO命令時(shí)不帶擴(kuò)展名,則按.EXE文件、.APP文件、.FXP文件、.PRG文件的順序查找同名程序并執(zhí)行之。
例如:DO PROC1
此外,程序名還可能是菜單程序,調(diào)用時(shí)必須帶擴(kuò)展名(.MPR)。例如,有菜單程序MAIN.MPR,則可如下調(diào)出執(zhí)行:
DO MAIN.MPR
程序名還可以是事件名或過程名。
其中表達(dá)式表由多個表達(dá)式組成,用逗號分開,在執(zhí)行時(shí)首先計(jì)算各表達(dá)式的值,并帶入被調(diào)程序,被調(diào)程序第一句應(yīng)是LPARAMETERS形參表語句,形參表是以逗號分隔的多個內(nèi)存變量名,其個數(shù)應(yīng)等于調(diào)用時(shí)的表達(dá)式的個數(shù),執(zhí)行時(shí),首先用調(diào)用語句中各表達(dá)式的值對應(yīng)給它們賦值。
例如:主程序中:DO PROC1 WITH “AB”,21
被調(diào)程序:LPARAMETERS M1,X0
執(zhí)行時(shí),首先完成賦值:M1=“AB”;X0=21,再往下執(zhí)行。
當(dāng)使用DO運(yùn)行一個程序時(shí),包含在其中的命令一直執(zhí)行,直到下列某一事件發(fā)生。遇到RETURN語句,返回到調(diào)用程序DO命令的下一句,遇到了CANCEL命令,返回VFP命令狀態(tài)。遇到QUIT命令退出程序并退出VFP;到達(dá)文件尾回到調(diào)用前狀態(tài);再遇到另一個DO命令,將轉(zhuǎn)人新程序執(zhí)行。
3.PUBLIC
意義:設(shè)置全局性內(nèi)存變量命令。
格式:PUBLIC 變量名1[,變量名2]?
在不同程序或過程或事件中,同名內(nèi)存變量的值不一定相同,如要將一個程序(過程、事件)中變量的值傳到另一程序(過程、事件)中,可應(yīng)用上述命令將它定義成全局變量。
4.PRIVATE
意義:設(shè)置局部變量的命令。
格式:PRIVATE[ALL[LIKE∣EXCEPT 通配符]∣內(nèi)存變量表]
其中選項(xiàng)意義:ALL將所有內(nèi)存變量說明為局部性變量,ALL[LIKE∣EXCEPT 通配符]將變量名能與通配符相匹配的內(nèi)存變量說明為局部性變量?!癆LL EXCEPT通配符”將除了能與通配符相匹配的變量名之外的內(nèi)存變量說明為局部性變量。在程序中,為了一個程序的運(yùn)行結(jié)果不影響另一個程序的執(zhí)行,不希望同名變量將值從一個程序帶到另一個程序而造成干擾。為此,可將該變量定義成局部性變量。
5.DIMENSION
意義:定義內(nèi)存變量數(shù)組命令,VFP中可定義一維或二維數(shù)組。
格式:DIMENSION 數(shù)組名(數(shù)字表達(dá)式1[,數(shù)字表達(dá)式2])[,數(shù)組名2(數(shù)字表達(dá)式1[,數(shù)字表達(dá)式2])]?
每個數(shù)組的每個元素都可單獨(dú)使用,如同一個內(nèi)存變量,稱為下標(biāo)變量,下標(biāo)起始值為1。
例如,DIMENSION ARRAY1(8,20),X1(30)定義了兩個數(shù)組,數(shù)組名分別為ARRAY1和X1,前一個數(shù)組共有20×8=160個元素:ARRAY1(l,l)、ARRAY1(l,2)?? ARRAY1(l,20),ARRAY1(2,1)?ARRAY1(8,20)。對各元素也可用單下標(biāo)取用其值,如用ARRAY1(l),ARRAY1(2)?ARRAY1(160)也可訪問該數(shù)組各元素,與前面雙下標(biāo)表示形式一一對應(yīng)。
6.PUBLIC ARRAY
意義:定義全局性內(nèi)存變量數(shù)組。
格式:PUBLIC ARRAY 數(shù)組名(數(shù)字表達(dá)式1[,數(shù)字表達(dá)式2])[,數(shù)組名2(數(shù)字表達(dá)式1[,數(shù)字表達(dá)式2])]?
7.=
意義:賦值語句。
將表達(dá)式的值賦值給一個內(nèi)存變量。對變量賦值后,該變量類型也即確定為表達(dá)式返回值的類型。對一個變量可重復(fù)賦值,也可改變變量的類型。但為了保證程序的清晰和結(jié)構(gòu)完整,建議在一個系統(tǒng)中每個變量名應(yīng)有確定的意義和數(shù)據(jù)類型。
8.STORE
意義:同時(shí)對多個變量賦值命令。
格式:STORE 表達(dá)式 TO變量1[,變量2]?
在程序運(yùn)行時(shí)常要求用戶輸入控制參數(shù)或數(shù)據(jù),實(shí)現(xiàn)此功能語句我們稱為人機(jī)對話語句。在程序中如插入人機(jī)對話語句,用戶可借助鍵盤輸入?yún)?shù)或控制量賦值給變量??刂瞥绦蜃呦?,或用于不同數(shù)據(jù)處理。在程序執(zhí)行到這類語句時(shí),將停止運(yùn)行,在屏幕上顯示命令中附注的提示信息,同時(shí)等待用戶從鍵盤輸入數(shù)據(jù),賦給所指定的變量。完成賦值之后再接著運(yùn)行下一條語句。在VFP中這類語句可在主控程序中或在調(diào)試程序時(shí)使用,在表單程序中使用文本框等各種控件及消息框代替它們。
9.INPUT
意義:輸入各種類型數(shù)據(jù)賦給內(nèi)存變量
格式:INPUT “提示信息” TO 內(nèi)存變量名
本命令允許輸入字符類型、數(shù)值類型、日期類型、邏輯類型等不同類型的數(shù)據(jù),要求輸入數(shù)據(jù)是字符類型時(shí),數(shù)據(jù)兩端要加定界符,例“張平”;輸入數(shù)據(jù)是日期類型時(shí),要按{MM/DD/YY}或設(shè)定的格式,例{12/21/00};邏輯類型按.T.、.F.格式。
用戶輸入還可以是包括變量名及函數(shù)在內(nèi)的表達(dá)式,但變量必須是己賦值的,表達(dá)式是可以計(jì)算出確定值的。用戶輸入完后回車表示輸入結(jié)束。
例:INPUT“請輸入初始日期:” TO D1
屏幕上顯示:“請輸入初始日期:”,光標(biāo)在此句之后。用戶可輸入{05/10/96}。
此時(shí)用戶如果執(zhí)行命令:?D1
屏幕上將顯示:05/10/96
10.ACCEPT
意義:輸入字符串賦給變量。
格式:ACCEPT[“提示內(nèi)容”]TO內(nèi)存變量名
該命令和INPUT命令區(qū)別有兩點(diǎn):
.輸入數(shù)據(jù)均被視為字符類型。
.輸入數(shù)據(jù)兩端不需加定界符,如加了定界符,定界符被視作字符串的一部分。
11.WAIT
意義:接收單個字符賦給變量,或中斷程序,按任意鍵后繼續(xù)。
格式:WAIT [“提示信息”] TO 內(nèi)存變量名
該命令與ACCEPT命令不同點(diǎn)在于只接收從鍵盤輸入的一個字符,用戶輸入一個字符后無須回車。該命令也可用在VFP表單程序的某個事件中,用于中斷該事件的執(zhí)行,讓屏幕顯示程序運(yùn)行的中間結(jié)果,按某個鍵或單擊鼠標(biāo)后再繼續(xù)執(zhí)行。
12.GET
意義:格式化輸入數(shù)據(jù),給內(nèi)存變量賦值或修改表中當(dāng)前記錄字段內(nèi)容。
格式:@ 行號,列號 GET 內(nèi)存變量名或字段名
[FUNCTION功能代碼][PICTURE格式代碼][DEFAULT表達(dá)式][MESSAGE提示信息]
[RANGE輸入值范圍下限,輸入值范圍上限][SIZE文本框高度,文本框?qū)挾萞[VALID 條件表達(dá)式]
該命令可用于對內(nèi)存變量賦值,也可用于修改當(dāng)前打開表中當(dāng)前記錄中指定字段的內(nèi)容。如對內(nèi)存變量賦值且省略DEFAULT選項(xiàng),在使用此語句時(shí),必須已對該內(nèi)存變量賦值。否則按此選項(xiàng)中表達(dá)式對內(nèi)存變量初始化。
本命令執(zhí)行后只顯示內(nèi)存變量或字段當(dāng)前值,要到執(zhí)行命令“READ”時(shí),此語句方被激活,程序停止執(zhí)行,等待用戶從鍵盤輸入數(shù)據(jù),直待回車后才繼續(xù)執(zhí)行。行號、列號為當(dāng)前窗口中字符行和列的位置號。行號與列號允許是小數(shù)。FUNCTION選項(xiàng)用于對輸入內(nèi)容限制或變化。功能代碼:
A:只允許輸入內(nèi)容由字母字符組成,包括不允許空格和標(biāo)點(diǎn)符號。
B:數(shù)值數(shù)據(jù)左對齊,默認(rèn)格式為右對齊。
I:文本居中對齊。
J:文本右對齊,默認(rèn)為左對齊。
Sn:限定文本框中字符個數(shù)為n。如S20。
T:去掉前導(dǎo)和后綴空格。
Z:當(dāng)數(shù)值數(shù)據(jù)值為0時(shí)顯示空格。
!:把字母字符轉(zhuǎn)換為大寫。
PICTURE選項(xiàng)用于限定輸入數(shù)據(jù)的字符類型及大小。功能代碼例:
A:該位為字母或數(shù)字
L:只允許邏輯數(shù)據(jù)。
N:該位為字符或數(shù)字。
X:任何字符。
I:該位為數(shù)字,或數(shù)值數(shù)據(jù)中的符號。
-:標(biāo)明小數(shù)點(diǎn)位置。,:用逗號分隔左右數(shù)字。
!:將小寫字母轉(zhuǎn)換為大寫字符。
例:@3,10 GET x1 DEFAULT 0 PICTURE“9999.99”
此時(shí)在屏幕第3行的第10列位置顯示方框,其中內(nèi)容為DEFAULT規(guī)定的初始值0.00,如再發(fā)出命令:READ,將光標(biāo)落在尚未激活的第一個方框上等待輸入,只能輸入數(shù)字和符號,且整數(shù)部分不多于4位,小數(shù)部分不多于2位,否則將提示“請您重新輸入”。
RANGE、VALID兩個選項(xiàng)用于保證數(shù)據(jù)完整性,輸入數(shù)據(jù)必須在預(yù)定范圍內(nèi),滿足條件表達(dá)式要求時(shí),才可完成賦值操作。本語句還有設(shè)置字體、字形和顏色的選項(xiàng)。
在VFP中,綜合上述人機(jī)交互命令尤其是@? GET命令的功能和特性,設(shè)計(jì)了文本框、編輯框等類和控件,便之應(yīng)用更加方便、簡單,我們將在下一章中介紹。
程序運(yùn)行結(jié)果一般由輸出語句使其顯示在屏幕上或輸出到其他地方,輸出語句可將數(shù)據(jù)輸出到屏幕上顯示也可傳送給打印機(jī)或傳送存入到其他文件中。屏幕顯示語句在VFP中一般用在主控程序或調(diào)試程序時(shí)使用。在表單程序中使用各種控件、消息框代替它們。
13.?|??
意義:計(jì)算<表達(dá)式表>所指定的各表達(dá)式的值,并顯示在屏幕上。
格式:?表達(dá)式1[,表達(dá)式2]?
用?時(shí),從下一行第一列起顯示結(jié)果。用??時(shí),從當(dāng)前行當(dāng)前列起顯示結(jié)果。
14.SAY
意義:格式化輸出語句。
格式:@行號,列號 SAY表達(dá)式[FUNCTION功能代碼] [PICTURE格式代碼][SIZE高度,寬度]
有關(guān)選項(xiàng)的意義與@?GET命令相似,此外還有關(guān)于字體,顏色設(shè)置的選項(xiàng)。若發(fā)出有SET DEVICE TO PRINTER命令,輸出到打印機(jī),否則輸出至屏幕上顯示。
本語句常與@? GET語句合用,合用時(shí),行號、列號指SAY內(nèi)容顯示所在行、列號,GET變量內(nèi)容框?qū)⒎胖迷赟AY內(nèi)容之后。二.程序控制命令
1.IF?ENDIF命令
意義:分支條件語句,根據(jù)邏輯表達(dá)式的值,有選擇的執(zhí)行一組命令。根據(jù)條件表達(dá)式的值是.T.還是.F.控制程序流向。
格式:
IF 條件表達(dá)式
語句序列1
[ELSE
語句序列2]
ENDIF
IF條件表達(dá)式語句是條件語句的開始,ENDIF語句是條件語句的終止。語句序列是若干條順序執(zhí)行的語句。執(zhí)行時(shí)首先計(jì)算條件表達(dá)式的值,如結(jié)果為“真”(.T.)則執(zhí)行語句序列l(wèi),執(zhí)行完后退出該語句。如條件表達(dá)式不滿足,且有ELSE語句和語句序列2,則執(zhí)行語句序列2。其程序流程圖如圖5.5所示。
圖5.5 分支結(jié)構(gòu)程序流程圖
圖5.6 主控模塊程序流程圖
在一個分支控制語句塊中可以嵌套另一個IF?ENDIF語句塊?!纠?.7】主控模塊的程序
程序流程圖如圖5.6所示。編寫程序清單如下: CLEAR &&清屏幕
@ 5,27 SAY “設(shè)備管理系統(tǒng)” @ 7,36 SAY “主菜單”
@10,21 PROMPT “1.各種查詢、屏幕修改”+SPAC(16)@11,21 PROMPT “2.數(shù)據(jù)編輯”+SPAC(26)@12,21 PROMPT “3.資產(chǎn)統(tǒng)計(jì)”+SPAC(26)@13,21 PROMPT “4.報(bào)表打印”+SPAC(26)@14,21 PROMPT “5.系統(tǒng)維護(hù)”+SPAC(26)MENU TO m_choic &&等待用戶輸入
IF LASTKEY()=27 &&按Esc鍵返回VFP
RETURN ENDIF
IF m_choic=1
DO sbcx_sc.spr
ELSE
IF m_choic=2
DO sjbj_sc.spr
ELSE
IF m_choic=3
DO zctj_sc.spr
ELSE
IF m_choic=4
DO bbdy_sc.spr
ELSE
IF m_choic=5
DO xtwh_pg
ENDIF
ENDIF
ENDIF
ENDIF ENDIF RETURN
2.CASE
意義:分情況語句,當(dāng)求解一個問題存在多種情況,如要求對不同選擇執(zhí)行不同的語句序列,可采用分情況語句。該語句一句中列出許多語句成分,每個語句成分給出一個條件表達(dá)式,每次只根據(jù)具體條件找出第一個條件表達(dá)式值為.T.的語句成分,執(zhí)行該成分語句中的語句序列后退出該語句。
命令格式:
DO CASE
CASE條件表達(dá)式1
語句序列1
CASE條件表達(dá)式2
語句序列2
?
CASE條件表達(dá)式n
語句序列n
[OTHERWISE
語句序列n+1]
END CASE
執(zhí)行該語句時(shí),系統(tǒng)逐一計(jì)算條件表達(dá)式1的值,條件表達(dá)式2的值?只要有一個條件表達(dá)式的值為.T.則執(zhí)行其后語句序列,執(zhí)行它后退出本分情況語句。
如到條件表達(dá)式n的值仍均為.F.又有OTHERWISE成分,則執(zhí)行語句序列n+l,其程序流程圖如圖5.7所示。
仍如上面主控程序的例子,程序可設(shè)計(jì)為:
CLEAR &&清屏幕
@ 5,27 SAY “設(shè)備管理系統(tǒng)”
@ 7,36 SAY “主菜單”
@10,21 PROMPT “1.各種查詢、屏幕修改”+SPAC(16)
@11,21 PROMPT “2.數(shù)據(jù)編輯”+SPAC(26)
@12,21 PROMPT “3.資產(chǎn)統(tǒng)計(jì)”+SPAC(26)
@13,21 PROMPT “4.明細(xì)報(bào)表打印”+SPAC(22)@14,21 PROMPT “5.系統(tǒng)維護(hù)”+SPAC(26)MENU TO m_choic &&等待用戶輸入
IF LASTKEY()=27 &&按Esc鍵返回VFP
RETURN ENDIF
DO CASE
CASE m_choic=1
DO sbcx_sc.spr
CASE m_choic=2
DO sjbj_sc.spr
CASE m_choic=3
DO zctj_sc.spr
CASE m_choic=4
DO bbdy_sc.spr
CASE m_choic=5
DO xtwh_pg
ENDCASE
RETURN
圖5.7 CASE結(jié)構(gòu)程序流程圖
從上面兩段程序可見,對于同一個問題,用DO CASE ?ENDCASE 語句比IF?ENDIF語句要簡潔了并且邏輯關(guān)系清晰,因此不容易出錯。在分情況語句中也可嵌入分支條件語句及分情況。它本身也可嵌入到分支條件語句中去使用。
在對數(shù)據(jù)表中數(shù)據(jù)時(shí),常常每條記錄被處理的過程是一樣的,處理語句也就大體相同,如果表中有多少記錄就寫多少條語句是十分困難的,為避免重復(fù)書寫,可使用循環(huán)。
3.DO WHILE?.ENDDO
意義:循環(huán)語句,可使多次重復(fù)執(zhí)行同一組語句。格式:
DO WHILE條件表達(dá)式
語句序列
[LOOP]
[EXIT]
ENDDO
其中“DO WHILE條件表達(dá)式”語句稱為循環(huán)起始語句,“ENDDO”語句稱為循環(huán)結(jié)束語句,進(jìn)入此命令時(shí)首先檢查條件表達(dá)式的值是否為真(.T.)。如果是真,則執(zhí)行語句序列,然后再判斷條件表達(dá)式的結(jié)果,如仍為真,則繼續(xù)下去。如果為假(.F.)則退出循環(huán),執(zhí)行ENDDO后面的語句。如果進(jìn)入本命令一開始,條件表達(dá)式的值為假,則語句序列一次也不執(zhí)行,就直接轉(zhuǎn)入執(zhí)行ENDDO后面的語句。其中LOOP意義為結(jié)束本次循環(huán),返回循環(huán)體開始。EXIT意義為結(jié)束循環(huán),轉(zhuǎn)入執(zhí)行ENDDO后面的語句。
LOOP語句和EXIT語句一般用在分支條件語句中,因而語句格式為:
DO WHILE 條件表達(dá)式1
語句序列1
[IF條件表達(dá)式2
LOOP
ELSE
語句序列2
ENDIF]
[IF條件表達(dá)式3
EXIT
ELSE
語句序列3
ENDIF]
ENDDO
其程序流程圖如圖5.8所示。
在使用時(shí)必須保證經(jīng)有限次循環(huán)后條件表達(dá)式1應(yīng)變?yōu)榧倩驐l件表達(dá)式3的值應(yīng)變?yōu)檎?,使退出循環(huán)。否則就可能成為死循環(huán)。在條件表達(dá)式中的變量稱循環(huán)變量,在數(shù)據(jù)庫中循環(huán)變量可能是內(nèi)存變量,也可能是表中的指針。必須注意在每次循環(huán)過后,循環(huán)變量的值都要改變并且是向最終使條件表達(dá)式1的值為假或條件表達(dá)式3的值變真的方向變化,否則就無法滿足前述退出條件。在VFP中有兩類特殊用法。
(1)循環(huán)變量是指針。該用法中有兩種結(jié)構(gòu)①指針首先指向第一條的DO WHILE結(jié)構(gòu)如圖5.9所示。②指向滿足條件記錄的第一條的DO WHILE結(jié)構(gòu)如圖5.10所示。
圖5.8 DO WHILE?ENDDO結(jié)構(gòu)程序流程圖
圖5.9 指針做循環(huán)變量開始指向第一條時(shí)的DO WHILE結(jié)構(gòu)流程圖
圖5.10 指針做循環(huán)變量開始指向滿足條件記錄的第一條時(shí) 的DO WHILE結(jié)構(gòu)流程圖
格式1:圖5.9實(shí)現(xiàn)的語句。
USE(表名)
SELECT工作區(qū)別名
GO TOP
DO WHILE NOT EOF()
語句序列
SKIP
ENDDO
在本格式中,循環(huán)變量是表中指針,首先讓指針指向表的第一條記錄,如果不是文件尾,則執(zhí)行語句序列之后讓指針下移一條,再返回判斷指針是否指向文件尾。這樣一直繼續(xù)下去直到指針指到最后一條記錄的后面,循環(huán)結(jié)束。
【例5.8】在學(xué)生表中有少數(shù)學(xué)生更換了班級,現(xiàn)要求在屏幕上一屏一屏地顯示每個學(xué)生的數(shù)據(jù),并提問是否修改班級名稱,如回答“Y”,則提供修改框。
SET TALK OFF
USE學(xué)生
KEY=“Y”
GO TOP
DO WHILE NOT EOF()
@3,10 SAY“姓名:”+姓名
@5,10 SAY“班級:”+班級
@7,10 SAY“出生日期:”+DTOC(出生日期)
@9,10 SAY“是否修改,Y/N?’GET KEY
READ
IF UPPER(KEY)=“Y”
@11,10 SAY“請輸入改后班級名稱” GET 班級
READ
ENDIF
SKIP
ENDDO
USE
SET TALK ON
格式2:如果只按某個條件查看記錄,則可用查找語句開始。圖5.10實(shí)現(xiàn)語句:
LOCATE FOR條件表達(dá)式
DO WHILE NOT EOF()
語句序列
CONTINUE
ENDDO
例5.8中如只查99級學(xué)生,顯示其姓名則:
LOCATE FOR “99”$班級
DO WHILE NOT EOF()
?姓名
CONTINUE
ENDDO
(2)當(dāng)于DO UNTIL的循環(huán)結(jié)構(gòu)。
有些循環(huán)要在執(zhí)行部分語句之后再根據(jù)一個條件表達(dá)式判斷是否結(jié)束,此時(shí)循環(huán)條件可用常量.T.,見圖5.11所示。
圖5.11 DO UNTIL結(jié)構(gòu)程序流程圖
語句格式: DO WHILE.T.語句序列
IF 條件表達(dá)式
EXIT ENDIF
ENDDO
【例5.9】求編寫學(xué)生表錄入新數(shù)據(jù)的程序,每次錄入一條記錄,之后提問是否繼續(xù),如回答不是“Y”,就停止錄入。
SET TALK OFF
USE 學(xué)生
KEY=“ ”
DO WHILE.T.APPEND BLANK
@3,10 SAY“姓名:” GET 姓名
@5,10 SAY“班級:” GET 班級
@7,10 SAY“出生日期:”GET 出生日期
READ
@9,10 SAY“否繼續(xù)?Y/N?” GET KEY
READ
IF UPPER(KEY)<>“Y”
EXIT
ENDIF
ENDDO
USE
SET TALK ON
此語句由用戶輸入Y或N控制程序結(jié)束。
上述第一、二兩種格式可以用等價(jià)的SCAN循環(huán)取代。
4.SCAN?ENDSCAN循環(huán)語句
意義:在數(shù)據(jù)表中循環(huán)檢查或處理一條條記錄。
命令格式一:
SCAN
語句序列
ENDSCAN
此句等價(jià)于前述格式1的語句。
命令格式二:
SCAN FOR條件表達(dá)式
語句序列
ENDSCAN
本語序等價(jià)于前述格式2的語句。有一些循環(huán)次數(shù)是一定的,或者循環(huán)變量的值在每次循環(huán)中增加的量是相同的,則可應(yīng)用FOR循環(huán)。
5.FOR?ENDFOR循環(huán)語句
命令格式:
FOR內(nèi)存變量=初始值 TO 終了值[STEP 增量]
語句序列
ENDFOR
此循環(huán)以某個內(nèi)存變量為循環(huán)變量,進(jìn)入循環(huán)時(shí)首先給它賦初始數(shù)值,只要不超過終了值,則執(zhí)行語句序列。STEP語句為可選項(xiàng),指示在每次循環(huán)后循環(huán)變量的增加量。前面執(zhí)行語句序列之后,將循環(huán)變量值增加增量的值,再判斷是否超過終了值,這樣繼續(xù)下去直到超過終了值。增量可為正值也可為負(fù)值,省略時(shí)默認(rèn)值是1。如增量為正,則當(dāng)循環(huán)變量大于終了值時(shí),循環(huán)結(jié)柬。如增量為負(fù),則每循環(huán)一次,循環(huán)變量均減小,減少到小于終了值時(shí)循環(huán)結(jié)束。
例5.8中修改班級名的程序也可寫為:
SET TALK OFF
USE 學(xué)生
KEY=“ ”
N=RECCOUNT()&&記錄總條數(shù)
FOR I=1 TO N
@3,10 SAY“姓名:”十姓名
@5,10 SAY“班級:”十班級
@7,10 SAY“出生日期:”+DTOC(出生日期)
@
9、10 SAY“是否修改班級名,Y/N?” GET KEY
READ
IF UPPER(KEY)=“Y”
@11,10 SAY“請輸入改后班級名稱” GET 班級
READ
ENDIF
ENDFOR
USE
SET TALK ON
使用相對指針,如果打開索引,或某些錄入、修改、查詢操作使當(dāng)前指針位置改變都可能引起錯誤。不如本例中采用物理地址,比較可靠。
【例5.10】要求輸入N個學(xué)生的總分X,按總分分成優(yōu)、良、及格、不及格四個等級,統(tǒng)計(jì)每個等級的人數(shù)。等級劃分標(biāo)準(zhǔn)為:90-100分為優(yōu),75-89分為良,60-74分為及格,59分及以下為不及格。
SET TALK OFF
DIMENSION M(4)&&定義數(shù)組
STORE 0 TO M&&M所有元素初值設(shè)為0
x=0
INPUT“學(xué)生人數(shù) N=?” TO N&&計(jì)數(shù)循環(huán)
FOR I=1 TO N
?“請輸入第”,I,“人的成績”
@ROW(),20 SAY “X=?” GET X
READ
DO CASE
CASE x>=90
M(l)=M(1)+1&&統(tǒng)計(jì)優(yōu)秀生人數(shù)
CASE x>=75
M(2)=M(2)+1
CASE x>=60
M(3)=M(3)+l
CASE x<60 AND x>=0
M(4)=M(4)+1
OTHERWISE
?“輸入數(shù)據(jù)有錯,請重輸”
I=I-1
ENDCASE
ENDFOR
?“優(yōu)、良、及格、不及格人數(shù)各為”,M(1),M(2),M(3),M(4)SET TALK ON
【例5.11】設(shè)有商品表,結(jié)構(gòu)為商品(商品代碼,品名,單價(jià),數(shù)量,金額),欲對其中部分商品調(diào)動單價(jià),為此建立一個調(diào)價(jià)表,其結(jié)構(gòu)為調(diào)價(jià)(商品代碼,原單價(jià),新單價(jià)),編寫程序用調(diào)價(jià)表中新單價(jià)數(shù)據(jù)修改商品表中單價(jià)與金額。
SET TALK OFF
SELE 1
USE商品
SELE 2
USE 調(diào)價(jià)
SCAN
代碼1=商品代碼
SELE 1
LOCATE FOR商品代碼=代碼1
IF NOT EOF()
REPL 單價(jià) WITH 調(diào)價(jià).新單價(jià)、金額 WITH 單價(jià)*數(shù)量
ENDIF
SELE 2
ENDSCAN
CLOSE ALL
SET TALK ON
本例中設(shè)置二個工作區(qū),分別打開二個表,首先在工作區(qū)2上利用SCAN循環(huán)遍歷調(diào)價(jià)所有記錄,對每一記錄在商品表中查找有無商品代碼標(biāo)識相同的記錄,如有,則用新單價(jià)更新原單價(jià),并修改金額。由于在非當(dāng)前工作區(qū)中不能移動指針,不能查詢,不能修改數(shù)據(jù),因而在轉(zhuǎn)到商品表中查詢之前要將商品表所在工作區(qū)1設(shè)為當(dāng)前工作區(qū),更新以后又轉(zhuǎn)到工作區(qū)2將調(diào)價(jià)表中指針指向下一條,再準(zhǔn)備按第二個品種調(diào)價(jià)。
在當(dāng)前工作區(qū)中可讀取非當(dāng)前工作區(qū)中數(shù)據(jù),如本例中用 “調(diào)價(jià).單價(jià)”這樣的格式從工作區(qū)2的調(diào)價(jià)表中讀取其中指針?biāo)赣涗浀膯蝺r(jià),這種方式稱為聯(lián)訪。如此對多個數(shù)據(jù)表操作十分麻煩,可采用預(yù)先建立關(guān)聯(lián)的辦法,在一個表中移動指針時(shí),第二個表中指針按關(guān)鍵字保持一致的方式跟著移動。
三.其他常用命令
1.SET RELATION
意義:將當(dāng)前數(shù)據(jù)庫和“別名”工作區(qū)中的表文件關(guān)聯(lián)在一起,當(dāng)前表文件稱為主動表文件,“別名”工作區(qū)中的表文件稱為被關(guān)聯(lián)表文件,每當(dāng)主動表文件中指針移動時(shí),被關(guān)聯(lián)表文件中指針也相應(yīng)移動。
命令格式:SET RELATION TO 字段名 INTO 別名[ADDITIVE]
命令中選用的“字段名”必須同時(shí)包含在兩個表文件中,且被關(guān)聯(lián)表必須以該字段建立索引文件并打開為主索引文件。每當(dāng)主動表文件中記錄指針移動時(shí),被關(guān)聯(lián)表中記錄指針根據(jù)主索引文件指引指向與之相匹配(索引字段值等于主動表當(dāng)前記錄該字段的值)的第一條記錄。若找不到匹配記錄,則指針將指向文件尾,EOF()為真(.T.)
如命令無ADDITIVE選項(xiàng),在建立關(guān)聯(lián)時(shí)將取消當(dāng)前數(shù)據(jù)庫與其他數(shù)據(jù)庫的任何關(guān)聯(lián),僅保留一個新關(guān)聯(lián)。而選了此選項(xiàng),則原有關(guān)聯(lián)均保留,增加一個新關(guān)聯(lián)。
要注意的是,如果對應(yīng)主動表中某記錄在被關(guān)聯(lián)表中找不到匹配記錄時(shí),主動表中數(shù)據(jù)被改為0。例5.11中如果調(diào)價(jià)表中商品包括商品表中全部商品,利用此命令程序可修改為:
USE 調(diào)價(jià)&&第一個打開表默認(rèn)置于1號工作區(qū)
INDEX ON 商品代碼 TO INDEX1
SELECT 2
USE 商品
SET RELATION TO 商品代碼 INTO 調(diào)價(jià)
SCAN
REPLACE 單價(jià) WITH 調(diào)價(jià).新單價(jià),金額 WITH 單價(jià)*數(shù)量
ENDSCAN
本例中關(guān)于被關(guān)聯(lián)表中字段名也可用“區(qū)號.字段名”形式對之訪問。
不過使用本程序要求兩表中內(nèi)容必須匹配,例如例5.11中如商品只有部分調(diào)價(jià),在調(diào)價(jià)表中只有商品表中部分商品,那么該程序?qū)⑹股唐繁碇胁徽{(diào)價(jià)商品單價(jià)均變?yōu)?。
一般在涉及利用一個表數(shù)據(jù)修改另一個表數(shù)據(jù)時(shí),我們以采用SQL語言中修改命令UPDATE比較好。也可采用全聯(lián)結(jié)視圖再對之操作。”
2.RUN
意義:在VFP環(huán)境中調(diào)用DOS命令?!?/p>
命令格式:RUN DOS命令或!DOS命令
3.LOAD命令
意義:把匯編或C語言編寫并編譯的二進(jìn)制文件調(diào)入內(nèi)存命令。
命令格式:LOAD 二進(jìn)制文件名
4.CALL命令
意義:執(zhí)行由LOAD裝入內(nèi)存的二進(jìn)制代碼文件命令。命令格式:CALL 文件名[WITH 字符表達(dá)式/內(nèi)存變量] 其中WITH選項(xiàng)用于向調(diào)用程序傳遞參數(shù)。
5.ON ERROR
意義:當(dāng)出現(xiàn)錯誤時(shí)執(zhí)行的命令。
命令格式:ON ERROR 命令
其中命令可為任何VFP語句。在程序調(diào)試過程中,可在程序中加入此命令,并設(shè)計(jì)命令處理程序,在其中可加入顯示ERROR(),MESSAGE(),LINENO()和PROGRAM()的語句,將錯誤代碼、錯誤消息、錯誤行號及程序名稱顯示出來,以幫助發(fā)現(xiàn)錯誤所在,方便糾正錯誤。在應(yīng)用程序中,有時(shí)可能出現(xiàn)一些不影響最終結(jié)果的錯誤,我們也可在程序中加入這類錯誤陷阱,所指定的命令可以是一條無效語句,不讓錯誤影響程序運(yùn)行。
【例5.12】程序出錯時(shí)的處理程序及調(diào)用方法 主程序:
*---Set system enviroment------
clos data
clea
on erro do showerro with prog(),lineno(),erro(),mess()&&調(diào)用出錯程序showerro
語句序列
程序出錯時(shí)的處理程序:
para m_prog,m_line,m_num,m_mess&&傳遞參數(shù)
priv m_odcons&&定義局部變量
m_odcons=set('cons')
set cons off
defi wind erro_win from 0,0 to 14,49;
titl ' 系統(tǒng)錯誤 ';
colo gr+/b;
shad doub;
in desktop
move wind erro_win cent
acti wind erro_win
@1,4 say ' 錯誤警告' colo gr+/b
@3,8 say '當(dāng)前程序無法繼續(xù),按<確定>將返回主調(diào)!' colo w+/b
@4,4 say '程序建議:稍后再試或與軟件供應(yīng)商聯(lián)系.' colo w+/b
@6,4 say '出錯程序:'+m_prog colo w+/b
@7,4 say '出 錯 行:'+allt(str(m_line))colo w+/b
@8,4 say '錯誤代碼:'+allt(str(m_num))colo w+/b
@9,4 say '錯誤內(nèi)容:'+iif(len(m_mess)<=28,m_mess,subs(m_mess,1,28)+'...')colo w+/b
@2,3 to 2,wcol()-4 colo w/b
@5,3 to 10,wcol()-4 colo w/b
=opendbf('errosave','errosave','shar')&&存放錯誤情況
inse into;
dbferrosave(errodate,errotime,erroprog,erroline,errocode,erromess);
valu(date(),time(),m_prog,m_line,m_num,m_mess)
use in errosave
m_readkey=20
m_cnt=1
do while m_readkey=20
if mod(m_cnt,2)=0
@1,6 say ' 錯誤警告' colo b/b
else
@1,6 say ' 錯誤警告' colo gr+/b
endi
@wrow()-2,wcol()/2-2 get mb_isee func '*th 確定' defa 1 &&colo sche 13
read cycl modal time 0.4
m_readkey=readkey()
m_cnt=m_cnt+1
endd
set cons &m_odcons
clea wind
close data
clea
retu to master&&返回主程序
6.顯示文件目錄命令
格式:DIR [<驅(qū)動器>][<路徑>][<文件名>] 功能:顯示指定的磁盤驅(qū)動器上的文件名
說明:<文件名>中可帶通配符;命令中不指定文件名,則僅僅顯示指定目錄下的數(shù)據(jù)表文件名。7.清屏命令CLEAR 格式:CLEAR 功能:清除屏幕 8.總清命令CLEAR ALL 格式:CLEAR ALL 功能:關(guān)閉所有打開的數(shù)據(jù)表文件、索引文件和其他各種文件,清除已有的內(nèi)存變量 9.SET TALK ON/OFF
四.程序設(shè)計(jì)基礎(chǔ)
程序的概念
命令執(zhí)行方式:通過命令菜單或直接在命令窗口輸命令來執(zhí)行,執(zhí)行的結(jié)果顯示在屏幕上。程序執(zhí)行方式:以程序的方式來執(zhí)行。
程序是能夠完成一定任務(wù)的命令的有序集合,這組命令存放在程序文件(*.prg)中,執(zhí)行程序時(shí),系統(tǒng)按一定的次序自動執(zhí)行包含在程序文件中的命令。
程序的特點(diǎn)
可以利用編輯器,方便地輸入、修改和保存程序??梢岳枚喾N方式、多次運(yùn)行程序??梢栽谝粋€程序中調(diào)用另一個程序。
程序的基本要求
正確性,能實(shí)現(xiàn)算法的各個步驟,邏輯上正確,對輸入產(chǎn)生的錯誤有檢測措施。通用性,不能只解決一個問題,還考慮解決一類問題。高效率性,編寫執(zhí)行時(shí)間短,占用存儲空間少的程序??删S護(hù)性,程序應(yīng)易讀、易懂、易修改。安全性,必須確保安全、可靠。
程序文件的建立
在項(xiàng)目管理器中和菜單中建立
用命令方式:modify command <文件名>
程序的執(zhí)行
從“ 程序” 菜單中選擇“ 運(yùn)行” 命令方式:do < 文件名> <文件名>中如果沒有指定擴(kuò)展名,系統(tǒng)將按下列順序?qū)ふ页绦蛭募?zhí)行:.exe-->.app(應(yīng)用程序)-->.fxp(編譯程序)-->.prg
當(dāng)程序文件被執(zhí)行時(shí),文件中包含的命令將被依次執(zhí)行,直到所有的命令被執(zhí)行完畢中,或者執(zhí)行到以下命令:
cancel(終止程序執(zhí)行,返回命令窗口)do(轉(zhuǎn)去執(zhí)行另一個程序)return(結(jié)束當(dāng)前程序,返回到上級程序,若無上級程序則返回到命令窗口)quit(退出VFP 系統(tǒng),返回到操作系統(tǒng))
程序結(jié)構(gòu)
(1)每個程序都必須有1個文件名,文件名由字符、數(shù)字或下劃線組成,第一個字符必須是字母或漢字,程序擴(kuò)展名為.PRG(2)程序由若干行數(shù)據(jù)庫命令組成,每行最多寫2048個字符,1行只能寫1條命令,若把一個命令寫成若干行,需在該命令的第1行及中間各行的行尾寫“;”號,但最后一行不寫。(3)注釋行由“*”開頭,用以說明程序的名稱、功能及其他需要說明的問題,“*”是注釋命令,是非執(zhí)行語句,可以寫在程序任一位置。
(4)以“set”開頭的命令為環(huán)境設(shè)置命令,一般出現(xiàn)在可執(zhí)行語句的前面。(5)每行程序的后部可以寫由“&&”號引導(dǎo)的注釋。(6)“return”命令是返回命令,表示程序結(jié)束。
編寫程序的步驟
舉例:編寫一個簡單的程序:給出一個整數(shù),判斷是奇數(shù)還是偶數(shù)。(1)分析任務(wù),確定方法;(2)分解任務(wù),描述算法;(3)編寫程序,認(rèn)真檢查;(4)上機(jī)調(diào)試,糾正錯誤
流程圖
流程圖符號的使用規(guī)則: 流程線的方向是從左到右,自上而下,非標(biāo)準(zhǔn)流向的流程線要用箭頭表示。流程線就盡量避免交叉。
流程圖符號內(nèi)的文字一律從左到右,自上而下書寫。流程圖符號的注釋應(yīng)寫在符號右側(cè)。
出入口處的連接符應(yīng)使用相同名稱,表示把它們連接起來。
子程序、過程和自定義函數(shù)
模塊化:按適當(dāng)?shù)脑瓌t把一個情況復(fù)雜、規(guī)模較大的程序系統(tǒng)劃分為一個個較小的、功能相關(guān)而又相對獨(dú)立的模塊的過程。
模塊:一個在結(jié)構(gòu)上相對獨(dú)立的程序段??梢允亲映绦?、過程或自定義函數(shù)。
子程序的基本概念
子程序:總被其它程序調(diào)用的,一般不單獨(dú)運(yùn)行的一個程序段。
子程序與主程序的關(guān)系:是一種調(diào)用和被調(diào)用的關(guān)系。主程序是能調(diào)用其他子程序,而不被其他程序調(diào)用的程序,凡能被調(diào)用的程序都稱為子程序。程序中至少應(yīng)有一個主程序,可以有一個或若干個子程序。子程序的使用
①使用模塊化程序設(shè)計(jì)方法編寫程序時(shí),把各個功能劃分成若干個功能子模塊,把子模塊寫成一個子程序。
②需要反復(fù)調(diào)用的情況下,可以寫成一個子程序,以節(jié)省存儲空間。
編寫子程序
調(diào)用子程序命令格式:
do <子程序名>[ WITH<參數(shù)表>] 子程序返回命令
return [ to master ] 表示返回到上一級子程序或主程序。帶參數(shù)to master表示無論在哪級子程序上,均立即返回主程序。
例
1、對任意給的正整數(shù)A、B、C,編寫程序計(jì)算S=A!+(3/5)B?。–!/2)調(diào)試子程序 聯(lián)合調(diào)試:當(dāng)主程序和子程序分別編輯完成之后,直接運(yùn)行主程序。若主程序或子程序有錯,再進(jìn)行編輯、調(diào)試、重新運(yùn)行,直到輸出正確結(jié)果為止。單獨(dú)調(diào)試:編輯一個模塊,調(diào)試一個模塊,各個模塊都調(diào)試成功后,加入主程序聯(lián)調(diào)。例
2、根據(jù)數(shù)據(jù)庫student.dbf編寫一個菜單程序main.prg,完成對數(shù)據(jù)庫查詢程序cx.prg和刪除程序sc.prg的調(diào)用
過程與過程文件
過程是一段程序,它與子程序不同之處在于,子程序是一個獨(dú)立文件,而過程是過程文件的一個組成部分,可以把多個過程寫在一個過程文件中。過程的結(jié)構(gòu):
procedure <過程名> <過程體> return [to master/to <程序名>] 過程名由用戶定義,供調(diào)用過程時(shí)使用,過程體是一個語句序列,是過程的核心部分,選擇to <程序名>表示返回到“程序名”指定的程序。過程文件的結(jié)構(gòu)
procedure <過程名1> <過程體1> return [to master/to <程序名>] procedure <過程名2> <過程體2> return [to master/to <程序名>] ??
procedure <過程名n> <過程體n> return [to master/to <程序名>] 過程文件的調(diào)用
在主程序中,調(diào)用過程前,首先要打開過程文件。
命令格式:set proc to <過程文件名>
調(diào)用后,要關(guān)閉過程文件。
命令格式:set procedure to 或 close procedure 過程的調(diào)用
格式:do <過程名> 例
3、根據(jù)數(shù)據(jù)庫student.dbf編寫一個菜單程序gczxc.prg,用過程形式完成對數(shù)據(jù)庫查詢程序cx.prg和刪除程序sc.prg的調(diào)用。
自定義函數(shù)命令
命令格式:(1)function <函數(shù)名>(2)return <表達(dá)式> 基本格式:
function<函數(shù)名> parameters <參數(shù)表> <語句序列>
return <表達(dá)式>
主程序與自定義函數(shù)的組織形式:
舉例計(jì)算組合數(shù)的值
編寫K!的函數(shù)。作業(yè)
1、從鍵盤輸入五個數(shù)組,每組有六個數(shù)據(jù),分別用子程序、過程、自定義函數(shù)的方法,輸出每組數(shù)的最大值和最小值。
2、用子程序、過程、自定義函數(shù)三種不同形式對student.dbf數(shù)據(jù)庫編寫一個菜單程序:
系統(tǒng)主菜單
1??追加記錄
2??修改記錄
3??插入記錄
4??刪除記錄
5??輸出記錄
6??退
出
第五篇:VFP講稿(創(chuàng)建數(shù)據(jù)庫和表)
第二部分
數(shù)據(jù)庫的創(chuàng)建與單命令
創(chuàng)建數(shù)據(jù)庫和表
一、Visual FoxPro 6.0的配置
P28
二、項(xiàng)目及其管理器
P31
1.項(xiàng)目的概念
項(xiàng)目:是文件、數(shù)據(jù)、文檔和Visual FoxPro對象的集合,被保存為擴(kuò)展名為PJX的文件。
建立項(xiàng)目可以對相關(guān)的內(nèi)容(項(xiàng)目的各組成部分)進(jìn)行統(tǒng)一組織、統(tǒng)一管理。
項(xiàng)目管理器:是Visual FoxPro中處理數(shù)據(jù)和對象的主要組織工具,是Visual FoxPro的“控制中心”。
項(xiàng)目管理器為其各個組成部分提供了一個組織良好的分層結(jié)構(gòu)視圖。利用項(xiàng)目管理器,用戶可以創(chuàng)建、修改、移出或刪除文件。只要簡單地單擊鼠標(biāo),就可以跟蹤表和查詢,組織表單、報(bào)表、標(biāo)簽、代碼、位圖和其它文件。
2.項(xiàng)目的創(chuàng)建
3.一個項(xiàng)目產(chǎn)生兩個文件.PJX和.PJT。4.打開/關(guān)閉項(xiàng)目 5.選項(xiàng)卡
三、Visual FoxPro 數(shù)據(jù)庫的基本操作
P93 1.建立數(shù)據(jù)庫
(1)在項(xiàng)目管理器中建立 *(2)從“新建”對話框中建立 *(3)用命令建立
P94(4)新建立的數(shù)據(jù)庫有三個文件
三個文件的擴(kuò)展名分別是:dbc
dct
dcx ? dbc數(shù)據(jù)庫文件的擴(kuò)展名 ? dct數(shù)據(jù)庫備注文件的擴(kuò)展名 ? dcx數(shù)據(jù)庫索引文件的擴(kuò)展名 2.打開和關(guān)閉數(shù)據(jù)庫(1)打開數(shù)據(jù)庫 有三種打開方法: ? 在項(xiàng)目管理器中打開 ? *從“打開”對話框中打開 ? *用命令打開
OPEN DATABASE命令
P95(2)關(guān)閉數(shù)據(jù)庫 CLOSE DATABASE 3.數(shù)據(jù)庫設(shè)計(jì)器
有三種打開方法: ? 在項(xiàng)目管理器中打開 ? *從“打開”對話框中打開 ? *用命令打開
MODIFY DATABASE命令
P98 4刪除數(shù)據(jù)庫
有兩種刪除方法: ? 在項(xiàng)目管理器中刪除 ? *用命令刪除
DELETE DATABASE命令
P99
四、數(shù)據(jù)庫表
1.建立數(shù)據(jù)庫表
P99(1)表設(shè)計(jì)器
(2)字段名:命名規(guī)則與內(nèi)存變量的命名規(guī)則相同??膳c內(nèi)存變量同名。(3)字段類型和寬度(4)建立數(shù)據(jù)庫表產(chǎn)生的文件(5)字段有效性組框(6)用命令建立表
使用命令CREATE <表名> 有打開的數(shù)據(jù)庫時(shí),建立的是數(shù)據(jù)庫表,否則建立的是自由表。2.修改表結(jié)構(gòu)
P102(1)插入字段(2)刪除字段(3)修改字段
(4)用命令MODIFY STRUCTURE打開表設(shè)計(jì)器進(jìn)行修改
五、自由表
如果當(dāng)前沒有打開數(shù)據(jù)庫,創(chuàng)建的表是自由表。1.創(chuàng)建自由表。
2.自由表和數(shù)據(jù)庫表的異同。
自由表和數(shù)據(jù)庫表的設(shè)計(jì)器不同。*數(shù)據(jù)庫表有很多附加信息。3.將自由表添加到數(shù)據(jù)庫。4.從數(shù)據(jù)庫中移出表。