VFP學習縱橫談
曾文英
Microsoft Visual FoxPro(簡稱VFP)是近幾年中國最流行的物件導向的關聯式資料庫管理系統(RDBMS),其引入了大型資料庫管理系統獨有的“資料庫”、“資料字典”、“存儲過程”、“參照完整性”、“觸發器”、“緩衝”等機制,使資料庫的使用與管理更方便;也是一個32位元的資料庫開發系統,支援視覺化程式設計和物件導向程式設計等第四代語言(4GL)特性的應用程式開發工具。它能運行於Windows9X/NT/2000/XP等作業系統之上,具有良好的跨平臺特性;還有許多優勢,一直被不同層次的程式師用於設計和開發各種類型的執行資訊系統或進行資料庫的維護。
1995年,Microsoft公司成功地將FoxPro臺式資料庫發展成為支援視覺化開發和操作的物件導向的資料庫Visual FoxPro 3.0;隨後,又推出5.0,1998年推出6.0。該產品同Visual C++ 6.0、Visual Basic 6.0等產品共同組成Microsoft Visual Studio 98。VFP6.0中文版為其英文版的漢化版本,比較適合於中國中小型資料庫市場,尤適於記錄屬小於1 000 000條的資料庫。VFP6.0中文版功能強大,主要表現在:易學易用易維護,開發高效、成本低,引入了Microsoft的先進技術(如SQL技術、ActiveX技術、OLE技術等),具有強大的API函式程式庫;安全性好,具有較強的網路功能,報表、標籤製作方便,易於製作長條圖、圓形圖等。
學習方法及技巧
學習VFP的方法與學習其他基於Windwos圖形介面的軟體十分相似,均有功能表、工具列等介面,那麼首先必須熟悉VFP介面的使用,各項功能表、按鈕的功能;其次,對VFP的命令視窗的用法應該熟練,其中不僅可以練習VFP的命令、函數,還可以偵錯工具,查看有關變數的值。另外,作為一個功能強大的資料庫應用系統的整合式開發環境,VFP提供了豐富的嚮導和設計器,可以快捷生成資料庫、資料表、查詢、視圖、表單、報表、標籤等檔。
1、學習方法
要掌握VFP,可從以下幾方面努力:(1)熟練掌握基本概念、常用命令、常用函數的用法。(2)在命令窗口中運用基本輸出命令?或??(二者的不同僅在於是否換行)輸出運算式的值;使用命令LIST MEMORY LIKE輸出當前使用者定義的記憶體變數。(3)善用VFP的幫助,即MSDN:按F1鍵或HELP命令求助,或通過説明功能表進入。粘貼相關的示例代碼試運行。(4)程式設計可採用N-S圖描述演算法流程。(5)能用命令視窗或VFP調試器查看運行資訊。
2、資料庫及資料表的基本操作命令
(1)建立資料庫:可有多種方式建立資料庫,分別通過檔功能表、命令方式、專案管理器、嚮導、工具列按鈕等方式打開資料庫嚮導或設計器來完成。若用命令則create database或modify database 均可建立資料庫。(2)打開資料庫:同樣有功能表、命令、專案管理器、工具列按鈕等多種方式打開資料庫予以修改。如果不在資料庫設計器中查看資料庫中的表或視圖等構成,可用命令:list tables和list views列出。(3)使用資料庫:使用資料庫即使用其中的表、視圖、連接等,那麼首先要打開資料庫,通常可用命令的方式:open databases ?/<資料庫名>。打開資料庫中的某個表也會自動同時打開表所屬的資料庫。(4)建立資料表:若用命令則create或SQL命令create table均可建立資料表。至於從功能表、工具列新建按鈕、專案管理器等方式進入建立資料表,初學者用得較多。(5)更新資料表:既可以用交互的方式更新,也可用命令或程式語句更新。(6)使用資料表:使用前一般須先用use命令打開以調入記憶體,其後則可流覽、修改此表。關閉資料表可用無參數的use;關閉庫或索引等相關的檔則可用close命令等。
3、常用函數
熟練使用常用函數,可使程式設計更為簡便、高效。常用函數如:val(),str(),chr(),asc(),ctod(),dtoc();date(),time(),year(),month(),day();sqrt(),exp(),pi();used(),recno(),reccount(),dbf(),select();curdir(),file()等。
4、常用工具或嚮導
VFP常用工具或嚮導在VFP主視窗的工具功能表(Tools)下面即可看到,各類流覽器、調試器等,嚮導如:表,資料庫,表單,報表,標籤,安裝等的嚮導。在選擇功能表“檔/新建”時大多數可選擇進入相應嚮導。VFP還提供了專案管理器用來組織應用系統的檔;提供了各類設計器如表單、類、表、查詢、視圖、報表、功能表等的設計器協助製作相關檔,各類生成器快速生成運算式、表單、報表、功能表等。這類工具的使用一般可從主功能表、快顯功能表等進入使用。
5、程式設計
VFP視覺化程式設計的一般步驟為:(1)建立應用程式的使用者介面,主要是建立表單和功能表,並在表單上安排應用程式所需的各種物件(由控制項創建);(2)設置各物件(表單及控制項)的屬性;(3)編寫方法及事件程序代碼。實際上是一種物件之間相互交換資訊、人機交互(如輸入、輸出)、資訊轉換等的過程,以事件和消息驅動程式的運行狀態的變化。
創建一個完整的功能表系統需要以下步驟:(1)規劃菜單的項數、名稱、子功能表等;(2)創建菜單和子功能表;(3)為功能表系統指定任務:比如要顯示的表單或對話方塊。另外,還可包含初始化代碼和清理代碼;(4)選擇“預覽”按鈕或快顯功能表預覽整個功能表系統;(5)從“功能表”功能表上選擇“生成”命令,生成功能表程式;(6)運行生成的程式,測試功能表系統。其中(2)~(5)步需在“功能表設計器”中進行。功能表的建立也可由程式語句完成。
學習內容
學習內容包括VFP程式設計的基本概念、基本操作命令和語法,資料庫的建立、管理和維護,物件導向的開發方法(如建立專案、表單、功能表、報表、製作安裝盤等)。
1、資料類型
VFP6.0定義了13種資料類型,均可用於資料表中的欄位。即為:字元型(Character,縮寫C,最大254位元組)、貨幣型(Currency,Y,8位元組)、日期型(Date,D,8位元組)、日期時間型(DataTime,T,8位元組)、邏輯型(Logical,L,1位元組)、數值型(Numeric,N,記憶體中占8位元組,資料表中1~20位元組)、雙精度型(Double,B,8位元組)、浮點型(Float,F,記憶體中占8位元組,資料表中1~20位元組)、通用型(General,G,4位元組)、整型(Integer,I,4位元組)、備註型(Memo,M,4位元組)、二進位字元型(C,最大254位元組)、二進位備註型(M,4位元組)。而其中的字元型、貨幣型、日期型、日期時間型、邏輯型、數值型可被用於記憶體變數。
2、常量與變數
(1)常量
VFP6.0 可以使用的常量類型有:數值型常量、字元型常量、邏輯型常量、日期型常量、日期時間型常量。其表示方式如下:數值型常量用正負號、小數點和數字表示,也可用帶E或e的科學計數法表示;字元型常量需用定界符(可為單引號、雙引號或方括號之一)括起來;邏輯型常量用兩個英文句點括起的T、Y和F、N(大小寫無關)表示;日期型常量和日期時間型常量用{^yyyy-mm-dd}的格式表示。
(2)變數
VFP有三種形式的變數:記憶體變數、陣列變數和欄位變數。記憶體變數是存放單個資料的記憶體單元,陣列變數是存放多個資料的記憶體單元組,欄位變數則是存放在資料表中的資料項目。變數名以字母或底線開始,中文可以漢字開始,後可跟字母、數位或底線,長度為1~128個字元,注意勿用VFP的保留字。應見名知義的原則,儘量採用VFP建議的首碼或尾碼來命名以區分類型。
變數的作用域:可用LOCAL、PRIVATE、PUBLIC命令強制規定作用域。LOCAL用於定義區域變數,區域變數只能在創建它們的過程中使用和修改,不能被更高層或更低層的過程訪問。PRIVATE用於定義私有變數,用於定義當前過程的變數,並將以前程序定義的同名變數保存起來,在當前過程中的私有變數不影響這些同名變數的原始值。PUBLIC用於定義全域變數,在本次VFP運行期間,所有過程均可使用這些全域變數。
陣列在用前一般須說明,說明的命令可用:DECLARE,DIMENSION,PUBLIC,LOCAL。說明之後,每個元素被預設賦值為.F.。不用說明即可使用的情況是用於與記錄之間交換資料時,相關命令是:SCATTER,GATHER;COPY TO ARRAY,APPEND FROM ARRAY。另外,可使用如下函數處理陣列元素:排序ASORT(),搜索ASCAN(),刪除ADEL(),插入AINS(),拷貝ACOPY()。
3、運算式
VFP共有5種類型的運算式:算術運算式,字元運算式,關聯運算式,邏輯運算式,日期運算式。它們具有相應的運算子和運算物件的類型。算術運算子有+,-,*,/,^;字元運算子有連接+,-,比較$;關係運算子有>,<,>=,<=,<>或#或!=;邏輯運算子有NOT,AND,OR;日期和時間運算子有+,-。
4、函數
函數據其來源可分為:系統預定義函數和使用者自訂函數。系統預定義函數則可據其操作物件分為與資料庫有關的函數和一般的資料處理函數。後者又可據函數的參數和返回值的類型進行劃分:數值型,字元型,日期型,以及類型轉換函數等。
5、命令和語句
VFP提供了大量的命令,幾乎大多數命令均可在命令視窗中使用;而在程式檔中使用命令時一般稱為語句,所有的命令均可用於程式碼中。對常用的資料操作命令可分類如下:
建立或查看表結構:CREATE,LIST/DISPLAY STRUCTURE,MODIFY STRUCTURE。
打開與關閉表相關命令:USE,CLOSE DATABASE,CLOSE ALL,CLEAR ALL,QUIT。
資料顯示與輸入更新:記錄指標定位GO/GOTO,SKIP,LOCATE,CONTINUE;顯示記錄BROWSE,LIST/DISPLAY;追加記錄APPEND [BLANK];插入記錄INSERT;修改記錄EDIT,CHANGE,REPLACE;刪除與恢復記錄DELETE,RECALL,PACK,ZAP。
複製表檔結構與資料:COPY STRUCTURE,CREATE,APPEND FROM,COPY TO。
資料統計:求和SUM,統計COUNT,求平均值AVERAGE,分類匯總TOTAL ON。
排序與索引:SORT TO,INDEX ON,USE…INDEX,SET INDEX TO,SET ORDER TO,REINDEX,CLOSE INDEX。
索引查詢:FIND <運算式>/&<記憶體變數>,SEEK <運算式>。
檔操作:顯示目錄DIR,刪除ERASE,DELETE FILE,複製COPY FILE,換名RENAME,顯示內容TYPE,使用DOS命令!或RUN。
多表操作:SELECT <工作區號>/<別名>;多表連接SET RELATION TO ,SET SKIP TO,SET RELATION OFF;多表連接JOIN;表間的關聯資料更新UPDATE。
6、程式設計
(1)基本操作
建立程式檔:可通過功能表“檔”/“新建”後選“程式”,按“新檔”按鈕(File/New/Program/New file)進入程式檔的編輯視窗,輸入程式碼。而通過工具列上“新建”按鈕(或快速鍵Ctrl+N)、專案管理器、或任何的文字編輯器也均可建立程式檔。熟練的程式設計員常在命令視窗輸入命令建立程式檔:modify command [<程式檔案名>]。
運行程式檔:可通過以下多種方式之一運行程式:功能表“程式”/“運行”(Program/Do);工具列運行按鈕(或快速鍵Ctrl+D);專案管理器中選中程式檔後運行;命令do <程式檔案名>。
(2)程式中常用命令
程式中常用的命令:交互輸入命令ACCEPT,INPUT,WAIT;輸出命令?和??;清屏命令CLEAR,取消運行CANCEL;系統狀態設置命令SET。另外如,文字區塊輸出命令TEXT <文本資訊> ENDTEXT。
VFP兼具結構化程式設計和物件導向程式設計的特點,可以認為結構化程式是VFP程式的基石,而表單程式設計則較好地體現了物件導向程式設計的特點。表單程式設計類似於VB、DELPHI等的程式設計方式。故以下主要介紹VFP結構化程式設計的有關命令。
(3)結構化程式設計
VFP的三種基本結構是:順序、選擇和迴圈結構。選擇結構的語句有:IF / ENDIF,DO CASE / ENDCASE;迴圈結構的語句有:DO WHILE / ENDDO,SCAN / ENDSCAN,FOR / ENDFOR。它們均是配對使用的。
副程式:建立用MODIFY COMMAND命令;返回用RETURN語句;調用用DO語句。除作為一個檔的形式保存外,副程式通常另有兩種常用的形式:過程和自訂函數。可以把過程和自訂函數組織在一個過程檔中,調用之前用SET PROCEDURE TO <過程檔案名>打開即可。過程:說明用PROCEDURE <過程名>;關閉:SET PROCEDURE TO或CLOSE PROCEDURE。自訂函數:以FUNCTION <函數名>開頭,以RETURN <運算式>結束。二者的調用均可用<過程或函數名>()或DO <過程或函數名> [WITH <參數表>]兩種方式 。
基本操作及程式設計實例
資料庫設計是在DBMS支援下設計資料庫應用系統(如MIS)的過程,資料庫是資料庫應用系統處理資訊的核心和基礎。資料庫設計包括設計目標、方法、步驟,具體可分為以下幾個階段:系統需求分析;概念設計;邏輯設計;物理設計;應用程式編碼及調試;應用程式運行維護階段。對於小型應用系統,資料庫及表的建立,程式設計,則是兩個常見的階段。
1、基本操作實例
(1)設計目標
建立資料庫xsgl.dbc,包含3個表:xsqk.dbf,course.dbf,score.dbf。各表的結構如下:xsqk (xh C(10),xm C(8),sex C(2),birthday D) ,course(cid C(3),cname C(10)),score(xh C(10),cid C(3),fs N(5,1))。
(2)建立並顯示資料庫和資料表命令序列
create database xsgl &&建立資料庫檔, 生成一個空的庫檔
Create xsqk &&以對話模式建立表xsqk, 輸入各欄位定義. 表自動加入資料庫中
其後可執行Create course和Create score,建立course和score表
Display structure &&顯示表的結構,也可list stru.對待操作的表可先用use命令打開Append &&以對話模式追加記錄
List tables &&顯示資料庫中的表名資訊, 也可用display tables
(3)修改資料庫和資料表結構等
Open database xsgl &&打開資料庫xsgl可直接使用modify database xsgl進入修改資料庫
Use xsqk &&打開資料表,也可在資料庫設計器中擊右鍵功能表進入修改表
Modify structure &&修改表結構
Index on xh tag xh &&建立結構複合索引
Index on xm to xm &&建立單索引檔
Set index to xm,xsqk order tag xh &&打開索引,設置主控索引, 亦可在表設計器中索引
Close database &&關閉資料庫,Cose all等命令也可關閉庫
(4)為資料表建立查詢和視圖及其使用
Create query qxsqk &&打開查詢設計器建立查詢;可通過功能表Tool/Wizards/Query
Create view vxsqk &&打開視圖設計器建立視圖;須先執行open database xsgl
Do qxsqk.qpr &&使用查詢檔輸出結果
Use vxsqk &&使用視圖查看記錄
(5)建立報表和標籤及其調用
Create report rxsqk &&進入報表設計器設計報表,也可通過功能表、專案管理器、嚮導等
Create label lxsqk &&進入標籤設計器設計標籤
Report form rxsqk preview &&預覽設計好的報表檔
label form lxsqk preview &&預覽設計好的標籤; Report form rxsqk to printer prompt列印
2、VFP程式設計實例
VFP中結構化程式設計方法和OOP方法分別可用來編制一些經典演算法的實現程式和應用系統。所有代碼既可全部通過文字編輯器輸入,也可借助于表單設計器、功能表設計器等工具。
(1)借助于編輯器
在VFP的命令視窗中輸入:modify command prgApp
在編輯器中輸入如下圖中的程式碼;按Ctrl+W存檔退出,用do prgapp命令運行此程式。
(2)應用表單設計器
在VFP命令窗口鍵入:create form frmApp;進入表單設計器,在表單上添加需要的控制項,並設置一些屬性,再對表單和控制項的有關事件或方法編寫過程。最後存檔並運行表單。
學習難點剖析
1、VFP資料表的一對多關聯
表之間的關聯據父表與子表間記錄的對應關係分為一對一的關聯、一對多的關聯。被關聯的子表必須按關聯欄位建立索引並打開索引。表間建立關聯的方法有兩種:資料庫中建立的關聯為永久關聯;命令方式(set relation to recno()/expN/KeyField)建立的關聯為臨時關聯。一對一的關聯容易理解,即父表記錄指標的移動與子表為一一對應的關係,從而可同時存取相關聯表中的欄位;一對多的關聯則較難理解,父表移動一條記錄指標,子表按關聯欄位存在多條等值記錄,如何應用呢?舉例說明如下:
設有兩個表,其結構為:zgpm(deptid,deptname),zgqk(deptid,zgid,name,sex,wage),操作命令序列如下:
2、VFP功能表的掛接和使用
VFP的功能表可分為視窗功能表和快顯功能表。VFP功能表的建立可用功能表設計器編輯之後生成功能表程式,或直接在程式檔中用語句(如MENU,DEFINE PAD,DEFINE BAR,DEFINE POPUP;@行,列 MENU;@行,列 PROMPT等)定義功能表。建立之後以DO <功能表檔案名.MPR>調用。視窗功能表預設顯示在VFP主視窗,也就是系統記憶體變數_SCREEN對應的視窗中;運行完畢後如要恢復VFP系統功能表,可使用SET SYSMENU TO DEFAULT或重新啟動VFP。而快顯功能表顯示則是在相應物件(比如表單、文字方塊等)的RightClikc事件中調用。
對VFP視窗功能表的掛接,如果欲使其顯示在某個表單中,則必須作有關的設定之後才能實現。具體方法是:在功能表設計器打開此功能表,選擇“顯示”(View)功能表中的“常規選項”(General Options),勾選“頂層表單”(Top-Level Form);然後,點擊“功能表”(Menu)下的“生成”(Generate);之後關閉功能表設計器,建立或修改欲顯示此功能表的表單,設置其屬性ShowWindow為“2-As Top-Level Form”,在該表單的Init事件或Load事件中加入如下代碼:DO <菜單檔案名.mpr> WITH THIS,.T.。運行此表單,即可顯示相應的功能表。
3、類與自訂控制項的註冊與使用
通常可通過兩種方式註冊類和控制項。一種常用的方式是通過表單控制項工具列上的“查看類”(View Classes)/“添加”(Add)按鈕添加視覺化類庫或控制項(副檔名為.vcx的文件);另一種方式是:使用功能表“工具”/“選項”/“控制項”(Tools/Options/Controls)中的“添加”按鈕進行註冊。註冊之後就可如同使用VFP的標準控制項一樣使用它,即在表單控制項工具列中選定相應的控制項,然後拖放至表單某位置處。
另外,有一種不太常用的方式是在命令視窗或程式碼中應用有關的命令來使用,其命令序列為:
SET CLASSLIB TO <類庫名>
O1=CREATEOBJECT(“對象名”,“類名”)
O1.VISIBLE=.T.
一般可顯示出結果;如果沒能顯示,則可先通過CREATEOBJECT函數建立一個表單物件(假定命名為frmObj),然後用frmObj.CreateObject(“obj1”,”<類名>”),再設置frmObj.obj1.visible=.T.即可顯示結果。
4、與其它應用程式的介面程式設計
根據介面功能不同,分為以下幾種方式:(1)ODBC介面程式設計:VFP中使用其它種類的資料庫,如Access資料庫、SQL Server資料庫等;其他語言環境使用VFP資料庫,如VB、VC++中使用VFP資料庫。(2)利用API函數:在VFP中使用VC++等生成的動態連接庫。(3)利用ActiveX技術:使用附加控制項。(4)在VFP中調用外接程式。(5)在VFP中生成可執行程式供其他語言程式中調用。
5、生成標準文檔
VFP中進行表單程式設計時,沒有VB等視覺化程式設計語言的智慧提示功能,也不會自動進行大小寫的轉換(VFP大小寫無關),這使得VFP的程式設計比VB等稍顯不便。不過,VFP也有自身的特點:對關鍵字以特定的顏色顯示(預設為藍色,也使用者可在功能表“工具”/“選項”/“語法著色”(Tools/Options/Syntax Coloring)設定。另外,在關閉代碼視窗並試圖存檔時,系統會自動檢查語法錯誤,並詢問使用者是取消(Cancel)還是忽略(Ignore)。
為克服上述缺點,可通過嚮導生成標準文檔(對大小寫予以規範化),即使用功能表“工具”/“嚮導”/“文檔”(Tools/Wizards/Documenting)進行操作即可。
6、 連編專案或應用程式
可通過專案管理器或命令方式連編應用程式。專案管理器的使用很簡單,設置好專案的主文件和包含檔後,點擊其中的“連編”按鈕即可。命令方式則是在命令視窗輸入命令:buile app <生成程式名> from <專案檔案名>或build exe <生成程式名> from <專案檔案名>。
值得一提的是,連編成的可執行程式若在VFP環境外部調用(如開始/運行視窗中鍵入檔案名),有時會出現一閃而過的情況,這是由於程式碼中缺少read events語句建立事件迴圈,可加入主表單的Activate事件中,並在其Destroy事件中加入clear events語句。當然,也可建立一個程式檔,在其中調用主表單,並加入上述兩條語句。
7、發佈應用程式
可通過功能表“工具”/“嚮導”/“安裝”(Tools/Wizards/Setup)進行生成可安裝的應用程式,發佈給使用者作為安裝程式。注意在其中一步建立程式組時按一下可執行檔對應的核取方塊,在隨後打開的視窗中填入程式項名稱和可執行程式名(格式為:%s程式檔案名)。這樣,在使用者安裝此應用程式時才可在Windows系統的“開始”/“程式”功能表中生成該程式項名。完成後選擇setup即可安裝應用程式。
學習VFP,不僅可以熟悉資料庫和表的設計與建立方法,還可以掌握物件導向和視覺化程式設計的思路和模式,從而對其他的視覺化程式設計語言如VB、VC++、DELPHI等的學習起到舉一反三、觸類旁通的作用。日常工作中,經常應用VFP建立資料庫和資料表,然後既可用VFP程式設計,也可選用VB、VC++等語言基於此資料庫或表進行程式設計。SQL作為一種資料庫標準語言,應用非常廣泛。SQL在VFP中的應用也十分靈活、方便,可以替代VFP的資料庫/表操作命令完成資料的管理、維護等工作。由於SQL命令的語法在不同的集成環境中大同小異,通過VFP中SQL的學習和使用,有助於對其他環境中SQL的理解和應用。
(作者單位:廣東科學技術職業學院電腦與資訊工程系)
本文由oo37影院收集而来.无弹窗电影站,热播电视剧,高清电影,电影排行榜,电视剧排行榜,热门电视剧,最新电影,最新电视剧
第二篇:全国计算机等级考试二级VFP学习笔记略案
一、二级Visual Foxpro的基本框架和主要内容(同学们可以打印出来后,在上课时在右边空白处记上自己的笔记内容)
1.基本框架:总—分—总的模式
第一章:总述
第二—九章:分述
第十章:总结
第十一章:上机指导
2.重要章节及内容(见教材目录)
各个章节考试时都有涉及,其中第三、四和七章为重点。
3.题型:
1)笔试部分:单选题 2分*35题=70分(其中前十题在二级vf公共基础知识中)
填空题 2分*15题=30分(其中前五题在二级vf公共基础知识中)
2)机试部分:基本操作题 30分
简单应用题 40分
综合应用题 30分
(其中不涉及公共基础知识,采取随机抽题的方式)
二、基础知识
1.vf的作用是要用来处理现实中的问题,主要使用程序和数据来进行。程序师处理数据的一组命令;而数据就是被程序处理的对象。
2.vf软件的启动:两种方式
桌面上的快捷方式
开始菜单—程序—MS—VF
3.vf的安装:两种方式
光盘安装:setup.exe
网络安装
4.了解vf界面
标题栏
主菜单
常用工具栏
主窗口:显示或输出数据处理后的结果。
状态栏:显示数据处理时的状态信息。
命令窗口:用户对计算机发布的命令。
5.vf中最常用命令介绍
?表示隔行输出。
??表示同行输出。
&&+内容表示是对前面所写命令的注释说明,可提高程序的可读性,一般以绿色显示。 Clear表示对主窗口进行清屏,它本身就是命令,因而clear后不加()。
三、数据与数据运算
(一)简单介绍vf系统中数据的形式和类型
1.vf系统所处理的数据形式有四种:
变量
表达式
函数
2.上述四种形式的数据根据其组成和结构的不同又可分为六种类型:
数值型
1
货币型
字符型
日期型
日期时间型
逻辑型
上述类型决定数据的存储方式和运算方式。
(二)常量
1.含义:是用以表示一个具体的、确定的、不变的值。
2.常量的类型:
1)数值型常量:
含义:也称N型,用来表示数量的多少。
组成:由数字0—9,小数点和正负号构成。
可用科学计数法的形式来书写,如:1500=1.5*10的3次方=1.5e3,其中的e/E表示10的n次方,n为整数(正整数、负整数、0均可)。
数值型数据在内存中用8个字节表示。
2)货币型常量:
含义:也称Y型,用来表示货币值。
组成:在数值型常量之前加上一个$符号即可。
在存储和计算时采用4位小数,多于4位时自动四舍五入。
没有科学计数法形式,在内存中占用8个字节。
3)字符型常量
含义:也称C型或者字符串。
组成:用半角的单引号、双引号或方括号作为定界符把字符串括起来,且定界符必须成对匹配。但定界符不是字符型常量的内容。
定界符内的字符可为数字、汉字、英文、空格或者无内容。
不包含任何字符的字符串为空串;完全以空格为字符的字符串为空格字符串。
4)日期型常量:
含义:用来显示日期,也称D型。
组成:它的定界符是一对花括号,并且花括号内第一个字符必须是脱字符^,花括号内括年月日三部分内容,各部分内容之间用分隔符-分隔。而斜杠则是系统在主窗口显示日期型数据使用的默认分隔符。{^yyyy-mm-dd}。
日期型常量也用8个字节表示。
影响日期格式的设置命令:
Set date to ymd/dmy/mdy
——功能是设置日期显示时的格式。
Set mark to “-”或者”/”或者”\”
——功能是用于设置显示日期型数据时的分隔符。若未指定分隔符则表示恢复系统默认斜杠分隔符。
Set century on/off
——功能是设置年份是以(on)4位或(off)2位来显示。
5)日期时间型常量:
含义:用来显示日期和时间,也称T型。
组成:{^yyyy-mm-dd hh:mm:ss am/pm}。
日期时间型常量也用8个字节存储。
注:上述所有关于日期和日期时间的设定在vf界面的工具菜单—选项—区域中进行操作。
6)逻辑型常量:
2
含义:它只有逻辑真和逻辑假两个值,也称L型。
组成:逻辑真——.t. .T. .y. .Y.
逻辑假——.f. .F. .n. .N.
前后的两个点作为定界符必不可少,但是只占1个字节。
(三)变量
1.定义:是指在成都之行进程中,其值可以被改变的量。
2.变量的命名原则:
以汉字、字母或下划线开头,可以含有数字,但不能含有非法字符如小数点、空格或通配符(*/?)。 要尽量做到见文知义。
3.变量的分类:
1)字段变量:在表文件中记录属性内容的变量。表中的每一个列标题就称为一个字段变量。列标题的名称就是这个字段变量的名称,其下的具体内容就是这个字段变量的值,即字段值。 注意一:表的每一行被称为一条记录,鼠标指向某一行时会变成指针的标志,指针所指向的行即此字段当前的值,当输出这个字段变量时,就会在主窗口显示当前行的值。
注意二:若字段变量名和内存变量名重名的现象时,优先输出字段变量的值;若想输出内存变量的值,则需在变量名前加上前缀M.(或M->)。
2)系统变量:是由vf系统自定义的变量,其名称是由系统预先定义好的,通常以下划线_开头。 例如:_screen. fontsize=20 可更改主窗口所显示字的字号大小;
_screen. backcolor=rgb(0,255,45) 可更改主窗口的背景颜色。
_vfp. Caption=”任意字符” 可更改vf标题栏上显示的标题名。
3)内存变量:
含义:表示内存中临时存放数据的单元格,它的类型取决于其中存放数据的类型。 内存变量的赋值:即把一个数据存放到内存变量中。两种方法:
格式一:store 表达式/数据 to 变量名 可把同一个值赋给不同的变量,各内存便另名之间要用逗号隔开。
格式二:变量名=表达式/数据(注意:数据为常量时必须加””)
可通过对内存变量重新赋值来改变其内容和类型。
内存变量的显示:list/display memory [like */?] 用来显示内存变量的信息。
内存变量的清除:
格式一:clear memory/release all 表示清除全部内存变量
格式二:release 变量名表 表示清除制定内存变量,可为若干个
格式三:release all like */?或except */? 表示清除相匹配或不相配的内存变量。
数组:
①含义:数组是一种特殊的内存变量,表示内存中连续的若干个存储单元。用来存储一系列数值,其中的每个值称为数组的一个元素,可通过下标来显示,下标用()或[]括起来。一个数组中的各个元素的值的数据类型可以不同。
②创建数组的命令:dimension/declare 数组名(元素个数)。
注意:若定义了一个数组aa,再给数组名aa赋值,则表明是给aa数组中的每个元素都赋予了一个相同的值。
③数组分类:
一维数组:一行多列 dimension 数组名(数值表达式)
二维数组:多行多列dimension 数组名(数值表达式1,数值表达式2)
其中,数值表达式1指定其行,数值表达式2指定其列,若只有一个数值,则为一维数组。 ④一维数组与二维数组的转换:
例如:dimension aa(3)——aa(1,1),aa(1,2),aa(1,3)
这是将一维数组转换为二维数组。
3
dimension bb(2,3)——bb(1),bb(2),??bb(6)
这是将二维数组转换为一维数组。
(四)表达式
1.定义:通过特定的运算符将常量、变量和函数连接起来的式子,通过运算后,表达式都会生成一个值。
2.形式:
1)单一的运算对象,如常量、变量或函数。
2)由运算符将运算对象链接起来的式子。
3.作用:
1)赋值
2)输出
4.常用表达式的类型:
1)数值表达式
定义:由算术运算符将数值型数据连接起来形成的式子。
运算符:( ) 括号
**或^ 乘方
*/和% 乘除和求余运算
+和- 加和减
这四类运算符的优先级依次降低,同类之间具有相同的优先级。
运算结果的类型:它的值仍是数值型。
注意求余运算符%的用法:它的被除数与出书都必须是整数,除数不能为0。
求余三原则表述如下:
若c=a%b 做这种题的时候先算出c=︱a︱%︱b︱的值,然后c必须与a同号。还要注意的是:若a与b同号,则当前余数就是c
若a与b异号,则当前余数结果是b+c
例如:?10%3,-10%-3,10%-3,-10%3
1 -1 -2 2
2)字符表达式
定义:由字符串运算符将字符型数据连接起来形成的式子。
运算符:
+ 表示前后两个字符串首尾连接成一个新的字符串
- 表示连接前后两个字符串,并将前字符串的尾部空格移到合并后的新字符串尾部。 这两个运算符之间不分优先级。
例如:a=”hello ”
b=”everyone!”
?a+b,a-b
hello everyone! hello everyone!
3)日期时间表达式
定义:用运算符将日期或日期时间型数据连接起来形成的式子。
运算符:也是+和-。
格式:
4)关系表达式
定义:通常也简称为简单逻辑表达式,它通过关系运算符将两个运算对象连接起来形成的式子,即表达式1 关系运算符 表达式2。
运算符:< 小于
> 大于
4
= 等于
<>、#或!= 不等于
<= 小于等于
>= 大于等于
== 字符串精确比较
$ 字符包含测试
注意:①==和$仅适用于字符型数据,其他运算符适用于任何类型的数据,但运算符前后的两个运算对象的数据类型必须要保持一致。
②数值型、货币型数据各自之间的比较按其数值的大小进行。
③日期型、日期时间型数据各自之间的比较,越晚日期或时间越大。
④逻辑型数据比较:.t.>.f.
⑤字串包含测试:字符表达式1 $ 字符表达式2 ,如果前者整体是后者的字串,即1包含于2,则结果为真,否则为假。
⑥字符串之间的比较原则是依次比较它们对应位置中的字符,若相同则继续比较,若不同则根据这两个字符的排序序列决定字符串的大小。
但是,根据不同的排序方式,所出的结果也是不同的。
2 排序方式设置:set collate to “排序次序名”
排序次序名可以是machine、pinyin和stroke。
Machine的原则是:空格<数字<大写字母(其中A最小)<小写字母(其中a最小);
(测asc码函数:asc(字符表达式),可测比如”A””a”的asc码为65和97)
Pinyin的原则是:排在字母表后面的字母>排在前面的字母,若字母相同则大写>小写; Stroke的原则是:汉字的笔画谁多谁大。
2 字符串的精确比较与exact设置:
“==”只有两个字符串完全相同时,运算结果为逻辑真,否则为逻辑假。
在“=”比较两个字符串时,运算结果与set exact on/off有关:off表示只要右边字符串整体与左边字符串的前面部分内容相匹配,即可为真,否则为假;on则表示比较到两个字符串全部结束,先到短的字符串尾部加空格,使两个字符串的长度相等,然后进行比较,
运算结果的类型:逻辑型。作用是比较两个表达式的大小。
5)逻辑表达式
定义:由逻辑运算符将逻辑型数据连接起来而形成的式子,格式为:关系式1 逻辑运算符 关系式2。
运算符:not/! 逻辑非And 逻辑与Or 逻辑或其优先级的顺序是由高到低。
运算结果的类型:仍是逻辑型数据的式子,即逻辑表达式。
注意:不同类型的运算符之间的优先级顺序为:先执行算术运算符、字符串运算符和日期时间运算符,其次执行关系运算符,最后执行逻辑运算符。
(五)常用函数
1.定义:函数是用程序来实现的一种数据运算或转换,也就是预先定义好的程序段。可有若干运算对象,但只能有一个运算结果,成为函数值或返回值。
2.格式:函数名() 若括号内有变量则为有参函数,括号内无变量则为无参函数。但无论怎样,括号都不可省略。
3.常用函数的类型:
1)数值函数:自变量和函数值为数值的一类函数。8个& 求绝对值函数
格式:abs(数值表达式)
功能:返回指定数值表示的绝对值
结果:为N型,且必然>=0
& 求符号函数
5
格式:sign(数值表达式)
功能:返回指定数值表达式的符号
结果:为N型,当表达式的运算结果为正、负和零时,函数值分别为1、-1和0
& 求平方根函数
格式:aqrt(数值表达式)
功能:返回指定表达式的平方根,自变量表达式的值需>=0
结果:为N型,且且必然>=0
& 求圆周率函数
格式:pi()
功能:返回圆周率,该函数没有自变量
结果:为N型,即为3.14
& 求整函数
格式:int(数值表达式) 只求整,不四舍五入
ceiling(数值表达式)
floor(数字表达式)
功能:返回指定数值表达式的整数部分返回大于或等于指定数值表达式的最小整数返回小于或等于指定数值表达式的最大整数
结果:N型
& 四舍五入函数
格式:round(数值表达式1,数值表达式2)
功能:返回指定表达式在指定位置四舍五入的结果,数值表达式2指定四舍五入的位置。若数2>0,表示的是对数1要求的所保留的小数位数;若数2=0,表示的是对数1取整数,并四舍五入;若数2<0,表示的是对数1的整数位舍入的位数,并四舍五入。
结果:为N型
& 求余函数
格式:mod(数值表达式1,数值表达式2)
功能:返回两个数值相除后的余数。数1是被除数,数2是除数。其他原则与求余运算符%的用法相同:被除数与除数都必须是整数,除数不能为0。求余三原则表述如下:
若c=a%b 做这种题的时候先算出c=︱a︱%︱b︱的值,然后c必须与a同号。还要注意的是:若a与b同号,则当前余数就是c
若a与b异号,则当前余数结果是b+c
结果:为N型
注意:判定x是否能被i整除的方法有:
mod(x,i)=0
x%i=0
int(x/i)= x/i
& 求最大值和最小值函数
格式:max/min(表达式1,表达式2??表达式n) 其表达式的类型任意,但写入括号内的必须是同一类型的表达式。
功能:计算各自变量表达式的值,并返回其中的最大值或最小值
结果:根据括号内表达式的类型而定
2)字符函数:自变量一般是字符型数据的函数。10个
& 求字符串长度函数
格式:len(字符表达式)
功能:返回指定字符表达式值的长度,即所包含的字符个数。
结果:N型
6
& 大小写转换函数
格式:upper/lower(字符表达式)
功能:将指定表达式中的小写字母转换成大写字母
或者将指定表达式中的大写字母转换成小写字母,其他字符不变
结果:C型
& 空格字符串生成函数
格式:space(数值表达式)
功能:返回由指定数目的空格组成的字符串
结果:C型
& 删除前后空格函数
格式:trim(字符表达式)
ltrim(字符表达式)
alltrim(字符表达式)
功能:返回指定字符表达式值去掉尾部空格后形成的字符串
返回指定字符表达式值去掉前导空格后形成的字符串
返回指定字符表达式值去掉前导和尾部空格后形成的字符串
结果:C型
& 取子串函数
格式:left(字符表达式,长度)
right(字符表达式,长度)
substr(字符表达式,起始位置,长度)若缺省长度,表示从指定位置一直取到最后一个字符 功能:从指定表达式值的左端取一个指定长度的字串作为函数值
从指定表达式值的右端取一个指定长度的字串作为函数值
从指定表达式值的指定起始位置取一个指定长度的字串作为函数值
结果:C型
& 计算子串出现次数函数
格式:occurs(字符表达式1,字符表达式2)
功能:返回第一个字符串在第二个字符串中出现的次数,若字符串1不是字符串2的字串,函数值为0
结果:N型
& 求子串位置函数
格式:at(字符表达式1,字符表达式2,数值表达式) 区分大小写
atc(字符表达式1,字符表达式2,数值表达式)不区分大小写
功能:若字符表达式1是字符表达式2的字串,则返回字符表达式1值的首字母在字符表达式2值中的出现位置;若不是字串返回0;第三个变量数值表达式用于表明要在字符表达式2值中搜索字符表达式1值的第几次出现的位置,数值表达式的默认值是1。
结果:N型
& 子串替换函数
格式:stuff(字符表达式1,起始位置,长度,字符表达式2)
功能:用字符表达式2的值替换字符表达式1中由起始位置和长度指明的一个子串,替换和被替换的字符个数不一定相等。如果长度值是0,字符表达式2则插入由起始位置指定的字符前,如果长度值是空串,那么字符表达式1中由起始位置和长度指明的字串被删去。 结果:C型
& 字符替换函数
格式:chrtran(字符表达式1,字符表达式2,字符表达式3)
功能:当字符表达式1中的一个或多个字符与字符表达式2中的某个字符相匹配时,就用字 7
符表达式3中的相同位置上的对应字符替换这些字符。如果字符表达式3包含的字符个数少于字符表达式2包含的字符个数,因为没有对应字符那么字符表达式1中相匹配的各个字符将被删除;如果字符表达式3包含的字符个数多于字符表达式2包含的字符个数,多余字符被忽略。
结果:C型
& 字符串匹配函数
格式:like(字符表达式1,字符表达式2)
功能:比较两个字符串对应位置上的字符,若所有对应字符都相匹配,函数值返回逻辑真,否则返回逻辑假;字符表达式1中可以包含通配符*和?,*可与任何数目的字符相匹配,?可以与任何单个字符相匹配。
结果:L型
3)日期和时间函数:自变量一般是日期型或日期时间型数据的函数。
& 系统日期、系统时间和系统日期时间函数
格式:date()
time()
datetime()
功能:返回当前系统日期
返回当前系统时间
返回当前系统日期时间
结果:D型
C型
T型
& 求年份、月份和天数函数
格式:year(日期表达式/日期时间表达式)
month(日期表达式/日期时间表达式)
day(日期表达式/日期时间表达式)
功能:从指定的日期表达式或日期时间表达式中返回年份
从指定的日期表达式或日期时间表达式中返回月份
从指定的日期表达式或日期时间表达式中返回天数
结果:N型
& 求时、分、秒函数
格式:hour(日期时间表达式)
minute(日期时间表达式)
sec(日期时间表达式)
功能:从指定的日期时间表达式中返回小时部分(24小时制)
从指定的日期时间表达式中返回分钟部分
从指定的日期时间表达式中返回秒数部分
结果:N型
4)数据类型转换函数:其功能就是将某一种类型的数据转换成另一种类型的数据。5个 & 数值转换成字符串
格式:str(数值表达式,长度,小数位数)
功能:将数值表达式的值转换成字符串,需要时自动四舍五入
设数值表达式原长度为m,指定长度为n
若n>m,返回结果自加前导空格
若整数位<=n<=m,优先取整数部分,再根据指定长度中剩下的位数确定小数位,注意整数位中不包括小数点
8
若n<整数位,返回结果为一串星号*,即不能正常转换。
注意:长度的默认值是10,小数位数的默认值是0
结果:C型
& 字符串转换成数值
格式:val(字符表达式)
功能:将由数字符号(包括正负号、小数点)组成的字符型数据转换成相应的数值型数据。若字符串内出现非数字字符,那么只转换前面部分;若字符串的首字符不是数字符号,则返回数值零,但忽略前导空格。
结果:N型
& 字符串转换成日期或日期时间
格式:ctod(字符表达式)
ctot(字符表达式)
功能:将字符表达式的值转换成日期型数据
将字符表达式的值转换成日期时间型数据
结果:D型或T型
& 日期或日期时间转换成字符串
格式:dtoc(日期表达式/日期时间表达式)/dtoc(日期表达式/日期时间表达式 [,1])
ttoc(日期时间表达式)/ttoc(日期时间表达式 [,1])
注意:[,1]表示去掉年月日之间的分隔符
功能:将日期型数据或日期时间型数据的日期部分转换成字符串
将日期时间型数据转换成字符串
结果:C型,结果分别为8个和14个字符
& 宏替换函数
格式:&字符型变量[.]
功能:替换出字符型变量的内容,若该函数与其后的字符无明确分界,则用[.]作为函数结束标识
结果:由字符型变量的内容决定
5)测试函数:主要用来测试当前操作对象的状态。11个
& 值域测试函数
格式:between(表达式1,表达式2,表达式3)
功能:判断表达式1的值是否在表达式2和表达式3的值之间,若表达式1的值大于等于表达式2的值并且小于等于表达式3的值,那么函数值为逻辑真,否则为逻辑假。若表达式2和表达式3的值中有一个是null值,那么函数值也为null值
结果:L型或null值
& null值测试函数
格式:isnull(表达式)
功能:判断表达式的运算结果是否为null值,是则返回逻辑真,否则逻辑假
结果:L型
& “空值”测试函数
格式:empty(表达式)
功能:判断指定表达式的运算结果是否为“空值”,是则返回逻辑真,否则逻辑假 结果:L型
注意:不同类型数据的“空”值规定:
& 数据类型测试函数
格式:vartype(表达式)
功能:测试指定表达式的类型,返回一个大写字母表示某个类型的数据
9
结果:C型
注意:各大写字母的含义如下:
C——字符型或备注型 N——数值型、整型、浮点型或双精度型
Y——货币型 L——逻辑型
O——对象型 G——通用型
D——日期型 T——日期时间型
X——null值 U——未定义
注意:关于表文件也有一系列的测试函数,vf为每个打开的表设置了一个内部记录指针,指向正在被操作的记录,该记录称为当前记录,记录指针的作用是标识表的当前记录。 表文件的逻辑结果如下图所示:
文件开始标识(表文件首/BOF)
文件结束标志(表文件尾/EOF)
& 表文件首测试函数
格式:bof([工作区号/表别名])
功能:测试指定表文件中的记录指针是否
指向文件首,是则返回逻辑真,否
则返回逻辑假
结果:L型
注意:若缺省自变量则测试当前表文件
若表文件中不包含任何记录则 函数返回逻辑真
& 表文件尾测试函数
格式:eof([工作区号/表别名])
功能:测试指定表文件中的记录指针是否指向文件尾,是则返回逻辑真,否则返回逻辑假 结果:L型
注意:若缺省自变量则测试当前表文件
若表文件中不包含任何记录则函数返回逻辑真
& 记录号测试函数
格式:recno([工作区号/表别名])
功能:测试指定表文件中当前记录指针所指记录的记录号
结果:N型
注意:若缺省自变量则测试当前表文件
若指定工作区没有打开的表文件,函数值为0
若bof()返回.t.即指针指向文件首,函数值为1
若eof()返回.t.即指针指向文件尾,函数值为总记录+1
& 记录个数测试函数
格式:reccount([工作区号/表别名])
功能:返回指定表文件中的记录个数
结果:N型
注意:若缺省自变量则测试当前表文件
若指定工作区没有打开的表文件,函数值为0
& 条件测试函数
格式:iif(逻辑表达式,表达式1,表达式2)
功能:测试逻辑表达式的值,若为逻辑真,函数返回表达式1的值,若为逻辑假,函数返回表达式2的值
结果:根据表达式1和表达式2的类型而定
注意:表达式1和表达式2的类型不要求相同
10
& 记录删除测试函数
格式:deleted([工作区号/表别名])
功能:测试指定的表文件中的当前记录是否有逻辑删除标记,有则返回逻辑真,没有则返回逻辑假
结果:L型
四、VF数据库及其操作
(一)数据库及其相关操作
1.概念:
1)含义:数据库是一个逻辑上的概念和手段,它通过一组系统文件将相互关联的数据库表及其相关的数据库对象统一组织和管理。
2)扩展名:.dbc。与之相关的会自动建立.dct的数据库备注文件和.dcx的数据库索引文件。
2.建立数据库文件:3种方法
1)打开项目管理器—数据选项卡—数据库—新建—新建数据库—输入数据库文件名—保存
2)文件—新建—文件类型:数据库—输入数据库文件名—保存
3)create database 数据库文件名(此命令输入后数据库文件已建立,但其数据库设计器并未显示,只需再输入modify database 数据库文件名即可显示)
3.打开数据库文件:3种方法
1)打开项目管理器—数据选项卡—选中相应的数据库—打开/关闭
2)文件—打开—文件类型:数据库—选中相应的数据库—确定
3)open database 数据库文件名
4.修改数据库文件:3种方法—即调用数据库设计器
1)打开项目管理器—数据选项卡—展开数据库至相应的数据库—修改
2)文件—打开—文件类型:数据库—选中相应的数据库—确定
3)modify database 数据库文件名(文件名存在是修改,不存在即为新建)
5.关闭数据库文件:2种方法
1)close database ——关闭当前数据库(之后不加当前库文件名)
2)close all ——关闭所有打开的数据库
6.删除数据库文件:2种方法
1)打开项目管理器—数据选项卡—展开数据库至相应的数据库—移去—移去
2)delete database 数据库文件名
注意:
& 做题前切记设置好自己的存盘位置,未存至指定位置,不得分。
& 项目、项目文件、项目管理器
使用项目管理器时,先要建立项目文件(.pjx)
项目文件的建立方法:2种
鼠标法:文件—新建—文件类型:项目—输入项目文件名—保存—项目管理器
命令法:create/modify project 项目文件名
项目是指文件、数据、文档和vf对象的集合
项目管理器是vf中处理数据和对象的主要组织工具,为系统开发者提供了极为便利的工作平台;功能:组织和管理数据以及编译。
项目管理器各选项卡的具体内容:
– 全部选项卡:数据 文档 类 代码 其他
– 数据选项卡:数据库 自由表 查询
– 文档选项卡:表单 报表 标签
– 类选项卡:无
– 代码选项卡:程序 API库应用程序
11
– 其选项卡他:菜单 文本文件 其他文件
(二)数据库表及其相关操作
1.概念:数据库表是数据的载体,扩展名为.dbf。
2.建立数据库表:4种方法
1)打开项目管理器—数据选项卡—展开相应数据库至表—新建—新建表—输入数据库表文件名—保存
2)打开数据库设计器—击右键/数据库菜单—新建表—输入数据库表文件名—保存
3)文件—新建—文件类型:表—输入数据库表文件名—保存
4)create 表名.dbf
注意:建立数据库表时窗口必须打开相对应的数据库。
3.打开数据库表:2种方法
1)文件—打开—文件类型:表—选中相应表—确定
2)use 表名(有表名是打开相应表,无表名是关闭表)
4.修改数据库表:4中方法
1)打开项目管理器—数据选项卡—展开数据库至相应的表—修改
2)数据库设计器—选中相应表—击右键/数据库菜单—修改
3)选中相应表—显示菜单—表设计器—修改即可
4)modify structure
5.删除数据库表:3种方法
1)打开项目管理器—数据选项卡—展开数据库至相应的表—移去—删除
2)数据库设计器—选中相应表—击右键/数据库菜单—删除/移去—删除
3)drop table 数据库表名
6.表的浏览:4种方法
1)打开项目管理器—数据选项卡—展开数据库至相应的表—浏览
2)数据库设计器—选中相应表—击右键/数据库菜单—浏览
3)选中相应的表—显示菜单—浏览
4)browse 表名(之前需用use 命令选定当前表)
7.向表追加记录(都是追加在原有记录之后)
2 append blank 在所有记录后追加一条空白记录,等价于表菜单-追加新记录
2 append 在所有记录后追加若干条新记录
8.向表插入记录
2 insert 在当前记录之后插入若干条记录
2 insert before 在当前记录之前插入若干条记录
2 insert blank 在当前记录之后插入一条记录
2 insert before blank 在当前记录之前插入一条记录
9.删除表记录
逻辑删除:只是在记录旁作删除标记,必要时还可去掉删除标记恢复表记录
2 delete 删除表中当前记录
2 delete for 条件表达式 删除表中满足条件的所有记录
物理删除:真正从表中删除记录
2 pack 将当前表中具有逻辑删除标记的记录物理删除
2 zap 将当前表中所有记录物理删除,无论是否由逻辑删除标记
10.恢复表记录
2 recall 恢复表中当前记录
2 recall all 恢复表中所有被删记录
2 recall for 条件表达式 恢复表中满足条件的所有被删记录
12
11.更新表记录
2 replace all 字段名 with 表达式 把表中全部记录的字段名更新为表达式的值
2 replace 字段名 with 表达式 只把表中当前记录的字段名更新为表达式的值
2 replace 字段名 with 表达式 for 条件表达式 只把表中满足条件的记录的字段名更新为表达式的值
12.显示表记录
2 list 默认显示当前表中所有记录
2 dispay 默认显示当前表中当前记录
2 list/display 字段名1?字段名n for 条件表达式 显示表中满足调价的记录
2 list next n(n为正整数或负整数)显示从当前记录往后/往前算起的n条记录
13.查询定位记录
2 go n(此处n为记录号)将指针定位于第n条记录,即记录号为n的记录
2 go top 将指针定位于首记录
2 go bottom 将指针定位于尾记录
2 skip n(n为正整数或负整数,默认为1) 指针从当前记录向下/向上跳n
2 条件定位:locate for 定位表达式 将指针定位于当前表中满足条件的第一条记录上为了判断指针所指向的记录是否满足条件,可用found()函授测试,返回逻辑真值,表示满足条件,并且还可通过continue命令继续查找表中其他满足条件的记录。
(三)自由表及其与数据库表之间的转换
1.自由表:即不属于任何数据库的表。它的建立方法与数据库表的方法相同,但是窗口必须要没有打开的数据库。
2.自由表与数据库表之间的转换
1)将自由表添加到数据库中
– 打开项目管理器—数据选项卡—展开数据库至表—添加—选中自由表—确定
– 打开数据库设计器—击右键/数据库菜单—添加表—选中自由表—确定
– add table 自由表名
2)从数据库中移为自由表
– 打开项目管理器—数据选项卡—展开数据库至表—移去—移去
– 打开数据库设计器—击右键(删除)/数据库菜单(移去)—移去
– remove table 自由表名
(四)索引及其相关操作
1.概念:索引是由指针构成的文件,这些指针逻辑上按照索引关键字值进行排序,创建一个指向(.dbf)文件记录的由指针构成的文件,新创建的索引文件和.dbf文件分别存储,并不改变原表中记录的物理顺序。
2.作用:可加速对表的查询操作。
3.分类:
1)主索引:建立主索引的字段值不允许重复,一个表只能有一个主关键字,所以一个表只能创建一个主索引,自由表不能建立主索引。
2)候选索引:也要求建立候选索引的字段值不允许重复,一个表可建多个候选索引,自由表也可建立候选索引。
3)唯一索引:为分类排序,建立唯一索引的字段值可以重复,它以指定字段的首次出现值为基础,选定一组记录并对记录进行分类且排序,一个数据库表或自由表中可建多个唯一索引。
4)普通索引:建立普通索引的字段值可以重复,并且索引项中也允许出现重复值,系统默认为普通索引。一个数据库表或自由表可建多个普通索引。
4.索引的建立:2种方法
1)用鼠标在表设计器进行,方法如下:
13
打开表设计器—字段选项卡—选中相应字段名—选择升/降序—索引选项卡—选择索引类别—确定
2)通过命令建立,格式如下:
index on 字段名 to 单独索引文件名/tag 索引项名 asce(默认升序,可省略不写)/desc(降序) unique(唯一索引)/candidate(候选索引)
注意:to 单独索引文件名建立的是单独索引文件,它的扩展名是(.idx),一般只在建立临时索引时才可使用,其中只有一个排序,并且只能建立唯一索引或普遍索引。
tag索引项名短语是建立结构符合索引,即多个索引可建立在一个索引文
件中,其文件名与相关的表同名,并且有.cdx为扩展名,其中包含多个
排序。
5.索引的使用
1)打开索引文件:set index to 结构复合索引文件名.cdx
set index to 单独索引文件名.idx
2)在使用一个特定的索引项进行查询显示时,必须指定当前索引项:
set order to 索引项名/序列号
3)使用索引快速定位:
seek 字段值 order 索引项名/序列号
作用:根据某个索引项将指针快速定位于相关字段值的第一条记录
4)删除索引:
delete tag 索引项名 删除指定索引
delete tag all 删除当前表中所有索引
(五)数据完整性
1.概念:是保证数据正确的特性,一般包括实体完整性、域完整性和参照完整性等。
2.实体完整性
1)概念:是保证表中记录唯一的特性,即在一个表中不允许有重复的记录。
2)实现方法:在vf中利用主关键字(主索引)或候选关键字(候选索引)来保证表中记录的唯一性。
3.域完整性
1)概念:即字段有效性,是字段值的取值范围。只有数据库表中才可建立域完整性。
2)域约束规则:也称为字段有效性规则,即通过对字段类型、字段宽度或定义的取值范围来对输入数据进行正确性检验。
3)建立方法:打开表设计器—选中相应的字段—编辑其约束性规则—确定
编辑其约束性规则时的要求:
规则:逻辑表达式——确定字段值取值范围
信息:字符串表达式——若违背上述规则时窗口的提示信息
alter table 表名 alter 字段名 set/drop check(规则)逻辑式 error(信息)字符表达式
默认值:所写数据类型由字段类型决定
alter table 表名 alter 字段名 set/drop default(默认值)默认值的值
4.参照完整性
1)含义:当插入、删除或修改一个表中的数据时,通过参照引用相互关联的另一个表中的数据,来检验对表的数据操作是否正确。
2)三原则:插入原则、删除原则和修改原则
3)建立和编辑参照完整性原则的方法:3步
2 建立表之间的联系(两表必须在同一数据库中)
打开数据库设计器—父表建立主索引,字表建立普通索引—建立相应表之间的联系(鼠标从主索引拖拽至普通索引即可,表之间会生成一条细实线,右击可删除联系)
2 清理数据库(即指物理删除数据库中各个表中所有带有删除标记的记录,相当于pack) 14
打开数据库设计器—数据库菜单—清理数据库(若清除未成功,则close all,然后再以独占方式打开数据库重新清理即可)
2 设置参照完整性原则
打开数据库设计器—击右键/编辑参照完整性规则
更新规则规定了当更新父表中连接字段(主关键字)值时,如何处理相关的子表中的记录: 级联—则用新的连接字段值自动修改子表中的相关所有记录;
限制—若子表中有相关记录,则禁止修改父表中的连接字段值;
忽略—则不作参照完整性检查,可以随意更新父表中的连接字段值。
删除规则规定了当删除父表中记录时,如何处理子表相关的记录:
级联—则自动删除子表中相关所有记录;
限制—若子表中有相关的记录,则禁止删除父表中的记录;
忽略—则不作参照完整性检查,即删除父表的记录时与子表无关。
插入规则规定了当插入子表中的记录时,是否进行参照完整性检查:
限制—若父表中没有匹配的连接字段值则禁止插入子表记录;
忽略—则不作参照完整性检查,即可以随意插入子表记录。
(六)多个表的同时使用与建立表之间的临时关联
1.多个表的同时使用
1)vf****有32767个工作区,每一个工作区只能打开一张表;若需在同一时刻打开多个表,则只需在不同的工作区中打开不同的表。
2)指定工作区的命令格式:
格式一:select 工作区号(1-32767)/系统别名(a-j,w11-w32767)/0(即选定当前最小工作区) 注意:此格式最后一次所选工作区为当前工作区
格式二:use 表名 in 工作区号/系统别名/0
注意:此格式第一次所选工作区为当前工作区
3)测试当前工作区号的函数:selected()
2.建立表之间的临时关联
1)含义:永久联系是指基于索引建立的表之间的关联,显示为表索引之间的细实线,每次使用时不需重新建立,但它不能控制工作区中记录指针的联动。
临时关联:能够控制表之间记录指针关系的临时联系(父动子动)。
2)建立方法:
2 分工作区打开相应表
2 分别为不同工作区的表中的外部关键字建立索引(普通索引)
2 建立临时关联
命令格式为:set relation to 索引关键字(外部关键字)into工作区号/系统别名/表名
注意:当前工作区的表为父表。而into 短语后的工作区中的表为子表。
3)解除临时联系:
set relation to 取消当前记录到所有表的临时关联;
set relation off into工作区号/系统别名/表名 取消某个具体的临时联系。
五、关系数据库标准语言SQL
(一)SQL概述
1.SQL的基本概况
1)含义:SQL是structured query languge的缩写,它是关系数据库的标准数据语言,所有的关系数据库管理系统都支持。
2)功能:数据查询、数据操作和数据定义
2.特点
1)一体化:包括数据定义、查询和操作等方面功能,可以完成数据库活动中的全部工作; 15
2)高度非过程化:只需告诉计算机用户“做什么”,SQL便可自动完成全部工作;
3)非常简洁:只有为数不多的几条命令组成;
4)它可以直接以命令方式使用,也可以嵌入到程序设计语言中以程序方式使用。
3.主要短语及其含义
1)select-说明要查询的数据
2)from-说明查询的数据来自哪些表,可对单表或多表进行查询
3)where-说明查询条件,即选择元组的条件
4)group by-用于对查询进行分组,可用它对数据进行分组汇总
5)having-必须跟group by短语一起使用,用来限定分组必须满足的条件
6)order by-用来对查询的结果进行排序
六、视图与查询
(一)视图文件(.vue)
1.定义:视图是一个定制的虚拟表,可以是本地的、远程的或带参数的;它是操作表的一种手段,不存于磁盘。
2.数据源:数据库表、自由表或其他视图等。
3.作用:通过视图可查询表也可更新表。
4.特点:它依赖表,不能独立存在,且只有在包含视图的数据库打开时才能使用。
5.分类:根据创建视图的数据来源分为两类
1)本地视图:使用当前数据库的表建立的视图
2)远程视图:使用当前数据库之外的数据源创建的试图
6.建立视图的方法:
1)根据视图设计器
& 文件—新建—文件类型:视图—新建文件—打开视图设计器—保存
& 打开项目管理器—数据选项卡—展开数据库至本地视图—新建—打开视图设计器—保存 & 打开数据库设计器—右击/数据库菜单—新建本地视图—打开视图设计器—保存 & 命令:create view
2)根据表的查询定义视图
& 格式为:create view 视图文件名 as select语句
即把select语句查询出的信息作为视图文件的内容
7.视图中的虚字段:即通过算术表达式或函数计算出来的字段,并不存于表中。
8.删除视图文件:
& 数据库设计器中—右击视图名—删除—移去
& 命令:drop view 视图文件名
注意:视图可像基本表一样使用,适用于基本表的命令基本都可用于视图,但视图不支持modify structure命令
9.视图参数:在筛选处写为?X即可
10.视图的更新功能:即更新视图文件中的内容后,建立此视图文件的基本表的内容也会有相应的更新。
方法:必须先设定更新条件,钥匙图标下选定关键字,铅笔图标下选定可更新的字段,再选中发送SQL更新选项,保存后即可实现相应的更新。
(五)程序调试
1.定义:
2.调用器环境
3.设置断点
4.调试菜单
八、表单设计与应用
16
(一)基本概念
1.VF的定义:
2.对象、方法与类
3.容器、控件与事件
(二)表单的创建与管理
1.创建表单
2.管理表单属性和方法
2 alwayssontop 指定表单是否总是位于其他窗口之上,默认.F.
2 autocentor 指定表单是否自动在vf主窗口居中显示,默认.F
2 backcolor 指定表单窗口颜色,默认255,255,255
2 borderstyle 指定表单边框的风格,默认3时采用系统边框
2 caption 指定显示于表单标题栏上的文本,默认form1
2 closeable 指定是否通过单击关闭按钮或双击控制菜单框来关闭表单,默认.T.
2 datasession 指定表单里的表是在缺省的全局能访问的工作区打开(默认1),还在在表单的自己的私有工作区打开(设定2)
2 maxbutton 确定表单是否有最大化按钮,默认.T.
2 minbutton 确定表单是否有最小化按钮,默认.T.
2 movable 确定表单是否可以移动,默认.T.
2 scrollbars 指定表单的滚动条类型,默认0-无,1-水平,2-垂直,3-既水平又垂直 2 windowstate 指定表单的状态,默认0-正常,1-最小化,2-最大化
2 windowtype 指定表单是模式表单(设置1)或非模式表单(默认0)
九、菜单设计与应用
(一)关于菜单的基本概念
1.vf菜单的种类:
1)下拉式菜单:由一个条形菜单和一组弹出式菜单(即子菜单)组成。
2)快捷菜单:一般由一个或一个上下级的弹出式菜单组成。
注意:每个菜单项都有其名称(即标题)和一个内部名字。
2.菜单文件的扩展名为.mnx;菜单程序文件的扩展名为.mpr
(二)菜单文件与菜单程序文件的操作
1.建立:3种方法,调用菜单设计器并定义菜单
1)文件—新建—文件类型:菜单—新建文件—新建菜单—菜单设计器
2)项目管理器—其他选项卡—菜单—新建—新建文件—新建菜单—菜单设计器
3)create menu 菜单文件名(.mnx可省略)
modify menu 菜单文件名(.mnx可省略),若文件存在为修改,否则为新建
2.生成菜单程序:菜单设计器—“菜单”菜单—生成—指定菜单程序文件的名称和路径—生成(即生成菜单程序文件.mpr)
注意:菜单设计完成后必须生成!!否则,菜单不存在。
3.运行或执行菜单的方法:
1)程序—运行—选中相应菜单程序文件—确定
2)do 菜单程序文件名.mpr(扩展名不可省略)
十、报表设计
(一)关于报表的基本概念
1.报表时最常用的打印文档,它为显示并总结数据提供了灵活的途径。
2.报表主要包括两部分:
1)数据源:即其数据来源,有数据库表、自由表、视图、查询或临时表
2)布局:定义了报表的打印格式,有列报表、行报表、一对多报表和多栏报表
17
(二)报表文件及其创建
1.报表文件:以.frx为扩展名
2.创建报表文件的途径:3种
1)使用报表向导:
①文件—新建—文件类型:报表—向导—报表向导/一对多报表向导—根据对话框提示操作即可
②项目管理器—文档选项卡—报表—新建—报表向导—报表向导/一对多报表向导—根据对话框提示操作即可
③工具菜单—向导子菜单—报表—报表向导/一对多报表向导—根据对话框提示操作即可 ④直接单击工具栏上的“报表向导”图标按钮—报表向导/一对多报表向导—根据对话框提示操作即可
注意:若数据源是一个表,应选取“报表向导”;若数据源包括父表和子表,则应选取“一对多报表向导”。
2)使用报表设计器:
①文件—新建—文件类型:报表—新建文件—报表设计器
②项目管理器—文档选项卡—报表—新建—新建报表—报表设计器
③create/modify report [报表文件名]
3)使用快速报表:
新建报表文件—报表设计器—报表菜单—快速报表—选择作为数据源的文件—并作简单设计后—确定
3.报表的打印预览:在常用工具栏、文件菜单、显示菜单下都可预览
命令格式为:report form 报表文件名 preview
4.报表设计器工具栏和报表控件工具栏
1)报表设计器工具栏:
2 数据分组按钮:显示数据分组对话框,用于创建数据分组及指定其属性
2 数据环境按钮:显示报表的数据环境设计器窗口
2 报表控件工具栏按钮:显示或关闭报表控件工具栏
2 调色工具栏:显示或关闭调色板工具栏
2 布局工具栏:显示或关闭布局工具栏
2)报表控件工具栏:
2 选定对象按钮:移动或更改控件的大小
2 标签按钮:在报表上创建一个标签控件,用于输入并显示与记录无关的数据
2 域按钮:在报表上创建一个字段控件,用于显示字段、内存变量或其他表达式的内容 2 线条按钮、矩形按钮和圆角矩形按钮分别用于绘制相应的图形
2 图片/activex绑定控件按钮:显示图片或通用型字段的内容
2 按钮锁定:允许添加多个相同类型的空间而不需多次选中该控件按钮
(三)报表设计
1.设置报表数据源
1)在显示菜单和常用工具栏中有数据环境—单击打开数据环境设计器—向中添加/移去相应的数据源文件—关闭即可
2)数据源被添加到报表数据环境中之后,若数据源中的数据更新,则以此为数据源的报表也将自动反映新的数据内容。
2.设置报表的布局
1)带区:主要作用是控制数据在页面上的打印位置(各带区的高度可调节)
2)报表设计器打开时默认的带区有:
2 页标头:每个页面打印一次,例如列报表的字段名
18
2 细节:每条记录打印一次,例如各记录的字段值
2 页注脚:每个页面下面打印一次,例如页码和日期
3)设置标题或总结带区:
报表菜单—标题/总结—显示标题/总结对话框—选中想要的标题或总结带区复选框即可—新页表示把标题或总结带区内容单独打印一页
2 标题:每张报表开头打印一次或单独一页,如报表名称
2 总结:每张报表最后一页打印一次或单独占用一页
4)设置列标头和列注脚带区:可用于创建多栏报表
文件—页面设置—页面设置对话框—把列数微调器的值调整为大于1(即自己所需要的栏数)—添加一个列标头和一个列注脚带区
2 列标头:在分栏报表中每列打印一次
2 列注脚:在分栏报表中每列打印一次
5)设置组标头或列注脚带区:可用于创建数据分组报表
报表菜单下的/常用工具栏中的数据分组—数据分组对话框—单击对话框中省略号—出现表达式生成器对话框—从中选择分组表达式—报表设计器中将添加一个或多个组标头或组注脚带区(带区数目取决于分组表达式的数目)
2 组标头:数据分组时每组打印一次
2 组注脚:数据分组时每组打印一次
3.添加报表的控件
1)标签控件:
2 添加标签控件:在报表控件工具栏中单击标签按钮—在报表的指定位置单击鼠标—出现一个插入点—在当前位置输入文本即可
2 更改字体:选定要更改的控件,从格式菜单中选定字体,显示字体对话框,选定适当的字体和磅值,确定。
2)线条、矩形和圆角矩形控件:
2 添加该控件:在报表控件工具栏中单击线条、矩形或圆角按钮—在报表的某个带区拖拽光标—将分别形成线条、矩形或圆角矩形
2 更改样式:选定要更改的控件,从格式菜单中选择绘图笔,再从子菜单中选择适当的大小或样式,即线型、线的粗细等。
2 还可设置圆角矩形的圆角样式:双击圆角矩形控件,弹出圆角矩形对话框,选定适当的圆角样式,确定。
2 调整控件:选定要调整的控件,然后拖动四周的某个控点改变控件的宽度和高度;不需要的控件选中后按下DEL键即可删除相应控件
2 选择多个控件:一是选定一个控件后,按住shift键再选定其他控件;二是圈选,即在控件周围拖动以画出选择框,可选择相邻的控件
2 设置控件布局:常用工具栏/显示菜单—布局工具栏
3)域控件:用于打印表或视图中的字段、变量和表达式的计算结果
2 添加域控件:一是打开报表的数据环境设计器窗口—选择所要的表或视图—把所需的字段拖拽至报表指定的带区中即可;
19