六、視圖與查詢
(一)視圖文件(.vue)
1.定義:視圖是一個定制的虛擬表,可以是本地的、遠程的或帶參數(shù)的;它是操作表的一種手段,不存于磁盤。
2.數(shù)據(jù)源:數(shù)據(jù)庫表、自由表或其他視圖等。
3.作用:通過視圖可查詢表也可更新表。
4.特點:它依賴表,不能獨立存在,且只有在包含視圖的數(shù)據(jù)庫打開時才能使用。
5.分類:根據(jù)創(chuàng)建視圖的數(shù)據(jù)來源分為兩類
1)本地視圖:使用當前數(shù)據(jù)庫的表建立的視圖
2)遠程視圖:使用當前數(shù)據(jù)庫之外的數(shù)據(jù)源創(chuàng)建的試圖
6.建立視圖的方法:
1)根據(jù)視圖設(shè)計器
& 文件—新建—文件類型:視圖—新建文件—打開視圖設(shè)計器—保存
& 打開項目管理器—數(shù)據(jù)選項卡—展開數(shù)據(jù)庫至本地視圖—新建—打開視圖設(shè)計器—保存
& 打開數(shù)據(jù)庫設(shè)計器—右擊/數(shù)據(jù)庫菜單—新建本地視圖—打開視圖設(shè)計器—保存
& 命令:create view
2)根據(jù)表的查詢定義視圖
& 格式為:create view 視圖文件名 as select語句
即把select語句查詢出的信息作為視圖文件的內(nèi)容
7.視圖中的虛字段:即通過算術(shù)表達式或函數(shù)計算出來的字段,并不存于表中。
8.刪除視圖文件:
& 數(shù)據(jù)庫設(shè)計器中—右擊視圖名—刪除—移去
& 命令:drop view 視圖文件名
注意:視圖可像基本表一樣使用,適用于基本表的命令基本都可用于視圖,但視圖不支持modify structure命令
9.視圖參數(shù):在篩選處寫為?X即可
10.視圖的更新功能:即更新視圖文件中的內(nèi)容后,建立此視圖文件的基本表的內(nèi)容也會有相應(yīng)的更新。
方法:必須先設(shè)定更新條件,鑰匙圖標下選定關(guān)鍵字,鉛筆圖標下選定可更新的字段,再選中發(fā)送SQL更新選項,保存后即可實現(xiàn)相應(yīng)的更新。
(二)查詢文件(.qpr)
1.定義:查詢是預(yù)先定義好的一個select語句,在不同的需要場合可以直接或反復(fù)使用,它是從指定的表或視圖中提取滿足條件的記錄,然后按照想得到的輸出類型定向輸出查詢結(jié)果,保存于磁盤,是一個文本文件??傊莢f支持的一種數(shù)據(jù)對象,或是為方便檢索數(shù)據(jù)提供的一種工具或方法。
2.數(shù)據(jù)源:數(shù)據(jù)庫表、自由表或視圖
3.作用:數(shù)據(jù)查詢
4.建立查詢的方法:
& 文件—新建—文件類型:查詢—新建文件—打開查詢設(shè)計器—保存
& 打開項目管理器—數(shù)據(jù)選項卡—查詢—新建—打開查詢設(shè)計器—保存
& 命令:create query
注意:當一個查詢是基于多個表時,這些表必須是有聯(lián)系的,查詢設(shè)計器會自動根據(jù)聯(lián)系提取聯(lián)接條件,但它只能建立一些比較規(guī)則的查詢,而復(fù)雜的查詢則無法完成。
5.查詢設(shè)計器中各選項卡與select語句的對應(yīng)關(guān)系:
² 選擇了創(chuàng)建查詢的表或視圖——from短語
² 字段選項卡——select短語,指定需要查詢的數(shù)據(jù)
² 聯(lián)接選項卡——join on短語,用于編輯聯(lián)接條件
² 篩選選項卡——where短語,用于指定查詢的條件
² 排序依據(jù)選項卡——order by短語,用于指定排序的字段和排序方式
² 分組依據(jù)選項卡——group by短語和having短語,用于指定分組的依據(jù)
² 雜項選項卡——可以指定是否要重復(fù)記錄(對應(yīng)于distinct短語)
還可指定列在前面的記錄(對應(yīng)于top短語)
6.執(zhí)行查詢文件的方法:
& 打開項目管理器—數(shù)據(jù)選項卡—展開至相應(yīng)查詢文件—單擊“運行“
& 常用工具欄—運行(有感嘆號標志)
& 程序—運行—選中查詢文件—運行
& 打開查詢設(shè)計器—運行查詢
& 命令:do 查詢文件名.qpr(查詢文件的擴展名不可以省略)
7.查詢?nèi)ハ颍?在查詢菜單下)
方法:查詢菜單—單擊查詢?nèi)ハ颉蜷_查詢?nèi)ハ颉x擇查詢結(jié)果的去向
² 瀏覽—在“瀏覽”(browse)窗口中顯示查詢結(jié)果(默認的輸出方向)
² 臨時表—將查詢結(jié)果存儲在一個命名的臨時只讀表中
² 表—將查詢結(jié)果保存在一個命名的表中
² 圖形—使查詢結(jié)果可用于MS graph中
² 屏幕—在vf主窗口或當前活動輸出窗口顯示查詢結(jié)果
² 報表—將查詢結(jié)果輸出到一個報表文件(.frx)
² 標簽—將查詢結(jié)果輸出到一個標簽文件(.lbx)
(三)視圖文件與查詢文件的區(qū)別:
1.查詢設(shè)計器的結(jié)果將以qpr為擴展名的文件保存于磁盤中
視圖設(shè)計器的結(jié)果則保存在數(shù)據(jù)庫中
2.視圖文件可以更新,而查詢不可以
3.查詢中有查詢?nèi)ハ虻膯栴},而視圖中則沒有
[NextPage
七、程序設(shè)計基礎(chǔ)
(一)程序的概念
1.定義:程序是能夠完成一定任務(wù)的命令的有序集合,存放在以.prg為擴展名的程序文件中。
2.特點(即與命令窗口相比的優(yōu)點):
1)可以利用編輯器,方便地輸入、修改和保存程序;
2)可以用多種方式、多次運行程序,即程序的調(diào)試;
3)程序之間可以相互調(diào)用。
3.關(guān)于程序的幾點說明:
1)命令注釋:程序中可插入注釋行,以提高程序的可讀性。
單獨的注釋行以note或*開頭
命令行后的注釋以&&開頭
注意:注釋為非執(zhí)行代碼,不會影響程序的功能。
2)set talk on/off命令:可設(shè)置執(zhí)行狀態(tài)的信息是否在vf主窗口、狀態(tài)欄或用戶自定義的窗口顯示。
3)命令分行:程序中每條命令都以回車鍵結(jié)尾,一行只能寫一條命令。若命令需要分行書寫,應(yīng)在一行終了時鍵入續(xù)行符“;”,再按回車鍵。
(二)程序文件
1.定義:又叫命令文件,其默認的擴展名是.prg。
2.程序文件的建立:
1)打開項目管理器—代碼選項卡—程序—新建—打開編輯窗口—編寫程序—保存
2)文件—新建—文件類型:程序—新建文件—打開編輯窗口—編寫程序—保存
3)命令:modify command 程序文件名(若文件存在則打開,不存在則新建一個新文件)
3.程序文件的執(zhí)行:
1)程序菜單—運行—選擇運行程序文件—運行
2)常用工具欄—運行(即!標志)
3)命令:do 程序文件名
注意:程序文件被執(zhí)行的過程中,還應(yīng)了解以下幾個命令:
cancel—終止程序運行,清除所有的私有變量,返回命令窗口
do—轉(zhuǎn)去執(zhí)行另一個程序
return—結(jié)束當前程序的執(zhí)行,返回到調(diào)用它的上級程序,若無上級程序則返回到命令窗口
quit—退出vf系統(tǒng),返回到操作系統(tǒng)
4.編程步驟:
1)建立程序文件—編寫代碼—保存—執(zhí)行
2)一個完整的編程所應(yīng)包含的部分:
² 輸入數(shù)據(jù)(一個或多個數(shù)據(jù))
² 對所有輸入數(shù)據(jù)的處理、加工
² 輸出數(shù)據(jù)(有零個或多個數(shù)據(jù))
5.程序中的輸入輸出命令:
1)格式一:inpute 字符表達式 to 內(nèi)存變量
功能:等待用戶從鍵盤輸入任意合法表達式,以回車鍵結(jié)束輸入時系統(tǒng)將表達式的值存入指定的內(nèi)存變量,程序繼續(xù)運行。
注意:
² 若果選用字符表達式,那么系統(tǒng)首先顯示該表達式的值,作為提示信息
² 輸入的數(shù)據(jù)可以試常量、變量,也可以是一般的表達式,不能無數(shù)據(jù)
² 輸入字符串時必須加定界符,輸入邏輯型變量時要用圓點定界符,輸入日期時間型常量時要用花括號
2)格式二:accept 字符表達式 to 內(nèi)存變量
功能:等待用戶從鍵盤輸入字符串,以回車鍵結(jié)束輸入時系統(tǒng)將該字符串存入指定的內(nèi)存變量,程序繼續(xù)運行。
注意:
² 若果選用字符表達式,那么系統(tǒng)首先顯示該表達式的值,作為提示信息
² 該命令只能接受字符串,在輸入時不用加定界符,否則系統(tǒng)會把定界符作為字符串本身的一部分
² 若不輸入任何內(nèi)容直接按回車鍵,系統(tǒng)會把空串賦給制定的內(nèi)存變量
3)格式三:wait 字符表達式 to 內(nèi)存變量[window [at 行,列]][nowait][noclear][timeout 數(shù)值表達式]
(三)程序的基本結(jié)構(gòu)
1.定義:是指程序中命令或語句執(zhí)行的流程結(jié)構(gòu)。
共有順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)三種。
2.順序結(jié)構(gòu):是最簡單的程序結(jié)構(gòu),按命令在程序中出現(xiàn)先后次序依次執(zhí)行,最為常用。
3.選擇結(jié)構(gòu):
1)定義:根據(jù)條件成立與否,選擇執(zhí)行相關(guān)語句的結(jié)構(gòu)。
2)類型:if條件語句和do case分支語句
& if條件語句:
①無else子句時:
if 條件表達式 如果條件為真,執(zhí)行if下面的命令語句序列
命令語句序列 如果條件為假,則執(zhí)行endif后面的語句
endif if-endif必須成對出現(xiàn)
②有else子句時:
if 條件表達式 如果條件為真,執(zhí)行if下面的命令語句序列1,然后到endif后面的語句
命令語句序列1 如果條件為假,執(zhí)行else后的命令語句序列2,然后到endif后面的語句
else if-else-endif必須成對出現(xiàn)
命令語句序列2
endif
注意:有else子句時還可能出現(xiàn)嵌套,在if-else或者else-endif之間都有可能出現(xiàn)新的if-else-endif語句。
& do case分支語句
do case
case 條件1 如果條件1為真,則執(zhí)行命令語句序列1,然后執(zhí)行endcase后的語句
命令語句序列1 如果條件1為假,則轉(zhuǎn)去判斷條件2
case 條件2 如果條件2為真,則執(zhí)行命令語句序列2,然后執(zhí)行endcase后的語句
命令語句序列2 如果條件2為假,則轉(zhuǎn)去判斷條件3
…… 依次類推,判斷完所有的條件
otherwise 如果上述所有條件都為假,那么執(zhí)行otherwise后的語句n后轉(zhuǎn)向endcase后的語句
命令語句序列n
endcase
4.循環(huán)結(jié)構(gòu):
1)定義:也稱為重復(fù)結(jié)構(gòu),是指程序在執(zhí)行的過程中,其中的某段代碼被重復(fù)執(zhí)行若干次,其中被重復(fù)執(zhí)行的代碼段通常稱為循環(huán)體。
2)類型:do while – enddo語句、for – endfor語句和scan – endscan語句
& do while – enddo語句
①無loop/exit時:
do while 條件 當條件為真時,執(zhí)行循環(huán)體,到enddo時,返回do while
語句序列1(循環(huán)體) 處繼續(xù)判斷條件是否為真,以確定是否還執(zhí)行循環(huán)體
enddo 若條件為假,則結(jié)束該循環(huán),執(zhí)行enddo后面的語句
注意:若第一次判斷條件為假,則循環(huán)體一次都不被執(zhí)行,直接轉(zhuǎn)至執(zhí)行enddo后的語句;
do while-enddo必須成對出現(xiàn)
若do while處條件始終為真,則該循環(huán)為死循環(huán)
②有l(wèi)oop/exit時:
do while 條件 當條件為真時,執(zhí)行語句序列1,遇到loop時,結(jié)束本次執(zhí)
語句序列1 行,也不執(zhí)行l(wèi)oop后的語句序列2,而是直接轉(zhuǎn)回do while
[loop] 處重新判斷條件的真假;若遇到exit時,則結(jié)束該語句的執(zhí)
語句序列2 行,其后的語句序列3也不被執(zhí)行,而是轉(zhuǎn)去執(zhí)行enddo后面
[exit] 的語句
語句序列3
enddo
注意:若第一次判斷條件為假,則其后的所有語句一次都不被執(zhí)行,直接轉(zhuǎn)至執(zhí)行enddo后的語句
通常loop或exit可單獨出現(xiàn),也可同時出現(xiàn)。同時出現(xiàn)時經(jīng)常用在循環(huán)體內(nèi)嵌套的選擇語句之中,根據(jù)條件來決定是執(zhí)行l(wèi)oop回去,還是執(zhí)行exit出去,以防止出現(xiàn)矛盾現(xiàn)象
do while-enddo必須成對出現(xiàn)
若do while處條件始終為真,則該循環(huán)為死循環(huán)
③兩個重要的推論:
推論一:完成對表中所有滿足條件的記錄循環(huán)操作的目的
locate for 條件(即定位表達式) 使指針定位于當前表中滿足條件的第一條記錄上
do while found() 若found()函數(shù)返回值為真,則執(zhí)行其后的語句序列
語句序列 遇到continue時,返回do while處重新判斷found()函數(shù)的值是否為真
continue 為真就繼續(xù)執(zhí)行語句序列,若found函數(shù)的值為假,則轉(zhuǎn)去執(zhí)行enddo后的語句
enddo
推論二:完成對表中每條記錄逐條操作的目的
go top 使指針指向當前表中的首記錄
do while not eof() 若不在文件尾為真,則執(zhí)行語句序列,遇到skip時
語句序列 表中指針向下跳一下,而此程序則返回到do while處
skip n(n默認為1) 繼續(xù)判斷not eof()是否為真,為真就繼續(xù)執(zhí)行語句序列
enddo 若not eof()為假,則轉(zhuǎn)去執(zhí)行enddo后的語句
& for – endfor語句:用于某個值域范圍內(nèi)的循環(huán)
for 循環(huán)變量=初值 to 終值 [step 步長n] 先把初值賦給循環(huán)變量,然后判斷循環(huán)條件
循環(huán)體 是否成立;成立則執(zhí)行循環(huán)體,然后給循環(huán)變量增加一個步長值并再次判斷循環(huán)條件是否成立endfor 以確定是否再次執(zhí)行循環(huán)體。若循環(huán)條件不成立,則結(jié)束該循環(huán),轉(zhuǎn)去執(zhí)行endfor后的語句
注意:若步長n為正值,循環(huán)條件為:循環(huán)變量<=終值;若步長n為負數(shù),循環(huán)條件為:循環(huán)變量>=終值;n的默認值為1可省略
& scan – endscan語句:
scan [范圍] [for 條件1] [while 條件2] 若條件為真,則執(zhí)行循環(huán)體
語句序列(循環(huán)體) 遇到endscan時返回scan for條件處繼續(xù)判斷條件是否為真
endscan 為真繼續(xù)執(zhí)行循環(huán)體,若條件為假,則轉(zhuǎn)去執(zhí)行endscan后的語句
(四)多模塊程序
1.模塊的定義:
1)概念:模塊可以是命令文件,也可以是過程。是指一個相對獨立的程序段,可被其他模塊調(diào)用也可調(diào)用其他模塊。
2)過程定義的語法格式:
procedure/function 過程名 過程名必須以字母或下劃線開頭,可包含字母、數(shù)字和下劃線
命令序列 若執(zhí)行return命令,轉(zhuǎn)回到調(diào)用程序并返回表達式的值;若缺省return命令則在過程結(jié)
[return [表達式]] 束處執(zhí)行一個隱含的return命令;若return不帶表達式,則返回邏輯真值
[endproc/endfunc] 若缺省此命令,則過程結(jié)束于下一條precedure/function命令或文件尾處
3)過程文件:
² 建立:modify command 命令,文件默認擴展名為.prg
² 打開:set procedure to 過程文件名1,…過程文件名n
² 關(guān)閉:set procedure to ——可關(guān)閉所有打開的過程文件
4)過程(模塊)的位置:3種
² 單獨過程即獨立過程
² 包含在主程序中的過程,在主程序代碼的后面
² 包含在過程文件中的過程
2.模塊的調(diào)用
1)模塊的調(diào)用格式:2種
² 格式1:do 過程名 一般無返回值
² 格式2:過程名() 作為命令使用時返回被忽略,作為函數(shù)時有返回值
3.參數(shù)傳遞
4.變量的作用域