数据库全套课件_第1页
数据库全套课件_第2页
数据库全套课件_第3页
数据库全套课件_第4页
数据库全套课件_第5页
已阅读5页,还剩127页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

資料庫

第一章緒論1.1資料庫的基本概念1.1.1從檔管理到資料庫管理1.1.2資料庫系統的特點1)數據的結構化2)數據共用3)數據獨立4)可控冗餘度1.1.3資料庫的分代1)非關係型資料庫(層次和網狀)2)關係型資料庫系統(普遍使用)3)對象-關係資料庫系統編號名稱啟用日期價格部門主要設備備註商標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.Memogen表格中的每一項數據都是獨立的資料項目,表格中的每一橫行稱為一個記錄(record);表格中的每一豎列稱為一個字段(field)。關係模型的主要特點有:關係中每一資料項目不可再分,是最基本的單位;每一豎列資料項目是同屬性的,各列的順序是任意的;每一橫行記錄由一個個體事物的諸多屬性項構成,記錄的順序可以是任意的。一個關係是一張二維表,不允許有相同的字段名,也不允許有相同的記錄行。資料庫系統與一般檔應用系統對照序號文件應用系統數據庫系統1檔中的數據由特定的用戶專用庫內數據由多個用戶共用2每個用戶擁有自己的數據,導致數據重複存儲原則上可消除重複。為方便查詢允許少量數據重複存儲,但冗餘度可以控制3數據從屬於程式,二者相互依賴數據獨立於程式,強調數據的獨立性4各數據檔彼此獨立,從整體看為“無結構”的各檔的數據相互聯繫,從總體看是“有結構”的1.1.4資料庫系統的分類單用戶數據庫和多用戶數據庫集中式資料庫和分佈式資料庫傳統資料庫和智能資料庫

1.2資料庫管理系統和數據庫應用系統1.2.1資料庫管理系統1)數據定義功能:用於建立、修改、刪除表結構2)數據操作功能:對數據進行檢索和查詢3)控制和管理功能:併發控制、許可權、備份恢復1.2.2數據應用系統1)設計資料庫:概念結構設計→邏輯結構設計→物理結構設計2)開發應用程式:功能分析→總體設計→模組設計→編碼調試

1.3微機Xbase關係資料庫系統1.3.1Xbase資料庫的演變1.3.2VFP的主要特點1)強大查詢(查詢最快)與管理(專案管理器)2)引入資料庫表的新概念3)擴大對SQL語言(重點)的支持4)大量使用可視化介面操作(微軟特點)5)支持面向對象的程式設計6)通過OLE實現應用集成7)支持網路應用(簡單)微軟的其他資料庫1、SQLServer(企業用戶)2、Access(個人用戶)資料庫表1表2表n.

..1.5VFP工作方式1.5.1命令格式命令字+命令子句(操作對象,操作結果,操作條件)useTest &&打開Test表(對象)listfor價格<1000 &&顯示價格低於1000(條件)1.5.2兩類工作方式1)交互操作方式:命令或者菜單操作(熟悉資料庫知識)2)程式執行方式:編程實現(具備基本操作知識)2.1表的建立與修改學號姓名VFPC語言PS1001張三8090851002李四8191841003王五706590….現實生活中是怎樣實現的?2.1.1表結構的建立1)設計表的結構行記錄列字段2)建立字段名的規則可以把什麼作為首字元:字母或漢字可以包含什麼:字母、漢字、數字、下劃線長度不操過103)字段類型(表2.2)4)建立結構字段名、數據類型、字段寬度例2-1:建立Student.DBF表0、設定默認目錄1、檔->新建2、在設計器中建立表結構2.1.2表數據的輸入1)邏輯型:只接受T、F、Y、N2)日期顯示有關的命令

SETDATEANSI SETCENTURYON SETDATEAMERICAN3)備註型與通用型輸入4)打開關閉表的命令

Use[<檔案名>] usesb clearall

….5)編輯窗口關閉時數據不一定保存,但表關閉時數據會保存2.1.3表結構的修改1)在表打開的狀態下使用“顯示”菜單中表設計器2)ModifyStructure2.1.4表數據的修改1)建議使用命令(browse)或專案管理器流覽編輯2)一窗兩區3)追加與刪除數據1)追加方式與追加新記錄2)刪除標記與從磁片刪除2.1.5通用型字段1)輸入:編輯菜單->插入對象2)對象的鏈接與嵌入有關命令創建設備表createsb

打開設備表Usesb

流覽、修改記錄browse

修改結構Modifystructure

關閉當前表closeall2.2運算式2.2.1常量數值型常量例如10,-100,2.81828,-123e+12表示:-123×1012

字元型常量例如"微機",'PC機',"3.14159"日期型和日期時間型常量例如{06/30/1999},{9/15/998:45},{^2001/08/30}設置通常的日期格式,命令SETSTRICTDATETO0,設置嚴格的日期格式,命令SETSTRICTDATETO1邏輯型常量真和假兩種值,.T..F.

2.2.2變數1)記憶體變數(普通變數)A、命名規則:字母(漢字)或者下劃線開頭,字母數字下劃線組成,至多128個字元。B、賦值:變數名=運算式;store運算式to變數表C、運算式的顯示命令(?)2)數組A、定義:Dimension|Declare數組名(下標1[,下標2])B、說明:下標下界為1C、賦值:1、數組中各元素可取不同類型數據。2、可單個元素賦值,也可為整個數組賦值數組使用舉例DECLEARx(2,3)DISPLAYMEMORYLIKExSTORE“AA”TOx(1,2)STORE5TOx(6)&&x(6)即為x(2,3)x(1)=.T.&&x(1)即為x(1,1)x(2,2)=“Hello”DISPLAYMEMORYLIKExX=5DISPLAYMEMORYLIKEx3)字段變數:表的每一個字段就是一個字段變數4)系統變數:以下劃線開頭。5)記憶體變數的顯示:listmemory[like]

缺省條件下列出所有記憶體變數(包括系統變數)6)記憶體變數的清除:release2.2.3運算符:1)優先順序運算優先順序運算符意義運算舉例(注解表示顯示結果)算術8()圓括號7^或**乘方?3^2&&9 6×乘/除%取模:取兩數相除的餘數?15%4&&35+加-減關係

4<小於?63<54&&.F.<=小於等於?{01/01/92}<={01/01/92}&.T.>大於?"ABC">"AAAA"&&.T.>=大於等於?"大專">="大學"&&.T.=相等:串比較時串首同就得真?"ABC"="AB"&&.T.==完全相等:兩串全同才得真?"ABC"=="AB“&&.F.<>、#或!=不相等?.T.<>.F.&&.T.$包含:左串是右串子串才得真?"BC"$"ABCD"&&.T.邏輯3NOT或!非:結果是右邊邏輯值的反?NOT"BC"$"ABCD"&&.F.2AND與:兩邊都真才得真?.T.AND"ABC">"AB"&&.F.1OR或:兩邊有一為真就得真?.T.OR4=5&&.T.1.數值型運算式數值型運算式是由算術運算符、常量、變數和函數組成的,其運算結果是數值型的。算術運算符包括:(1)()分組優先運算符;(2)**、^乘方運算符;(3)*、/乘除運算符;(4)%求餘運算符;(5)+、-加減或單目運算符;例如,用戶在命令窗口中鍵入如下兩條命令:

?-2**2+5?-2^3+5

顯示在螢幕上的結果值分別為:

9.0和-3.02.字元型運算式字元型運算式由字元運算符、字元型常量、字元型變數和函數組成,其運算結果是字串。字元運算符有:1)+:字串連接符,其功能是將運算符兩邊的字串連接起來,形成一個新字串。2)-:串尾空格移位連接符,將兩個字串連接時,把第一個字串的尾部空格(若存在)移到後面字串的尾部。例如:?‘好好’+‘學習’結果是‘好好學習’?‘好好’-‘學習’結果是‘好好學習

’3.日期型運算式日期型運算式由算術運算符(+或-)、算術運算式、日期型常量、日期型變數和函數組成。日期型數據是一種特殊的數據,它們的運算只有三種情況。1)兩個日期型數據可以相減,結果是一個數值,表示兩個日期之間相差的天數。例如:?{08/12/03}-{07/12/03}結果:312)日期型數據加上一個整數,其結果為一個新的日期。例如:?{09/10/03}+10結果:{09/20/03}3)日期型數據減去一個整數,其結果為一個新的日期,例如:{08/12/03}-31結果:{07/12/03}注:2個日期相加無意義。"$"是字串包含運算符。其格式如下:格式:<字串1>$<字串2>功能:當<字串2>包含<字串1>時,其結果為.T.,否則結果為.F.。例"$"運算符的使用:?"AB"$"ACBCD".F.?"AS"$"DDASBC".T.2.2.4函數1)函數2)函數類型3)常用函數函數功能例子(注解表示結果)SUBSTR(<字元運算式>,<數值運算式1>[,<數值運算式2>])返回<字元運算式>中第<數值運算式1>位起的長度為<數值運算式2>的子串?SUBSTR("ABCD",2,2)&&"BC"LEFT(<字元運算式>,<數值運算式>)返回<字元運算式>左起<數值運算式>個字元的子串?LEFT("ABCD",2)&&"AB"RIGHT(<字元運算式>,<數值運算式>)返回<字元運算式>右起<數值運算式>個字元的子串?RIGHT("ABCD",2)&&"CD"LEN(<字元運算式>)返回字串的長度?LEN("ABCD")&&4AT(<字元運算式1>,<字元運算式2>[,<數值運算式>])返回字串<字元運算式1>在<字元運算式2>中第<數值運算式>次出現的位置?AT("BC","ABCD",1)&&2ALLTRIM(<字元運算式>)刪除字串前導和末尾的空格?ALLTRIM("ABCD")&&"ABCD"SPACE(<數值運算式>)返回<數值運算式>個空格?SPACE(4)&&""UPPER(<字元運算式>)將小寫字母轉換為大寫?UPPER("aBc")&&"ABC"LOWER(<字元運算式>)將大寫字母轉換為小寫?LOWER("aBc")&&"abc"VAL(<字元運算式>)將字串轉換為數值?VAL("3.14")&&3.14STR(<數值運算式1>[,<數值運算式2>[,<數值運算式3>]])將數值<數值運算式1>轉換為長度為<數值運算式2>位,具有<數值運算式3>位小數的字串?STR(3.14,5,1)&&"3.1"CHR(<數值運算式>)從<數值運算式>表示的ASCII碼返回字元?CHR(65)&&"A"ASC(<字元運算式>)返回字元的ASCII碼值?ASC("A")&&652.2.5VFP命令常用子句1)四種常用命令子句命令動詞:List,display範圍子句:All &&所有記錄Next(N) &&從當前記錄起的N個記錄Record(N) &&第N個記錄Rest &&從當前到最後一條記錄的所有記錄a)顯示所有學生資訊b)顯示前五個學生資訊c)顯示第三個學生資訊d)顯示從第三個學生後的所有學生資訊For子句:指定條件a)顯示所有男同學資訊listforsex=.t.b)顯示前五個學生中女同學資訊go1listnext5forsex=.f.while子句從滿足條件時開始到不滿足條件的記錄停止。listwhilesex=.t.Fields子句書寫規則a)子句可以打亂順序b)前四個字元為命令動詞的簡寫c)可以使用續行符“;”例:

USEsbGO2&&記錄指針指向第2個記錄

LISTNEXT5FOR價格>10000&&顯2,3,6等3個記錄

LISTRECORD5FIELDS編號,名稱,價格

USEsbLISTNEXT3&&(1)LIST部門,編號,名稱,備註FOR部門="21"&&(2)LIST編號,名稱,價格*0.9,啟用日期FORYEAR(啟用日期)<1995OFF&&(3)2.3表的維護命令2.3.1表與表結構的複製1)複製任何檔copyfile<filename1>to<filename2>a)複製表basic到b1copybasic.dbftob1.dbf此操作應用於表處於關閉狀態,可以使用通配符*和?2)從表複製出表或其他類型檔a)把跨校專升本學生資訊複製到b2表中copytob2fieldsstuid,nameforleft(stuid,4)=‘2005’把結果保存到Excel表中typeXLS保存在文本檔typesdf或delimited3)複製表的結構、檔改名、刪除等命令2.3.2記錄指針的移動1)定位go[to]top|bottom|<運算式>RecNo()顯示當前位置2)移位skip<運算式>例:

USE &&若SB.DBF是打開的,則須關閉它

COPYFILESB.DBFTOSB1.DBF&&複製得SB1.DBFCOPYFILESB.FPTTOSB1.FPT&&複製得SB1.FPTUSEsbCOPYTOa1&&對sb.dbf原樣複製,同時生成A1.DBF與A1.FPTCOPYTOa2FIELDS名稱,編號FORLEFT(部門,1)=“2”LIST&&顯示SB.DBF的記錄數據

USEa2LIST&&顯示A2.DBF的記錄數據

USEsbCOPYTOb1NEXT3SDF&&以系統數據格式複製,產生文本檔B1.TXTCOPYSTRUCTURETOsb2FIELDS名稱,價格,編號,備註2.3.3插入與追加1)插入空記錄insertblank2)追加新記錄insertintotablename[field1,…]values(data1,…)將數組插入表中insertintotablenamefromarrayarrname3)append成批追加appendfrom(非常有用)a)從basic表中把stuid,name,sex導出,再把導出數據追加到test表中usebasicusebasiccopytotestfieldsstuid,name,sextypesdfusetestappendfromtesttypesdf2.3.4表記錄的刪除和恢復1)邏輯刪除delete2)物理刪除pack3)恢復recall4)記錄清除zap2.3.5表數據的替換1)成批修改數據replacefield1withdata[field2withdata][forcondition]2)單個記錄與數組間的數據傳送a)把當前記錄複製到數組中並顯示相關數據scattertoarr|memvarb)把數據或記憶體變數的數據傳送到記錄(替換當頭記錄)gatherfromarr

USEsbAPPENDFROMa1FIELDS名稱,價格&&A1.DBF中7個記錄的2個字段值追加到SB.DBF末尾APPENDFROMb1SDF&&B1.TXT是系統數據格式的文本檔DELETEFORNOT主要設備&&為所有的非主要設備記錄加上刪除標記PACK&&物理上刪除帶有刪除標記的記錄REPLACE價格WITH價格-1000,部門WITH"11"FOR主要設備;&&主要設備的價格都減少1000,部門均改為11APPENDBLANK&&追加1個空白記錄GO4SCATTERTOAMEMO&&第4個記錄(包括備註字段)數據傳送給數組A?a(1),a(2),a(4),a(7)&&顯示:038-1鑽床5275.001997年12月封存a(4)=6000GATHERFROMaDISPLAY&&顯示第4個記錄,價格已由5275.00改變為6000.00SETFILTERTOYEAR(啟用日期)>=1990ANDYEAR(啟用日期)<=1995LIST &&只顯示1990年至1995年的記錄SETFILTERTO &&取消篩檢程式LIST &&顯示全部記錄2.3.7建立與修改表結構的命令1)表結構的建立createtable<表名>(<字段名><字段類型>[,<字段寬度>][,<小數位數>])建立教師表createtableTeacher(IDc(5),namec(8),birthdayd)注意:插入日期型時用{^1980/01/01}2)修改結構altertable<表名>add|alter[column]<字段名><字段類型>[(<字段寬度>[,<小數位數>])]altertable<表名>drop[column]<字段名>|Renamecolumn<字段名1>to<字段名2>3.1排序與索引

USEsbSORTTObmxON部门/D,價格FOR主要設備

USEbmxLIST&&主窗口顯示如下記錄號編號名稱啟用日期價格部門主要設備備註商標

1037-2磨床07/21/90241292.1222.T.memogen2016-2車床01/15/9227132.7321.T.memogen3016-1車床03/05/9062044.6121.T.Memogen4100-1微機08/12/978810.0012.T.memoGen1)排序後會產生一個新表

2)可以與For、Fields等子句一起使用索引結構複合索引檔.CDX,主名與表的主名相同,自動維護,索引只包含關鍵字和記錄號,同一時間只有一個索引標識起作用。表3.1索引功能分類表索引類型關鍵字重複值說明創建修改命令索引個數普通索引允許可作為一對多永久關係中的“多方”INDEX允許多個唯一索引允許,但輸出無重複值為與以前版本相容而設置候選索引不允許,輸入重複值將禁止存盤可用作主關鍵字,可用於在永久關係中建立參照完整性INDEXCREATETABLEALTERTABLE主索引僅適用資料庫表,可用於在永久關係中建立參照完整性CREATETABLEALTERTABLE僅可1個建立索引檔或增加索引標識

INDEXON<索引關鍵字>TO<單索引檔案名>|TAG<索引標識名>[OF<複合索引檔案名>][FOR<條件>][COMPACT][ASCENDING|DESCENDING][UNIQUE|CANDIDATE][ADDITIVE]確定主控索引

SETORDERTO[<數值運算式>|<單索引檔案名>|[TAG]<索引標識>[ASCENDING|DESCENDING]]

[例3-3]為SB.DBF建立一個結構複合索引檔,其中包括3個索引:

(1)記錄以價格降序排列,索引標識為普通索引型。

(2)記錄以部門昇冪排列,部門相同時則按價格昇冪排列,索引標識為普通索引型。

(3)記錄以部門昇冪排列,部門相同時則按價格降序排列,索引標識為候選索引型。

USEsbINDEXON價格TAGjgDESCENDING&&建立SB.CDX,關鍵字價格,JG為普通索引型索引標識

LIST&&記錄已按價格降序排列

INDEXON部門+STR(價格,9,2)TAGbmjg;&&關鍵字為字元運算式“部門+STR(價格,9,2)”,索引標識BMJG增入SB.CDXLIST&&索引運算式運算後昇冪排列,使記錄按部門昇冪、部門相同按價格昇冪排列

INDEXONVAL(部門)-價格/1000000TAGbmjg1CANDIDATE;&&bmjg1為候選索引型索引標識,索引標識增入SB.CDXLIST&&索引運算式運算後昇冪排列,使記錄按部門昇冪、部門相同按價格降序排列

SETORDERTOTAGjg&&指定SB.CDX的索引標識JG為主控索引,JG索引序號為3LIST&&記錄按價格降序排列

SETORDERTOTAGbmjgLIST&&記錄按(2)排列3.2查詢命令順序查詢:LOCATEFOR<條件>[<範圍>][WHILE<條件>]CONTINUEUSEsbLOCATEFOR價格<15000ANDNOT主要設備

DISPLAY &&顯示:記錄號編號名稱啟用日期價格部門主要設備備註商標

4038-1鑽床10/12/895275.0023.F.MemogenCONTINUE?RECNO(),名稱,價格,主要設備&&顯示:6影印機10305.01.F.CONTINUE&&狀態條顯示:已到定位範圍末尾。索引查詢:

SEEK<運算式>USEsbINDEXON編號TAGbhSEEK"038-1"&&不可寫為:SEEK編號="038-1"?RECNO()&&顯示:4INDEXON啟用日期TAGqyrqSEEK{3/5/90}?FOUND()&&.顯示.T.,表示找到該日期

INDEXON價格TAGjgSEEK1000.003.3數據工作期工作區的查詢

部門代碼表和增值表

BMDM.DBF:ZZ.DBF:

結構:bmdm(代碼c(2),名稱c(6))結構:zz(編號c(5),增值n(8,2))

記錄:記錄:

記錄號代碼名稱記錄號編號增值

111辦公室1016-12510.00212設備科2016-11000.00321一車間3038-11200.00422二車間

523三車間3.3.1多工作區的查詢1)工作區號a)共有32767個工作區,編號從1到32767b)一個工作區只能打開一個表,打開另一個表時,以前的會自動關閉c)一個表在並關閉時若在其他工作期中打開它時,會發生“檔正在使用”錯誤d)選擇工作區:Select<工作區號選擇工作區命令:SELECT<工作區號>|<別名>CLOSEALL&&關閉所有打開的表,當前工作區為1號工作區

SELECT0&&1號工作區未打開過表,選定的工作區即該區

USEsbGO3&&移至3號記錄,注意該記錄的部門字段值為22SELECT0&&選定2號工作區為當前工作區

USEbmdmINDEXON代碼TAGdmSEEKsb.部門&&即SEEK22?sb.編號,a.名稱,名稱

&&顯示“037-2磨床二車間”。這裏“a.名稱”指sb.名稱,“名稱”指bmdm.名稱

SELECTsb&&選定SB.DBF所在工作區為當前工作區

?編號,名稱,bmdm.名稱&&顯示“037-2磨床二車間”

SELECT()&&顯示:1SELECT2&&選定2號工作區為當前工作區數據工作期窗口打開:選定窗口菜單的數據工作期命令建立視圖檔(.VUE):

檔菜單的另存為命令

CREATEVIEW<視圖檔案名>

打開視圖檔:SETVIEWTO<視圖檔案名>表的關聯

關聯的多一關係與一多關係

多一關係在數據工作期窗口建立多一關係:SETSTRICTDATETO0BROWSEFIELDSBMDM.名稱:H='部門名‘;Sb.編號,Sb.名稱:H=‘設備名’,Sb.啟用日期;FORSb.啟用日期>={01/01/92}流覽結果:多一關係顯示部門名用命令序列實現:SELECT2USEbmdm&&打開子表INDEXON代碼TAG代碼ADDITIVE&&子表在代碼字段建立索引SELECT1USEsb&&打開父表SETRELATIONTOsb.部門INTObmdmADDITIVE&&指定在部門字段對子表設置多一關係

建立關聯命令:

SETRELATIONTO[<運算式1>INTO<別名1>,…,<運算式N>INTO<別名N>][ADDITIVE]

说明一多关系的命令:

SETSKIPTO[<表別名1>[,<表別名2>]…]

一多關係的命令序列示例:

CLOSEALLSELECT2USEbmdm&&子表1SETORDERTOTAG代碼

SELECT3USEzz&&子表2INDEXON編號TAGbhSELECT1USEsb&&父表

SETRELATIONTOsb.部門INTObmdmSETRELATIONTOsb.編號INTOzzADDITIVESETSKIPTOzz&&子表ZZ為多方

BROWSEFIELDS編號,價格,zz.增值,bmdm.名稱:H='部門名'一父多子流覽窗口3.4統計命令計數命令

COUNT[<範圍>][FOR<條件1>][WHILE<條件2>][TO<記憶體變數>]求和命令

SUM[<數值運算式表>][<範圍>][FOR<條件1>][WHILE<條件2>][TO<記憶體變數表>|ARRAY<數組>]求平均值命令

AVERAGE[<數值運算式表>][<範圍>][FOR<條件1>][WHILE<條件2>][TO<記憶體變數表>|ARRAY<數組>]

匯總命令

TOTALTO<檔案名>ON<關鍵字>[FIELDS<數值型字段表>][<範圍>][FOR<條件1>][WHILE<條件2>][例3-15]在DX.DBF中按設備的編號來匯總大修費用,試寫出命令序列。

USEdxINDEXON編號TAGbhTOTALON編號TOjghzFIELDS費用&&按編號匯總費用,寫入新表JGHZ.DBFUSEjghzBROWSEFIELDS編號,費用TITLE'大修費用匯總表'3.5SELECT-SQL查詢SELECT-SQL命令:

SELECT[ALL|DISTINCT][<別名>.]<SELECT運算式>[AS<列名>][,[<別名>.]<SELECT運算式>[AS<列名>]...]FROM[FORCE][<資料庫名>!]<表名>[<本地名>][[INNER|LEFT[OUTER]|RIGHT[OUTER]|FULL[OUTER]JOIN<資料庫名>!]<表名>[<本地名>][ON<聯接條件>...][[INTO<目標>]

[TOFILE<檔案名>[ADDITIVE]

TOPRINTER[PROMPT]

TOSCREEN]][PREFERENCE<名字>][NOCONSOLE][PLAIN][NOWAIT][WHERE<聯接條件>[AND<聯接條件>...][ANDOR<篩選條件>[AND

OR<篩選條件>...]]][GROUPBY<組運算式>[,<組運算式>...]][HAVING<篩選條件>][UNION[ALL]<SELECT命令>][ORDERBY<關鍵字運算式>[ASCDESC][,<關鍵字運算式>[ASC

DESC]...]][TOP<數值運算式>[PERCENT]]例:查詢大修過的設備的編號、名稱和部門名:SELECTdx.編號,sb.名稱,bmdm.名稱AS部門名FROMsb,dx,bmdm;WHEREdx.編號=sb.編號ANDbmdm.代碼=sb.部門將SB.DBF的記錄按部門昇冪排列,部門相同時按價格降序排列:SELECT編號,名稱,部門,價格FROMsbORDERBY部門,價格DESC查找大修過的所有設備:

SELECTDISTINCT編號FROMdx求出每一設備的增值金額,並送至印表機列印:

SELECT編號,SUM(增值)FROMzzGROUPBY編號TOPRINTER查詢設計器用查詢設計器查詢數據的基本步驟打開查詢設計器—進行查詢設置,即設置被查詢的表、聯接條件、字段等輸出要求和查詢結果的去向—執行查詢—保存查詢設置。打開查詢設計器窗口

MODIFYQUERY<檔案名>

查看由查詢生成的SQL命令快捷菜單的“查看SQL命令”查詢結果的圖形處理查詢設計器窗口3.6資料庫與視圖

資料庫表與自由表創建資料庫SBSJ

選定檔菜單的新建命令—選定資料庫選項按鈕—選定新建檔按鈕—在創建對話框中鍵入資料庫名:SBSJ(擴展名允許省略)—選定保存按鈕後即產生資料庫檔SBSJ.DBC,同時出現資料庫設計器資料庫設計器數據詞典

資料庫SBSJ的永久關係(圖3.34)4.1程式檔4.1.1程式檔的建立與執行a)建立或修改:Modifycommand<filename>b)Ctrl+W關閉並保存檔c)執行:Do<檔案名>d)書寫規則(1)命令分行(2)注釋“*”和“&&”定位輸入命令:

@<行,列>[SAY<運算式1>][[GET<變數名>][DEFAULT<運算式2>]WAIT命令:WAIT[<資訊文本>][TO<記憶體變數>] [WINDOW[AT<行>,<列>]][NOWAIT][CLEAR|NOCLEAR][TIMEOUT<數值運算式>]

[例4-2]WAIT命令輸出資訊示例。

WAIT"請檢查輸入內容!"WINDOW4.2程式的控制結構分支語句格式:

IF<邏輯運算式> <語句序列1>[ELSE <語句序列2>] ENDIF例:

USEsbLOCATEFORNOT主要設備

IFFOUND()&&查到,FOUND函數返回.T.DISPLAY名稱,價格

REPLACE價格WITH價格*(1-0.1)DISPLAY名稱,價格

ELSEWAIT"無此設備!"WINDOWENDIFUSERETURN多分支語句格式:DOCASECASE<邏輯運算式1><語句序列1>CSAE<邏輯運算式2><語句序列2>…CASE<邏輯運算式n><語句序列n>[OTHERWISE<語句序列n+1>]ENDCASE迴圈語句格式與示例條件迴圈步長迴圈DOWHILE<邏輯運算式><語句序列>ENDDOFOR<記憶體變數>=<數值運算式1>TO<數值運算式2>[STEP<數值運算式3>]<語句序列>ENDFOR

NEXT*e4-7.prgUSEsbDOWHILENOTEOF()IF價格>10000?名稱

ENDIFSKIPENDDOUSE*e4-9.prgs=0&&s為累加器,初值為0FORi=1TO100&&i為計數器,初值為1 s=s+i&&累加

NEXT?"s=",s掃描迴圈其他SCAN[<範圍>][FOR<邏輯運算式1>][WHILE<邏輯運算式2>]<語句序列>ENDSCAN

迴圈輔助語句

LOOP語句EXIT語句多重迴圈*e4-10.prgUSEsbSCANFOR價格>10000?名稱

ENDSCANUSE4.3多模組程式

類型格式調用命令副程式(檔)[PARAMETERS<參數表>]<命令序列>[RETURN]DO<程式名1>[WITH<參數表>][IN<程式名2>]自定義函數主要在運算式中調用函數使用RETURN帶回計算結果過程和副程式使用輸入的參數帶回計算結果。過程(多個過程一個檔)PROCEDURE<過程名>[PARAMETERS<參數表>]<命令序列>[RETURN]自定義函數[FUNCTION<函數名>][PARAMETERS<參數表>]<語句序列>[RETURN<運算式>]4.3.4變數的作用域

建立公共變數命令格式:PUBLIC<記憶體變數表>建立私有變數命令格式:PRIVATE[<記憶體變數表>][ALL[LIKE|EXCEPT<通配符>]]建立本地變數命令格式:LOCAL<記憶體變數表>[例4-17]

變數隱藏與恢復的示例。(1)假定已建立了如下的程式:*e4-17.prgPARAMETERSsj&&sj為私有變數,程式調用前的bj被隱藏起來

PRIVATEmj&&mj為私有變數,程式調用前的同名變數mj被隱藏起來

mj=3.14*sj*sj?”程式執行時的變數清單:”LISTMEMOLIKE?jRETURN(2)在命令窗口鍵入下列命令:

RELEASEALL&&清除用戶定義的所有記憶體變數

mj=0&&在命令窗口設置的變數是公共變數

bj=3?”程式執行前的變數清單:”LISTMEMOLIKE?j&&顯示變數清單

DOe4-17WITHbj&&bj傳入e4-17?"程式執行後的變數清單:"&&顯示變數清單

LISTMEMOLIKE?j&&程式執行結束時,被遮罩的變數mj,bj被恢復4.4窗口設計樣例

BROWSE命令定義功能鍵命令格式:

ONKEY[LABEL<鍵標號>][<命令>]

窗口關閉命令

RELEASEWINDOWS[<窗口名表>]CLEARWINDOWSCLEARALL資訊對話框函數函數格式:

MESSAGEBOX(<字元運算式1>[,<數值運算式>[,<字元運算式2>]])5.1下拉式菜單設計創建菜單的基本步驟建立或打開菜單設計器:MODIFYMENU<檔案名>

進行菜單設計快速菜單菜單設計器—設計並生成下拉式菜單與快捷菜單的工具保存菜單定義:檔菜單的保存命令生成菜單程式:“菜單”菜單的生成命令運行菜單程式:例如DOCD.MPR快速菜單“菜單”菜單的快速菜單命令5.1.3菜單設計器窗口說明:1)菜單名稱:用於輸入顯示的菜單名稱,可以設置訪問鍵’\<F’,代表用Alt+F來訪問。2)結果:

a)命令:定義一條命令

b)過程:定義一個過程

c)子菜單:添加子菜單

d)填充名稱或菜單項:定義一下好記的名稱3)選項:

a)定義快捷鍵(Ctrl+V)

b)設定淺色菜單:跳過-滿足條件時灰色顯示

c)設定狀態欄資訊4)插入、刪除、預覽5)插入欄:插入一個與系統菜單一樣的菜單,建立或編輯子菜單時為可選“顯示”菜單常規選項菜單選項[例5-2]利用菜單設計器建立如圖5.9所示的下拉式菜單,並要求:(1)列印菜單包括“設備表”和“設備價格表”兩個菜單項。(2)數據維護菜單的“流覽記錄”菜單項能用來打開一個設備流覽窗口。圖5.9設備管理系統的下拉式菜單

初始化代碼:CLEARALLCLEARKEYBOARD'{Ctrl+F4}'&&關閉Command窗口

MODIFYWINDOWSCREENTITLE'設備管理系統'&&設置菜單窗口標題

USEsb“退出”代碼:USEMODIFYWINDOWSCREEN&&恢復VFP主窗口的標題

SETSYSMENUTODEFAULT&&恢復VFP系統菜單

ACTIVATEWINDOWCOMMAND&&恢復Command窗口5.2彈出式菜單設計調用程式:*e5-3.prgCLEARALLPUSHKEYCLEAR&&清除以前設置過的功能鍵ONKEYLABELRIGHTMOUSEDOe5-3.mpr&&設置滑鼠右鍵為功能鍵,預置彈出式菜單USEsbBROWSE&&打開流覽窗口USEPUSHKEYCLEAR圖5.15快捷菜單6.1表單向導

打開嚮導選取對話框:在工具菜單的嚮導子菜單中選定表單命令。圖6.1嚮導選取對話框單表表單向導與一對多表單向導圖6.2表單向導的字段選取圖6.6設備維護表單

圖6.8一對多表單向導對話框的父表字段圖6.11部門設備維護窗口6.2表單設計器創建和運行表單的基本步驟打開表單設計器MODIFYFORM〈檔案名〉對象操作與編碼:表單設計器,數據環境設計器,表單控件工具欄保存表單運行表單:例如DOFORMSBQ快速創建表單:表單菜單的快速表單命令圖6.12

顯示快速表單的表單設計器,數據環境設計器,表單控件工具欄等圖6.14表單控件工具欄中的按鈕

6.3面向對象的程式設計方法

對象控件容器屬性事件方法程式圖6.16屬性窗口的組成屬性說明應用於Caption指定對象的標題(顯示時標識對象的文本)表單,標籤,命令按鈕等Name指定對象的名字(用於在代碼中引用對象)任何對象Value指定控件當前狀態(取值)文本框,列表框等ForeColor指定對象中的前景色(文本和圖形的顏色)表單,標籤,文本框,命令按鈕等BackColor指定對象內部的背景色表單,標籤,文本框,列表框等BackStyle指定對象背景透明否(透明則背景著色無效)標籤,文本框,圖象等BorderStyle指定邊框樣式為無邊框,單線框等表單,標籤,文本框等AlwaysOnTop是否處於其他窗口之上(可防止遮擋)表單AutoCenter是否在VFP主窗口內自動居中表單ScaleMode指定座標單位表單Closable標題欄中關閉按鈕是否有效表單Controlbox是否取消標題欄所有的按鈕表單,工具欄MaxButton是否有最大化按鈕表單MinButton是否有最小化按鈕表單Movable運行時表單能否移動表單WindowState指定運行時是最大化還或最小化表單AutoCloseTables表單釋放時是否關閉表或視圖,默認為.T.數據環境AutoOpenTables表單加載時是否打開表或視圖,默認為.T.數據環境表6.3屬性選列事件觸發時機Load創建對象前Init創建對象時Activate對象啟動時GotFocus對象得到焦點時Click單擊滑鼠左鍵時DblClick雙擊滑鼠左鍵時MouseUp釋放滑鼠鍵時MouseDown按下滑鼠鍵時KeyPress按下並釋放某鍵盤鍵時Valid對象失去焦點前LostFocus對象失去焦點時Unload釋放對象時表6.4VFP部分常見事件表方法程式一例:Refresh方法程式

[Form.]Object.Refresh

功能:重畫表單或控件,

並刷新所有的值。對象引用對象引用規則(1)通常用以下引用關鍵字開頭:THISFORMSET表示當前表單集(表單集的概念參閱8.1.2節)THISFORM表示當前表單

THIS表示當前對象(2)引用格式:引用關鍵字後跟一個點號,再寫出被引用對象或者對象的屬性,事件或方法程式。例如:THIS.Caption&&本對象(表單或控件)的Caption屬性THISFORM.Cls&&本表單的Cls方法程式,清除表單中的圖形和文本THISFORM.Command1.Caption&&本表單的Command1命令按鈕的Caption屬性THIS.Command1.Click&&本對象的Command1命令按鈕的Click事件(3)控件也可引用包含它的容器,格式為:Control.Parent其中Control表示控件,Parent表示容器。例如THIS.Parent.Command1.Caption,表示引用本對象的容器(例如表單)的Command1命令按鈕的Caption屬性。編程方式設置屬性值屬性值設置格式:ObjectName.Property[=Setting]其中Setting為要設置的屬性值。例如,THIS.FontBold=.T.&&本對象文本以粗體顯示

THIS.Parent.Caption=time()&&本對象的容器的caption屬性設置為當前時間

[例6-4]設計只含一個文本框控件的表單(見圖6.17),要求逐次單擊文本框的內部能輪流顯示當前日期與時間,試寫出設計步驟。

(1)創建表單:往命令窗口鍵入命令MODIFYFORMrqsj,使顯示rqsj表單設計器窗口。

(2)創建文本框:單擊表單控件工具欄中的文本框按鈕,然後單擊Form1表單窗口內某處,該處就會產生一個Text1文本框控件。

(3)將表單的Caption屬性改為“日期與時間”:單擊表單窗口,屬性窗口的組合框中便顯示Form1

在屬性列表中選定Caption屬性

在文本框中輸入日期與時間字樣,按回車鍵後表單窗口的標題欄就會顯示這些文字。7.1輸出類控件

標籤(Label)

屬性選介(1)使標籤區域自動調整為與標題文本大小一致:可將AutoSize屬性設置為.T.。(2)使標籤的標題豎排:先將WordWrap屬性設置為.T.,然後在水準方向壓縮標籤區域迫使文字換行。(3)使標籤與表單背景顏色一致:將BackStyle屬性設置為0(透明)(4)使標籤帶有邊框:將BorderStyle屬性設置為1(單選框)

圖象(Image)、線條(Line)與形狀(Shape)

創建圖象的步驟如下:在表單上創建一個圖象控件

在屬性窗口選定Picture屬性,並通過文本框右側的對話按鈕選定一個圖象,該圖象即顯示在圖象控件處。線條控件用於在表單上畫各種類型的線條,包括斜線、水平線和垂直線。形狀控件用於在表單上畫出各種類型的形狀,包括矩形、圓角矩形、正方形、圓角正方形,橢圓或圓。表7.3形狀控件的形狀設置CurvatureWidth與Height相等Width與Height不等0正方形矩形1-99小圓角正方形→大圓角正方形→圓小圓角矩形→大圓角矩形→橢圓[例7-1]設計如圖7.1所示的應用程式封面。

(1)創建表單FM.SCX。

(2)在表單上創建標籤和形狀控件各1個。

(3)設置屬性:詳見表7.4(4)將封面的文字置前於橢圓:選定Label1,然後在佈局工具欄中選定“置前”按鈕。若已置前,則該步驟可省。

(5)Form1的RightClick事件代碼編寫如下:THISFORM.Release&&右擊表單執行Release方法程式,從記憶體釋放該表單對象屬性屬性值說明Form1Desktop.T.表單設置在桌面上WindowState2表單最大化BorderStyle0取消表單邊框TitleBar0取消表單標題欄Picturec:\vfp\gallery\graphics\tools.ico表單貼若干tools.ico拼成的壁紙Label1Caption汽車修理管理系統封面文字AutoSize.T.Label1區域自動適應標題大小FontName隸書字體FontSize36文字大小FontBold.T.粗體ForeColor0,0,255標題顏色為藍色BackStyle0背景透明,不顯示Label1區域Shape1Curvature99為畫橢圓,使圓角最大BorderColor255,255,0邊框顏色為黃色BackColor0,255,255背景顏色為青色表7.4“封面”屬性設置

7.2輸入類控件文本框(Text)文本框的值Value屬性焦點控件設置焦點方法程式格式:Control.SetFocus獲得焦點事件(GotFocusEvent)失去焦點事件(LostFocusEvent)控件的數據綁定ControlSource屬性文本框生成器編輯框(Edit)

列表框(List)列表框生成器

[例7-3]在列表框中填充SB表的編號和名稱兩個字段,要求選定列表框的任一項,就能使文本框中顯示編號字段值。

(1)在表單中創建1個列表框控件和1個文本框控件。

(2)打開列表框生成器——在列表項選項卡的“用此填充列表”組合框中選定“表或視圖中的字段”選項——如圖7.4(a1)所示,通過對話按鈕選出SB表,然後將編號和名稱字段從可用字段列表添入選定字段列表中—按確定按鈕。

(3)List1的InteractiveChange事件代碼編寫如下:THISFORM.Text1.Value=THIS.Value&&將列表框選項值賦給文本框

圖7.5列表框選項(a1)表7.5列表框、組合框控件的值源類型組合框(Combo)下拉組合框Style屬性值0下拉列表框Style屬性值1控件值源的類型

設置值值源類型說明0無缺省值,運行時用AddItem或AddListItem方法程式將數據分別填入列中1值RowSource設置逗號分隔的資料項目來分別填充列2別名RowSource設置表名,表由數據環境提供,用ColumnCount確定字段數3SQL語句RowSource設置SQLSELECT命令選出記錄,並可創建一個臨時表或表4查詢(.QPR)RowSource設置一個.QPR檔案名5數組RowSource設置數組名 6字段RowSource設置逗號分隔的字段列表,首字段有表名首碼,表來自數據環境7檔在RowSource設置路徑,可用通配符或掩碼,結果以目錄與檔案名填充列8結構在RowSource設置表名,結果以字段名來填充列9彈出式菜單為與以前版本相容而設[例7-4]試用BMDM表的代碼來修改SB表的部門字段。要求SB表在列表框顯示,BMDM表在組合框顯示;並且當列表框確定一個記錄後,便可用組合框的選項來替代SB表的部門字段值。

(1)在表單上創建2個標籤,1個列表框和1個組合框。

(2)在數據環境中添加SB表和BMDM。注意,若存在關聯聯線則將它取消。

(3)屬性設置:見表7.7。

(4)Combo1的InteractiveChange事件代碼編寫如下:

THISFORM.LIST1.Refresh&&在組合框列表中選項並替代SB.部門後更新列表框的顯示

(5)Form1的Init事件代碼編寫如下:

THISFORM.Combo1.Enabled=.F.&&使初始時不能操作組合框,只可在列表框先確定記錄

(6)List1的InteractiveChange事件代碼編寫如下:

THISFORM.Combo1.Enabled=.T.&&列表框操作後即允許組合框操作

(7)List1的Init事件代碼編寫如下:

SETORDERTOTAG編號

&&使列表按設備編號次序顯示(假定SB表中該索引標識已存在)圖7.6選項替代對象屬性屬性值說明Form1Caption用BMDM表的代碼來修改SB表的部門在表單標題欄顯示文本Label1Caption請指定要修改的記錄:設置第1個標籤的顯示文本AutoSize.T.區域大小自動適應標題Label2Caption請選供代入的部門號:設置第2個標籤的顯示文本AutoSize.T.List1RowSourceType6列表框值源類型:字段RowSourcesb.編號,名稱,部門數據環境中添加表後才能設置字段ColumnCount3列表顯示3列BoundColumn1第1列作為value屬性值Combo1Style2組合框類型設置為下拉列表框RowSourceType2組合框值源類型:別名RowSourceBMDM數據環境中添加表後才能設置表名ColumnCount2列表顯示2個字段:代碼與名稱BoundColumn1第1列作為value屬性值ControlSourceSB.部門指定從列表選定的項存入的位置表7.7“用BMDM表修改SB表的部門”屬性設置[例7-6]在表單上創建1個組合框和1個文本框,要求如下:

(1)組合框的列表包含SB表的編號字段值。

(2)能在組合框中為其列表鍵入新選項。

(3)若選取組合框列表中的項(也可以是剛添入的新選項),便能將它送入文本框。假定組合框和文本框已在表單上創建(圖略),下麵列出主要的屬性和事件代碼。

(1)Combo1屬性設置

Style:0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论