陳玲
(樺川縣職業教育中心,黑龍江樺川154300)
《數據庫應用基礎—Visual FoxPro 6.0》作為職高計算機專業的一個比較重要的學科,很多學生對學習此門課程感到吃力,尤其是在創建查詢和視圖這一章。學習VFP6.0的基礎是建立數據庫、向表中存儲數據。但是我們在表中存儲的數據再多而不去使用它也是沒有意義的,因此當我們建立數據庫和表以后,目的就是要使用這些數據。在Visual FoxPro6.0中,常常利用視圖和查詢來對收集的數據進行處理,得到有用的信息。很多學生在使用二者時,總是產生迷惑,既然二者都能篩選出我們所需要的數據,那么只掌握其中一個不就可以了嗎?帶著這樣的疑問,我們分析一下到底查詢和視圖有什么不同。
我們有這樣一個例子,現有創建的一個“學生管理”數據庫,并且在該數據庫中創建了“原始檔案”表和“在校情況”表,現在我們要把9861班的現有團員篩選出來,并輸出“學號”“班級”“姓名”“性別”“政治面貌”等信息,并按“學號”升序。查詢結果顯示如下圖所示。

利用視圖輸出滿足條件的結果

利用查詢輸出滿足條件的結果
從上面結果可以看出,查詢和視圖都可以從我們收集的數據中提取所需要的信息,它們之間到底又有什么區別呢?為了能很好地使用查詢和視圖,我們就必須要掌握查詢和視圖的概念和二者的區別。
查詢是向數據庫發出檢索信息的請求,它通過限制一些條件從數據庫中提取特定的信息。查詢可以擴充用戶控制數據的能力,可以讓用戶按需要的方式顯示表中的信息。查詢能單獨以擴展名為.QPR的文件保存,可以在命令方式下使用,可以選擇查詢去向,但不能更新和修改數據,而且只能一次性使用,只能訪問本地數據。查詢的去向有7種:“瀏覽”“臨時表”“表”“圖形”“屏幕”“報表”“標簽”。
視圖是一個類似于目錄的有關數據的虛擬表或者邏輯表,視圖中的數據來源于數據庫中的表或者其他視圖。它具有普通表的一般性質,可以對它進行瀏覽、修改和使用。值得一提的是利用視圖修改的結果可以送回數據源,進行永久的保存。但視圖依賴于數據庫而存在,在新建視圖之前,必須先打開相關數據庫。視圖和查詢也很相似,都可以從一個或多個相關聯的表中提取有用的信息。
由此可以看出視圖和查詢之間雖然有很多相似之處,但是也有著本質的區別:
1.利用查詢設計器生成的是.QPR文件,它是完全獨立的,不依賴于任何數據庫和表而存在,而視圖則依賴于數據庫而存在。
2.利用查詢不能更新數據源,而利用視圖可以更新數據源。
3.查詢的去向有7種,而視圖只是一個虛擬的表。
當我們了解二者的本質區別后,可以根據實際情況來創建查詢和視圖。如果我們創建查詢,要在建立之前明確以下幾點:首先確定數據源,然后確定查詢條件,最后確定查詢去向。而查詢的建立方法有以下3種:利用向導建立查詢;利用設計器建立查詢;使用SQL-Select命令建立查詢。
建立視圖的目的也是為了能夠方便地從表中眾多的記錄中找到我們所需的記錄并可以進行數據的更新。視圖有二種:本地視圖和遠程視圖。本地視圖是指以本地表或其它本地視圖作為數據源而創建的視圖。遠程視圖是指以遠程數據表或遠程視圖作為數據源而創建的視圖。而建立視圖的方法只有兩種:一是利用視圖設計器建立,二是利用向導建立。視圖建立以后,就可以使用它來顯示和更新數據,并且可以作為創建視圖和表單的數據源。
拿引例中篩選輸出9861班團員為例,雖然使用視圖和查詢輸出的結果是一樣的,但是,查詢的結果我們不能夠更改,而視圖中的數據是可以更改的,并能將更改的結果傳回源表。在視圖設計器中的“更新選項卡”中將“性別”設置為更新字段,“學號”為關鍵字段,再選中“發送SQL”選項后,運行視圖,在創建的視圖中將“林雨雁”的“性別”更改為“男”,保存退出后,打開數據源表“原始檔案”表,可以看到“林雨雁”的性別被更改為“男”。

更改后表
綜上所述將查詢和視圖的區別總結如下:
(1)相同點:
①可以從數據源中查找滿足一定篩選條件的記錄和選定部分字段。
②自身不保存數據,它們的查詢結果隨數據源內容的變化而變化。
(2)不同點:
①視圖可以更新數據表,而查詢不能。
②視圖可訪問遠程數據;而查詢不能直接訪問,須借助遠程視圖方可。
③視圖只能在數據庫中存在;而查詢不是數據庫的組成部分,它是一個獨立的程序文件。
④視圖只能從數據庫表中查找數據,而查詢可以從自由表、數據庫表及多個數據庫表中查找數據。
根據上面的總結很多同學又會提出這樣的問題,既然視圖可以作為數據源,那它是不是一個表呢?它和表之間又有什么區別呢?下面再就視圖與表作一下比較:
(1)相同點:
①可以作為查詢與其他視圖的數據源。
②與邏輯結構相似,即內容由記錄組成,記錄由字段組成。
(2)不同點:
①視圖中不保存數據,是虛擬表。
②即使不對視圖作任何修改,其內容也可能發生變化。
③視圖中顯示的數據可能來自一個表、多個表或其他視圖。
④視圖可帶有參數,而表不能。
⑤視圖是數據庫的一種組成單元,它只能是數據庫的一部分,不能單獨存在;而表可以不屬于任何一個數據庫,即自由表。
在VFP6.0中,有很多知識點需要我們不斷地對比、歸納總結,就不難掌握它們的異同,就會更好地應用于教學和實踐當中。

原始檔案
[1]李紅,陳曉宇.數據庫應用基礎——Visual FoxPro 6.0(第2版)[M].電子工業出版社,2005.
[2]周察金.數據庫應用基礎——Visual FoxPro(第3版)[M].高等教育出版社,2011.