




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第4章結構化查詢語言SQL和報表SQL語言的基本概述數(shù)據(jù)定義語言DDL數(shù)據(jù)操縱語言DML查詢和SELECT命令報表和標簽小結2025/2/314.1SQL語言的基本概述結構化查詢語言(StructuredQueryLanguage,簡稱SQL)SQL是用于對存放在計算機數(shù)據(jù)庫中的數(shù)據(jù)進行組織、管理和檢索的工具,是一種用于和數(shù)據(jù)庫進行交互通信的計算機語言。SQL是1974年由Boyce和Chamberlin提出的,并在IBM公司研制的SystemR上首次實現(xiàn)了這種語言,由于它的功能豐富,使用方式靈活和語言簡潔易學等突出特點,很受計算機界的歡迎?,F(xiàn)在SQL語言已成為關系型數(shù)據(jù)庫操縱語言的國際標準。VFP提供了SQL語言支持2025/2/324.1.1SQL語言的基本概念SQL語言支持關系型數(shù)據(jù)庫的三級模式結構,其中外模式對應于視圖和部分基本表,模式對應于基本表,內模式對應于存儲文件。在SQL語言中,一個關系就對應于一個表,基本表本身是獨立存在的表,對應一個存儲文件;存儲文件的邏輯結構組成了關系型數(shù)據(jù)庫的內模式。視圖是從基本表或其他視圖導出的表,視圖只是一個虛表。在用戶看來,視圖和基本表都是關系,而存儲文件對用戶是透明的。2025/2/334.1.2SQL的基本功能SQL語言由3部分組成:數(shù)據(jù)定義語言DDL(DateDefinitionLanguage)。數(shù)據(jù)操縱語言DML(DateManipulationLanguage)。數(shù)據(jù)控制語言DCL(DateControlLanguage)。其主要命令如表4-1所示。SQL功能命令數(shù)據(jù)定義語言DDLCreate、Drop、Alter數(shù)據(jù)操縱語言DMLSelect、Insert、Update、Delete數(shù)據(jù)控制語言DCLGrant、Revoke其中,數(shù)據(jù)定義語言DDL提供了完整的定義數(shù)據(jù)庫所必需的語言工具,用來創(chuàng)建、修改、刪除數(shù)據(jù)庫對象;數(shù)據(jù)操縱語言DML用于查詢或者修改數(shù)據(jù);數(shù)據(jù)控制語言DCL用來管理用戶的訪問權限,由于VFP
沒有權限管理功能,所以不支持DCL命令。
2025/2/344.2.1用Create語句創(chuàng)建基本表命令格式:CREATETABLE表名[FREE] (<FieldName1><FieldType>[(寬度,小數(shù))][NULL][NOTNULL] [CHECK<邏輯表達式>[ERROR<文本信息>]] [DEFAULT<表達式>] [PRIMARYKEY/UNIQUE] ,<FieldName2>…)
命令功能:創(chuàng)建數(shù)據(jù)表的結構。
2025/2/364.2.1用Create語句創(chuàng)建基本表(續(xù))命令說明:CREATETABLE表名:指定創(chuàng)建表文件名。FREE:在數(shù)據(jù)庫打開的情況下創(chuàng)建的是自由表。默認在數(shù)據(jù)庫未打開時創(chuàng)建的是自由表,在數(shù)據(jù)庫打開時創(chuàng)建的是數(shù)據(jù)庫表。CHECK<邏輯表達式>:為字段值指定約束條件;ERROR<文本信息>:用來指定當不滿足約束條件時顯示的出錯信息。DFAULT:指定默認的字段值。PRIMARYKEY:指定當前字段為主索引關鍵字;UNIQUE:指定當前字段為候選索引關鍵字。NULL/NOTNULL:表示該字段是否可以為空。2025/2/374.2.1用Create語句創(chuàng)建基本表(續(xù))【例4.1】在圖書館管理系統(tǒng)中創(chuàng)建dzzl(讀者種類)表,包含zlbh(種類編號)、zlmc(種類名稱)、jssl(借書數(shù)量)、jsqx(借書期限)、bz(備注)幾個字段。OPENDATABASE圖書館管理CTEATETABLEdzzl(zlbhc(10)notnull,zlmcc(10)notnull,jsslc(8),jsqxc(8),Bzc(20))
若在命令窗口執(zhí)行MODIFYSTRUCTURE命令,就可以在彈出的對話框中見到dzzl表結構,如圖4-2所示。
圖4-2創(chuàng)建的dzzl表結構2025/2/384.2.1用Create語句創(chuàng)建基本表(續(xù))【例4.2】創(chuàng)建一個名為“通訊錄”的自由表,包含姓名、工作單位、電話號碼、家庭住址4個字段,所得的表預覽如圖4-3所示。CREATETABLE通訊錄
FREE(姓名C(10),工作單位C(20),電話號碼C(12),家庭住址C(20))BROWSE由于沒有向表中添加任何記錄,所以在預覽時看不見任何的記錄。圖4-3創(chuàng)建的通訊錄表2025/2/394.2.1用Create語句創(chuàng)建基本表(續(xù))【例4.3】創(chuàng)建一個“圖書訂單”的數(shù)據(jù)庫,并在此數(shù)據(jù)庫中創(chuàng)建一個“圖書”表,圖書表含有訂單號、圖書編號、書名、單價、數(shù)量等字段。CREATEDATEBASE圖書訂單CREATETABLE圖書(訂單號
C(10); DEFAULT"10001",圖書編號
C(10)PRIMARYKEY,;
書名C(10),單價
N(8,2);
數(shù)量
N(6)CHECK數(shù)量>=100AND數(shù)量<=1000;
ERROR"數(shù)量范圍在100和1000之間")圖4-4圖書表的索引圖預覽此表的設計器可以看見“圖書編號”已經被設為主索引,如圖4-4所示。
2025/2/3104.2.1用Create語句創(chuàng)建基本表(續(xù))【例4.4】在圖書訂單數(shù)據(jù)庫中建立一個新表“訂單”表,含有訂單編號、圖書編號、客戶編號、訂貨日期、發(fā)貨日期幾個字段。OPENDATABASE圖書訂單CREATETABLE訂單(訂單編號
C(10)PRIMARYKEY,; 客戶編號
C(10),訂貨日期
D,發(fā)貨日期D; 圖書編號C(10),FOREIGNKEY圖書編號; TAG圖書編號
REFERENCES圖書)
圖4-5圖書表和訂單表之間的關系在命令窗口中輸入“MODIFYDATABASE訂數(shù)訂單”命令,可在彈出的“數(shù)據(jù)庫設計器”窗口中見到圖書表和訂單表之間已建立的關系,如圖4-5所示。
2025/2/3114.2.2用Alter修改基本表命令格式1:ALTERTABLE<表名>ADD/ALTER[COLUMN]<字段名1><字段類型>[(字段寬度[,小數(shù)位數(shù)])][NULL][NOTNULL][CHECK<邏輯表達式>[ERROR<文本信息>]] [DEFAULT<表達式>] [PRIMARYKEY/UNIQUE][REFERENCES<表名2>[TAG<標識名1>]]命令功能:修改表中原有的字段,或者在表中增加新的字段。2025/2/3124.2.2用Alter修改基本表(續(xù))命令說明:ADD[COLUMN]<字段名1><字段類型>[(字段寬度[,小數(shù)位數(shù)])]:增加新字段,并指定新增字段的名稱、類型、字段寬度及小數(shù)位數(shù)。[NULL][NOTNULL]:指定新字段是否接受空值。ALTER[COLUMN]<字段名1><字段類型>[(字段寬度[,小數(shù)位數(shù)])]:修改原有字段,并指定修改后的字段名稱、類型、字段寬度及小數(shù)位數(shù)。其他的參數(shù)含義同CREATETABLE。2025/2/3134.2.2用Alter修改基本表(續(xù))【例4.5】修改在例4.2中創(chuàng)建的通訊錄表,增加一個“性別”字段,SQL命令如下:ALTERTABLE通訊錄
ADDCOLUMN性別
C(10)再把表中字段“家庭住址”修改為“工作地址”,SQL命令如下:ALTERTABLE通訊錄
RENAMECOLUMN家庭住址
TO工作地址預覽修改后的表如圖4-6所示,與圖4-3對比就可以發(fā)現(xiàn)多出了一個字段“性別”,字段“家庭住址”改為了“工作地址”。
圖4-6修改后的通訊錄表2025/2/3144.2.2用Alter修改基本表(續(xù))【例4.6】修改例4.3中創(chuàng)建的圖書表,將“書名”字段的寬度改為20且不準為空值。SQL命令如下:OPENDATABASE圖書訂單ALTERTABLE圖書
ALTER書名
C(20)NOTNULL命令格式2:ALTERTABLE<表名>ALTER[COLUMN] <字段名>[NULL][NOTNULL] [SETCHECK<邏輯表達式>[ERROR<文本信息>]] [SETDEFAULT<表達式>] [DROPCHECK] [DROPDEFAULT]
2025/2/3154.2.2用Alter修改基本表(續(xù))命令功能:刪除或者設置字段的默認值或約束條件。命令說明:
[SETCHECK<邏輯表達式>[ERROR<文本信息>]]:為字段設置約束條件。[SETDEFAULT<表達式>]:設置默認值。[DROPDEFAULT]:刪除默認值。
[DROPCHECK]:刪除約束條件。
2025/2/3164.2.2用Alter修改基本表(續(xù))【例4.7】在例4.3創(chuàng)建的圖書表中,為“圖書編號”字段設置一個默認值200601并刪除數(shù)量的約束條件,SQL命令如下:ALTERTABLE圖書
ALTER圖書編號
SETDEFAULT200601ALTERTABLE圖書
ALTER數(shù)量
DROPCHECK2025/2/3174.2.2用Alter修改基本表(續(xù))命令格式3:ALTERTABLE<表名>[DROP[COLUMN]<字段名>] [ADDPRIMARYKEY<表達式>TAG<標識名>] [DROPPRIMARYKEY] [ADDUNIQUE<表達式>[TAG<標識名>]] [DROPUNIQUETAG<標識名>] [SETCHECK<邏輯表達式>[ERROR<文本信息>]] [DROPCHECK] [ADDFOREIGNKEY<表達式>TAG<標識名>
REFERENCES<表名>[TAG<標識名>]] [DROPFOREIGNKEYTAG<標識名>[SAVE]] [RENAMECOLUMN<字段名>TO<字段名>]
2025/2/3184.2.2用Alter修改基本表(續(xù))命令功能:刪除表中的字段、設置或刪除表的主索引、候選索引、對字段重新命名或者刪除指定的字段的約束條件。命令說明:[DROP[COLUMN]<字段名>]:刪除指定的字段。[ADDPRIMARYKEY<表達式>TAG<標識名>]:建立主索引。[DROPPRIMARYKEY]:刪除主索引。[ADDUNIQUE<表達式>[TAG<標識名>]]:建立候選索引。[DROPUNIQUETAG<標識名>]:刪除候選索引。[ADDFOREIGNKEY<表達式>TAG<標識名>:建立外索引。REFERENCES<表名>[TAG<標識名>]]:指定建立關聯(lián)的父表。[DROPFOREIGNKEYTAG<標識名>[SAVE]]:刪除外索引。[RENAMECOLUMN<字段名>TO<字段名>]:對字段重新命名。
2025/2/3194.2.2用Alter修改基本表(續(xù))【例4.8】在例4.3創(chuàng)建的圖書表中,為“書名”創(chuàng)建一個候選索引,并且刪除“數(shù)量”字段,如圖4-7所示。SQL語句如下:ALTERTABLE圖書
ADDUNIQUE書名;ALTERTABLE圖書
DROPCOLUMN數(shù)量圖4-7例4.8圖在圖4-7中,字段“數(shù)量”被刪除,并創(chuàng)建候選索引“書名”。
2025/2/3204.2.2用Alter修改基本表(續(xù))【例4.9】在第1章創(chuàng)建的“圖書管理系統(tǒng)”的dzzl中,為jssl創(chuàng)建一個默認值15,當輸入有錯誤時就會顯示“值為15”,刪除表中的候選索引。SQL語句如下:ALETERTABLEdzzlALTERjsslSETDEFAULT15; ERROR“值為15”;ALETERTABLEdzzlDROPUNIQUETAGzlbh
2025/2/3214.2.3用DROP命令刪除一個表隨著數(shù)據(jù)庫設計的變化,數(shù)據(jù)庫的結構也在不斷的變化,新建的表就會不斷地代替舊表,這時某些舊表就不再需要了,可以用DROPTABLE命令刪除它。命令格式:DROPTABLE<表名>命令功能:刪除一個表,包括在這個表上建立的索引。命令說明:<表名>:指定被刪除的表?!纠?.10】刪除在例4.2中創(chuàng)建的通訊錄表,SQL命令如下:DROPTABLE通訊錄
2025/2/3224.3數(shù)據(jù)操縱語言DML數(shù)據(jù)操縱實際上就是管理數(shù)據(jù),這也是創(chuàng)建表的基本目的,主要是對關系中的具體數(shù)據(jù)進行查詢、更新、刪除和插入,但不能夠改變數(shù)據(jù)的結構。DML命令如表4-2所示。命令功能UPDATE更新數(shù)據(jù)庫中的已有數(shù)據(jù)DELETE用于從數(shù)據(jù)表中刪除數(shù)據(jù)INSERT增加一個新的數(shù)據(jù)到表中SELECT數(shù)據(jù)查詢表4-2DML的命令及功能2025/2/3234.3.1INSERT命令用CREATETABLE命令創(chuàng)建一個表后,創(chuàng)建的表中沒有具體的數(shù)據(jù),可以用INSERT命令向表中插入數(shù)據(jù)。命令格式:INSERTINTO表名(列名1,列名2,…)VALUES(<表達式1>,<表達式2>,…)命令說明:INTO表名:指定接受新數(shù)據(jù)的目標表。VALUES:指明增加記錄的字段值。向表中添加的數(shù)據(jù)必須與指定字段名的類型相匹配。字符串要用單引號或者雙引號括起來,日期型可用CTOD函數(shù)處理或者直接引用。2025/2/3244.3.1INSERT命令(續(xù))【例4.11】在例4.4創(chuàng)建的訂單表中插入一個新的記錄:訂單編號:200601讀者編號:10001訂貨日期:2006-02-1發(fā)貨日期:2006-02-10圖書編號:100012使用INSERT語句把該記錄插入到訂單表中,SQL語句如下:INSERTINTO訂單(訂單編號,讀者編號,訂貨日期,發(fā)貨日期,圖書編號);
VALUES("200601","10001",CTOD("02-1-06"),CTOD("02-10-06"),"100012")
2025/2/3254.3.2UPDATE命令UPDATE語句用來更新表中的記錄。命令格式:UPDATE<表名>SET<字段名1>=<表達式1>[,<字段名2>=<表達2>…][WHERE<邏輯表達式>]命令說明:UPDATE:指明要修改的記錄的表的名稱。SET:指明更新的字段名和字段值。WHERE:限定要修改的行,如果沒有WHERE子句,該字段下的所有字段值都將被新值替換。2025/2/3264.3.2UPDATE命令(續(xù))【例4.12】把第1章中創(chuàng)建的SJ表中“價格”大于30元且“頁數(shù)”大于300的圖書的“備注”改為“珍貴圖書”,SQL命令如下:UPDATESJSETBZ="珍貴圖書"WHEREJG>30ANDYS>300若把價格大于30元的或頁數(shù)大于300頁的圖書的備注(bz)改為珍貴圖書,SQL命令如下:UPDATESJSETBZ="珍貴圖書"WHEREJG>30ORYS>300
2025/2/3274.3.3DELETE命令DELETE命令用來刪除一行或者多行記錄。命令格式:DELETEFROM<表名>WHERE<邏輯表達式>命令說明:FROM子句:指出將刪除的目標表。WHERE<邏輯表達式>:指明被刪除的記錄滿足的條件,若沒有WHERE子句則刪除所有記錄?!纠?.13】在第1章創(chuàng)建的SJ表中,把“價格”大于30元且“頁數(shù)”大于300的圖書記錄刪掉,SQL語句如下:DELETEFROMSJWHEREJG>30ANDYS>300
2025/2/3284.4查詢和SELECT命令SELECT是數(shù)據(jù)查詢命令。SELECT命令雖然屬于數(shù)據(jù)操縱范圍,但它是SQL的核心,在SQL命令中使用的是最多的,我們將它和查詢單獨作為一節(jié)。VFP6.0的查詢設計器或SELECT-SQL語句可用來方便地檢索存儲在表或者視圖中的信息。利用查詢設計器可以搜索滿足條件的記錄,并且可將查詢保存在.qpr文件中。2025/2/3294.4.1創(chuàng)建和添加查詢1.啟動查詢設計器若要打開查詢設計器,應首先打開一個要查詢的數(shù)據(jù)庫,然后采用以下方式之一:(1)“文件”菜單啟動查詢設計器(2)從“工具”菜單啟動查詢設計器(3)使用CREATEQUERY命令打開查詢設計器2025/2/330(1)“文件”菜單啟動查詢設計器從“文件”菜單中選擇“打開”命令,啟動“打開”對話框,并在對話框的“文件類型”中選擇“項目”類型,再選取要打開的項目名稱,最后單擊“確定”按鈕,出現(xiàn)項目管理器對話框。在項目管理器中選擇“數(shù)據(jù)”選項卡,再選取“查詢”選項。單擊“新建”按鈕,此時出現(xiàn)“添加表或視圖”對話框,然后從數(shù)據(jù)庫下拉列表框中選擇待查詢的數(shù)據(jù)庫名稱。再從“選定”欄中選擇“表”或“視圖”,本例選擇了“表”。從“數(shù)據(jù)庫中的表”列表框中選擇要添加的表。重復這一步驟,直到選取了所需要的全部表。單擊“關閉”按鈕,返回“查詢設計器”窗口,如圖4-8所示。2025/2/331(1)“文件”菜單啟動查詢設計器(續(xù))圖4-8查詢設計器2025/2/332(2)從“工具”菜單啟動查詢設計器在VFP6.0主菜單中,選擇“工具”,指向“向導”,選擇“查詢”,彈出“向導選取”對話框,再選擇“查詢向導”,可根據(jù)查詢向導的提示創(chuàng)建查詢。(3)使用CREATEQUERY命令打開查詢設計器在命令窗口中輸入CREATEQUERY即可打開查詢設計器。2025/2/3332.創(chuàng)建查詢(1)查詢設計器查詢設計器的窗口如圖4-8所示。在查詢設計器上半部分的窗口中,列出用戶已選定的要查詢的表或視圖。表或視圖之間的連線表示表之間的連接關系。查詢設計器下半部分的窗口中有6個選項卡:“字段”:選定包含在查詢結果中的字段?!奥?lián)接”:確定各數(shù)據(jù)表或視圖之間的連接關系。“篩選”:相當于命令SETFILTERTO,利用過濾的方法查找一個特定的數(shù)據(jù)子集?!芭判蛞罁?jù)”:決定查詢結果輸出中記錄或行的排列順序“分組依據(jù)”:所謂分組就是將一組類似的記錄壓縮成一個結果記錄,這樣就可以完成基于一組的計算?!半s項”:指定是否要對重復記錄進行檢索,同時是否對記錄(返回記錄的最大數(shù)目或最大百分比)做限制。
2025/2/334(2)創(chuàng)建查詢的步驟1)按上面介紹的方法打開查詢設計器。2)添加出現(xiàn)在查詢結果中的表或視圖。如本例已打開“圖書館管理”數(shù)據(jù)庫,并已選擇添加了Dz.dbf、Jy.dbf和Sj.dbf三個表。3)選定要包含在查詢結果中的字段。在“字段”選項卡中,從可用字段列表框中選擇需要的字段,即單擊需要的字段,再單擊“添加”按鈕;或者雙擊需要的字段。4)如果要“可用字段”列表框中的全部字段都包含在查詢結果中,可單擊“全部添加”按鈕;單擊“全部移去”按鈕,則將已選定的字段(列于選定字段列表框中)全部作廢。此時單擊“運行”按鈕即可看到查詢結果。5)保存查詢。從“文件”菜單中選擇“保存”命令,打開如圖4-9所示的“另存為”對話框中,在“保存類型”下拉框中選擇“查詢”類型,在“保存文檔為:”文本框中輸入查詢文件名,本例取名為“讀者借閱”,然后單擊“保存”按鈕即可。
2025/2/335(2)創(chuàng)建查詢的步驟(續(xù))圖4-9“另存為”對話框2025/2/336(2)創(chuàng)建查詢的步驟(續(xù))【例4.14】查詢書籍表中的部分信息。將Sj.dbf表添加到查詢設計器中,即只對Sj.dbf表操作。操作如下:1)首先打開“圖書館管理”數(shù)據(jù)庫,然后打開查詢設計器,添加表Sj.dbf。2)選定要包含在查詢結果中的字段。方法是在“字段”選項卡中,從可用字段列表框中選擇需要的字段,即單擊需要的字段,再單擊“添加”按鈕;或者雙擊需要的字段。圖4-10列出了本例選擇的全部字段。3)單擊“運行”按鈕得到查詢結果,如圖4-11所示。
2025/2/337(2)創(chuàng)建查詢的步驟(續(xù))4)保存查詢結果。單擊“文件”菜單的“保存”命令,打開“保存”對話框,將查詢結果保存。
圖4-10例4.14圖圖4-11例4.14的查詢結果2025/2/338(2)創(chuàng)建查詢的步驟(續(xù))【例4.15】統(tǒng)計表Sj.dbf中記錄書籍的價格、頁數(shù)和書名等信息。為完成統(tǒng)計所有書籍的價格和頁數(shù)的查詢,應將Sj.dbf表添加到查詢設計器中。由于本例只要求統(tǒng)計所有書籍的價格和頁數(shù),因此只需要選擇書籍名稱、價格和頁數(shù)三個字段即可。選擇所需的字段后,單擊“查詢”按鈕即可看到查詢結果,如圖4-12所示。圖4-12例4.15的“書籍價格”查詢結果2025/2/3393.創(chuàng)建SELECT-SQL語句(1)認識SELECT-SQL語句利用查詢設計器可以方便地創(chuàng)建查詢而SELECT-SQL則是一個功能更強大的查詢工具,它可直接從一個或多個表中檢索數(shù)據(jù),其查詢結果可用于創(chuàng)建報表、BROWSE或新的數(shù)據(jù)庫表或是臨時表,并且SELECT-SQL語句可直接加入到程序中。利用查詢設計器創(chuàng)建查詢時,系統(tǒng)會自動創(chuàng)建相應的SQL查詢語句。單擊“查詢設計器工具欄”上的“顯示SQL窗口”按鈕,如圖4-13所示,可打開SQL窗口,窗口中所列出的語句就是剛剛利用查詢設計器創(chuàng)建的與查詢相對應的SQL語句。2025/2/3403.創(chuàng)建SELECT-SQL語句(續(xù))表4-3所列是上兩例使用查詢設計器創(chuàng)建查詢得到的SQL語句。在命令窗口中鍵入MODIFYCOMMANDexample命令,打開程序編輯窗口,再輸入下述命令,可得到與使用查詢設計器相同的查詢結果。1)在命令窗口中輸入任一SELECT-SQL語句,然后按Ctrl+W鍵保存所輸入的內容。2)DOexample例4.14的SELECTSQL語句例4.15的SELECTSQL語句
SELECTsj.sjbh,sj.sjmc,sj.sjzz,sj.cbs;FROM圖書館管理!sjSELECTsj.sjmc,sj.jg,sj.ys;FROM圖書館管理!sj表4-3查詢設計器創(chuàng)建的SELECTSQL語句圖4-13查詢設計器工具欄2025/2/341(2)SELECT-SQL語句的語法格式SELECT[ALL|DISTINCT][TOPnExpr[PERCENT]][Alias.]Select_Item[ASColumn_Name][,[Alias.]Select_Item[ASColumn_Name]...]FROM[FORCE][DatabaseName!]Table[[AS]Local_Alias][[INNER|LEFT[OUTER]|RIGHT[OUTER]|FULL[OUTER]JOINDatabaseName!]Table[[AS]Local_Alias][ONJoinCondition…][[INTODestination]|[TOFILEFileName[ADDITIVE]|TOPRINTER[PROMPT] |TOSCREEN]][PREFERENCEPreferenceName][NOCONSOLE][PLAIN][NOWAIT][WHEREJoinCondition[ANDJoinCondition...][AND|ORFilterCondition[AND|ORFilterCondition...]]][GROUPBYGroupColumn[,GroupColumn...]][HAVINGFilterCondition][UNION[ALL]SELECTCommand][ORDERBYOrder_Item[ASC|DESC][,Order_Item[ASC|DESC]...]]2025/2/342(2)SELECT-SQL語句的語法格式(續(xù))SELECT-SQL語句相當復雜,它既可以用于單表的查詢,也可以用于多表的查詢。1)SELECT子句:在SELECT子句中指定在查詢結果中包含的字段、表達式。2)FROM子句:指定所有從中檢索數(shù)據(jù)的表。如果表沒有打開,VFP6.0顯示“打開”對話框,以便指定文件位置。表打開以后,直到查詢結束時才關閉。如果包含F(xiàn)ORCE關鍵字,則在建立查詢時會嚴格按照FROM子句中描述的順序連接表;若不包含F(xiàn)ORCE關鍵字,則對查詢進行優(yōu)化。使用FORCE關鍵字,可加快查詢速度。DatabaseName!用來指定數(shù)據(jù)的名稱。當包含表的數(shù)據(jù)庫不是當前數(shù)據(jù)庫時,必須指定數(shù)據(jù)庫名稱,并且應在數(shù)據(jù)庫名稱之后表名之前加上感嘆號(!)分隔符。例如,“圖書館管理!sj”表示數(shù)據(jù)管理數(shù)據(jù)庫的sj表。
2025/2/343(2)SELECT-SQL語句的語法格式(續(xù))【例4-16】對圖書館管理數(shù)據(jù)庫,使用FROM子句,查看所有讀者的編號、姓名和性別。其中,SELECT子句指定要查詢的字段名稱,dz.dzbh、dz.dzxm和dz.dzxb分別對應dz表中的編號、姓名和性別。FROM子句表示要查詢的字段來自“圖書館管理”數(shù)據(jù)庫的dz表。SELECTdz.dzbh,dz.dzxm,dz.dzxb;FROMdz注意:下面的SELECT語句和上面的語句具有相同的效果:SELECTdz.dzbh,dz.dzxm,dz.dzxb;FROM圖書館管理!dz
2025/2/3444.定義查詢結果(1)使用排序選項排序能決定查詢輸出結果中記錄或行的順序。例如,可按書籍的價格以升序或降序方式對書籍記錄進行排序。利用排序依據(jù)選項卡可設置查詢的排序次序。在“排序依據(jù)”選項卡中,“選定字段”可選擇要用來排序的關鍵字段。選定后,添加到“排序條件”框,“排序條件”框中字段的次序決定了查詢結果排序時的條件,第一個字段決定了主排序次序,其余字段決定了第二排序次序。例如,在“排序條件”框中的字段順序是sj.jg、sj.ys,則查詢結果將首先按sj.jg進行排序,如果sj表中有一個以上的記錄具有同樣的jg字段值,這些記錄則再按ys進行排序。
2025/2/3454.定義查詢結果(續(xù))【例4.17】建立查詢按書籍價格從低到高排序。觀察例4.15的查詢結果,可以發(fā)現(xiàn)其結果并沒有完全按書籍價格的高低輸出,若要使輸出按書籍價格從低到高排列,可按以下步驟操作:1)打開查詢設計器,首先選擇“排序依據(jù)”選項卡。其中,“選定字段”列出了可用來排序的字段,供用戶選擇,“排序條件”是用戶已選擇好的用來排序的字段。2)從“選定字段”框中選定用來排序的字段,由于本例要按書籍價格從小到大的順序排序,所以應選擇字段sj.jg,然后單擊“添加”按鈕,把它移到“排序條件”框中。3)從“排序選項”的兩個單選按鈕“升序”和“降序”中選擇一個,本例選擇“升序”。
4)單擊常用工具欄中的“運行”按鈕。將查詢結果同例4.15比較。2025/2/3464.定義查詢結果(續(xù))對查詢結果進行排序時,在對應的SELECT-SQL命令中可包括ORDERBY子句,它的格式如下:ORDERBYOrder_item[ASC|DESC]其中,Order_item是排序條件框中選定的排序字段,字段間用逗號(,)分隔。另外,Order_item也可以是一個數(shù)字表達式,表示查詢結果中列的位置(最左邊列的編號為1)。ASC指定查詢結果根據(jù)排序以升序排序,DESC指定以降序排列,缺省時為升序。如果不使用ORDERBY子句指定查詢結果的排列順序,則查詢結果不排序。例4.17對應的SELECT-SQL語句如下:SELECTsj.sjmc,sj.jg,sj.ys;FROM圖書館管理!sjORDERBYsj.jg2025/2/347(2)給字段添加說明標題為使查詢結果易于閱讀和理解,可以給字段添加說明標題,又稱別名。給前面設計的“書籍價格”添加說明標題,操作步驟如下:1)打開“書籍價格”查詢。2)在“函數(shù)和表達式”文本框中鍵入字段名,接著輸入AS和說明標題,如下所示:sj.sjmcAS書籍名稱3)單擊“添加”按鈕,在“選定字段”框中放置帶有別名的字段。4)重復步驟2)、3),分別給sj.jg和sj.ys添加說明標題“書籍價格”和“書籍頁數(shù)”。5)單擊“運行”按鈕,查詢結果中各字段名稱已變成相應的漢字說明。對應的SELECT語句如下:SELECTsj.sjbhAS書籍編號,sj.jgAS書籍價格,sj.ysAS書籍頁數(shù);FROM圖書館管理!sj2025/2/348(3)使用選擇條件選擇數(shù)據(jù)庫或表中符合條件的一部分記錄而不是全部記錄是查詢的重要任務。例如,要查詢一定日期范圍內的借書記錄、查詢所有女性讀者的基本情況等。在查詢設計器中,“篩選”選項卡可確定用于選擇記錄的字段和比較準則,以及輸入與該字段進行比較的示例值。設置篩選條件是指設置篩選的邏輯表達式,這個表達式由字段、操作符和數(shù)值組成。邏輯表達式主要有下述形式:字段操作符表達式其中,字段是要查詢的表中的字段。操作符的含義及使用示例如表4-4所示。2025/2/349(3)使用選擇條件(續(xù))在表4-4中,Like篩選操作符的含義是查找每個與字符表達式相匹配的字段。在字符串表達式中可使用百分號“%”和下劃線“_”通配符,下劃線表示字符串中的任意一個字符,百分號表示任意長度的字符串。
操作符比較關系舉例=相等xk.cj=60,xk.kcbm='02'==完全相等xk.cj==60,xk.kcbm=='02'Like不精確匹配xk.xhLIKE"19964%",查詢所有學號前五位是“19964”的學生>大于xk.cj>60,xk.kcbm>'02'>=大于等于xk.cj>=60,xk.kcbm>='02'<小于xk.cj<60,xk.kcbm<'02'<=小于等于xk.cj<=60,xk.kcbm<='02'表4-4操作符及其舉例2025/2/350(3)使用選擇條件(續(xù))在“實例”文本框中,輸入比較條件時需要注意以下幾點:1)僅當字符串與待查詢表中字段名相同時,用引號括起字符串;否則,無需用引號括起字符串。2)日期也不必用花括號括起來。3)邏輯值的前后必須使用句點號,如.T.。4)若輸入查詢中表的字段名,VFP就將它識別為一個字段。在搜索字符型數(shù)據(jù)時,如果想忽略大小寫匹配,應選擇“大小寫”下面的按鈕。當需要多個篩選條件時,需要在“篩選”卡中加進多個語句(多個行)。各個篩選條件之間使用.AND.和.OR.連接,即“篩選”選項卡中的“邏輯”下拉列表。當有多個篩選條件且“邏輯”選項設置為“無”時,系統(tǒng)自動加入.AND.值。當想否定設置的篩選條件時,選擇“否”按鈕。例如,篩選條件sj.jg>=30,選擇“否”按鈕后,變?yōu)閟j.jg<30。2025/2/351(3)使用選擇條件(續(xù))【例4.18】在例4.15的“書籍價格”查詢中,篩選出價格在30元以上的書籍。1)打開“書籍價格”查詢,并選擇“篩選”選項卡。2)在“字段”下拉列表中選擇sj.jg字段。3)在“條件”下拉列表中選擇>=操作符。4)在“實例”文本框中輸入30。對應的SELECT語句如下:SELECTsj.sjmcAS書籍名稱,sj.jgAS書籍價格,sj.ysAS書籍頁數(shù);FROM圖書館管理!sj;WHEREsj.jg>=302025/2/352(3)使用選擇條件(續(xù))【例4.19】在例4.15創(chuàng)建的“書籍價格”查詢中,使用LIKE操作符,篩選出書籍名為軟件工程的記錄。1)打開“統(tǒng)計學生成績”查詢,并選擇“篩選”選項卡。2)在“字段”下拉列表中選擇sj.sjmc字段。3)在“條件”下拉列表中選擇LIKE操作符。4)在“實例”文本框中輸入“軟件工程”。對應的SELECT語句如下:SELECTsj.sjmc,sj.jg,sj.ys;FROM圖書館管理!sjWHEREsj.sjmcLIKE"軟件工程"2025/2/353(4)多個篩選條件的組合使用實際使用中,經常需要查詢某一范圍內的記錄。例如,書籍價格在30元以下或者50元以上的所有書籍,或者書籍頁數(shù)在300頁以上且價格在40元以上的書籍等。由于可能同時需要輸入兩個篩選條件,因此需要考慮篩選條件之間的關系問題。在VFP中,篩選條件間共有三種關系,即與(and)、或(or)和否(not)。例如,“書籍價格在30元以下或者50元以上”可寫成sj.jg<=30orsj.jg>=50,而“書籍頁數(shù)在300頁以上且價格在40元以上的書籍”可寫成sj.ys>=300andsj.jg>=40。在“篩選”選項卡中,可同時輸入多個篩選條件,每一個篩選條件占一行,行與行之間的缺省邏輯關系是“與”(AND),當選擇其他關系時,可通過邏輯項對應行的列表來選擇。
2025/2/354(4)多個篩選條件的組合使用(續(xù))【例4.20】設置“與”篩選條件。前面已經分析過,“書籍頁數(shù)在300頁以上且價格在40元以上的書籍”,可看成兩個篩選條件的組合,即sj.ys>=300andsj.jg>=40。首先建立篩選條件sj.ys>=300,然后再建立另一個篩選條件sj.jg>=40。由于兩個篩選條件之間是“與”的關系,因此不用設置“邏輯”選項。對應的SELECT語句如下:SELECTsj.sjmc,sj.jg,sj.ys;FROM圖書館管理!sjWHEREsj.ys>=300andsj.jg>=40
2025/2/355(4)多個篩選條件的組合使用(續(xù))【例4.21】設置“或”(OR)篩選條件。統(tǒng)計“書籍價格在30元以下或者50元以上”的所有書籍,其篩選條件可寫成sj.jg<=30orsj.jg>=50。在“篩選”選項卡中首先建立兩個篩選條件,第一個是sj.jg<=30,第二個篩選條件是sj.jg>=50。由于兩個篩選條件是“或”關系,因此,還要在第一個篩選條件對應的“邏輯”下拉列表中選擇OR運算符。對應的SELECT語句如下:SELECTsj.sjmc,sj.jg,sj.ys;FROM圖書館管理!sjWHEREsj.jg<=30ORsj.jg>=502025/2/356(4)多個篩選條件的組合使用(續(xù))【例4.22】設置“非”(NOT)篩選條件。查詢“所有書名不是‘軟件工程’的書籍”??疾臁八袝皇恰浖こ獭臅焙汀八袝恰浖こ獭臅笔腔榉穸ǖ??!八袝恰浖こ獭臅笨蓪懗伞癓IKE”軟件工程“”,可先設置篩選條件“LIKE”軟件工程“”,然后單擊該篩選條件行對應的“否”按鈕。對應的SELECT語句是:SELECTsj.sjmc,sj.jg,sj.ys;FROM圖書館管理!sjWHEREsj.sjmcNOTlike"軟件工程"2025/2/3575.定向輸出查詢結果VFP允許查詢結果以不同的形式輸出。例如,可輸出到文件、打印機、臨時表和屏幕等。缺省形式是將查詢結果顯示在瀏覽窗口中。選擇查詢結果輸出形式的方法是:(1)從“查詢”菜單中選擇“查詢去向”命令,打開“查詢去向”對話框,如圖4-14所示。打開該對話框的另一個方法是在“查詢設計器”工具欄中單擊“查詢去向”按鈕。(2)“查詢去向”對話框中列出了7個查詢結果的輸出形式,且均以按鈕形式給出。選擇需要的按鈕,并單擊“確定”按鈕即可。
圖4-14“查詢去向”對話框2025/2/3585.定向輸出查詢結果(續(xù))定向輸出對應的SELECT子句是INTODestination子句。表4-5為該子句常用格式。如輸出到臨時表“學生成績清單”中可寫成“INTOCURSOR學生成績清單”,輸出到活動窗口中,可寫成TOSCREEN。如果只想暫時保存結果,可將它們發(fā)送到數(shù)組或臨時表中。若要永久保存結果,將它發(fā)送到一個表中。查詢結果輸出形式SELECT子句格式獨立的表INTOTABLE表名稱數(shù)組INTOARRAY數(shù)組名稱臨時表INTOCURSOR臨時表名稱活動窗口TOSCREEN瀏覽窗口系統(tǒng)缺省值表4-5定向輸出查詢結果子句形式2025/2/3594.4.2運行查詢1.運行查詢在完成了查詢設計并指定了輸出目的地后,可以單擊“運行”按鈕啟動該查詢,也可以在命令窗口使用DO命令。例如,運行“數(shù)籍價格”查詢,可在命令窗口輸入:DO書籍價格.qpr
2025/2/3602.分組查詢(1)分組查詢。所謂分組就是將一組類似的記錄壓縮成一個結果記錄,這樣就可以完成基于一組記錄的計算?!纠?.23】將讀者按家庭住址分組。操作步驟如下:1)新建一個“按讀者住址查詢”,選擇讀者表的所有字段。2)選擇“分組依據(jù)”選項卡,選擇dz.jtzz,并單擊“添加”按鈕。3)為保證分組正確,在“排序依據(jù)”選項卡中設置排序條件。例如dz.dzbh。4)運行查詢,結果如圖4-15所示。
2025/2/361(1)分組查詢(續(xù))【例4.24】統(tǒng)計在書籍表中每個出版社出版的書籍的數(shù)目。操作步驟如下:1)建立一個查詢,選擇sj表中的所有字段,在“分組依據(jù)”選項卡中選擇sj.cbs,在“排序依據(jù)”選項卡中選擇sj.sjbh。2)在“字段”選項卡中,在“函數(shù)和表達式”框中輸入“count(sj.cbs)as數(shù)量”,并單擊“添加”按鈕。3)運行查詢,其結果如圖4-16所示。圖4-16統(tǒng)計出版社的出版數(shù)量2025/2/362(2)為查詢增加計算字段【例4.25】統(tǒng)計每個出版社的所出書中價格最低的書籍,可按如下步驟操作:1)創(chuàng)建一個查詢,選擇書籍表中的sj.sjmc、sj.sjzz、sj.jg,sj.ys。2)選擇“字段”選項卡,在“函數(shù)和表達式”文本框中輸入“MIN(sj.jg)AS最便宜的圖書”。3)單擊“添加”按鈕。4)選擇“分組依據(jù)”選項卡,選擇sj.cbs,并單擊“添加”按鈕。5)若需要排序,此時可在“排序依據(jù)”選項卡中設置排序條件,如sj.ys。
“MIN(sj.jg)AS最便宜的圖書”是一個函數(shù)表達式,在查詢結果中以“最便宜的圖書”名稱給出。此列不是表中原有的字段,而是在生成查詢的過程中經過計算得到的,又稱為計算列或計算字段。2025/2/363(2)為查詢增加計算字段(續(xù))VFP提供了“字符串、數(shù)學、邏輯和日期”4類函數(shù)。表4-6列出了在SELECT-SQL中經常使用的列函數(shù)。列函數(shù)均產生一個單值,因此以下查詢求出所有圖書的總價格。SELECTsj.mcsj.jgsj.sjbhSUM(sj.jg)AS總價格;FROMsj函數(shù)功能AVG(列名)求出指定列上的平均值,只適用于數(shù)字類型的列SUM(列名)求出指定列上的和。只適用于數(shù)字類型的列MIN(列名)求出指定列上的最小值。列可以是數(shù)字型、字符型或日期型MAX(列名)求出指定列上的最大值,列可以是數(shù)字型、字符型或日期型COUNT(列名)求出指定列上的值的出現(xiàn)個數(shù)表4-6常用列函數(shù)2025/2/364(2)為查詢增加計算字段(續(xù))在“函數(shù)和表達式”文本框中輸入函數(shù)可以使用表達式生成器,單擊“函數(shù)和表達式”文本框旁的“...”按鈕可啟動表達式生成器,如圖4-17所示。在表達式生成器中,有“字符串、數(shù)學、邏輯和日期”4類函數(shù),每一類函數(shù)對應一個下拉列表,在列表中可選擇相應的函數(shù),然后再輸入相應的變量。圖4-17表達式生成器2025/2/365(2)為查詢增加計算字段(續(xù))例,“SUM(sj.jg)AS總價格”函數(shù)的輸入方法如下:1)在“數(shù)學”下拉列表中選擇SUM函數(shù),表達式文本框中出現(xiàn)SUM(expN)。2)選取expN。3)在“字段”列表框中選擇需要的字段變量或從鍵盤輸入相應的表達式,例如si.jg以便代替expN。4)在“表達式”文本框的SUM函數(shù)后添加“AS總價格”,將表達式修改成“SUM(sj.jg)AS總價格”。5)單擊“檢驗”按鈕可檢驗輸入的表達式的正確性,若正確無誤后,可單擊“確定”按鈕,返回查詢設計器。此時在“函數(shù)和表達式”框中出現(xiàn)“SUM(sj.jg)AS總成績”。6)單擊“添加”按鈕,“總成績”項將出現(xiàn)在查詢結果中。2025/2/366(2)為查詢增加計算字段(續(xù))【例4.26】已知sj表,可以使用AVG()列函數(shù)求每個出版社的書籍的平均價格。下面給出SELECT語句:SELECTsj.mc,sj.jg,sj.ys,sj.sjzz,;AVG(sj.jg)AS平均價格;FROMsj;GROUPBYsj.cbs;ORDERBYsj.sjbh【例4.27】在“統(tǒng)計平均價格”查詢中,添加“總價格”列。相應的SELECT語句如下:SELECTsj.mc,sj.jg,sj.ys,sj.sjzz,;AVG(sj.jg)AS平均價格,SUM(sj.jg);FROMsj;GROUPBYsj.cbs;ORDERBYsj.sjbh
2025/2/3673.篩選分組WHERE、HAVING子句都能為查詢提供過濾條件。一般來說,HAVING子句用來過濾GROUPBY后的分組結果,用WHERE子句過濾一般表的元組。下面SELECT語句輸出家住在北京且讀者編號小于2006005的讀者記錄。SELECTDz.dzbh,Dz.dzxm,Dz.jtzz,Dz.dznl;FROM圖書館管理!dz;WHEREDz.jtzz="北京"ANDDz.dzbh<"20060005"; GROUPBYDz.dzbh; ORDERBYDz.dzbh如果要查詢年齡小于等于30的讀者,可繼續(xù)修改SELECT語句:SELECTDz.dzbh,Dz.dzxm,Dz.jtzz,Dz.dznl;FROM圖書館管理!dz;WHEREDz.jtzz="北京"ANDDz.dzbh<"20060005"; GROUPBYDz.dzbh; ORDERBYDz.dzbh;HAVINGDz.dznl<=30
2025/2/3684.查詢多個表數(shù)據(jù)庫中的表之間的關系可由表間的公共字段體現(xiàn)。例如,“圖書館管理”數(shù)據(jù)庫中,表dz.dbf、jy.dbf和sj.dbf、dz.dbf和jy.dbf之間由公共字段dzbh相連接,jy.dbf和sj.dbf之間由公共字段sjbh相連接。當需要獲取存儲在兩個或更多表或視圖中的信息時,需要指出這些表或視圖之間的連接關系。使用SELECT-SQL的INNERJOIN子句可完成表間的連接。2025/2/3694.查詢多個表(續(xù))在VFP中,表之間的連接有4種類型,如表4-8所示。
連接類型查詢內容(條件)內部連接(INNER)兩個表中僅滿足條件的記錄,這是最普通的連接類型左連接表中在連接條件左邊的所有記錄,和表中連接條件右邊的且滿足連接條件的記錄右連接表中在連接條件右邊的所有記錄,和表中連接條件左邊的且滿足連接條件的記錄完全連接表中不論是否滿足條件的所有記錄表4-8表間聯(lián)接類型及使用條件2025/2/3704.查詢多個表(續(xù))在多表間建立查詢和單表基本相同,惟一不同的是要指明表間的關系?!纠?.28】統(tǒng)計借書的讀者和他們所借的書籍,要求包括“讀者姓名”和“書籍名稱”等字段。1)首先打開“圖書館管理”數(shù)據(jù)庫,然后打開查詢設計器。因為本例要求包含“讀者姓名”和“書籍名稱”,故需添加dz.dbf、sj.dbf和jy.dbf三個表。2)選定要包含在查詢結果中的字段。在“字段”選項卡中,從“可用字段”列表框中選擇需要的字段,單擊這些字段,再單擊“添加”按鈕;或者雙擊需要的字段。相應的SELECT語句是:SELECTDz.dzxm,sj.sjmc,Jy.cjrq,Jy.sjbh;FROM圖書館管理!dzINNERJOIN圖書館管理!jy; INNERJOIN圖書館管理!sj; ONsj.sjbh=Jy.sjbh; ONDz.dzbh=Jy.dzbh2025/2/3714.查詢多個表(續(xù))圖4-18列出了上例選擇的全部字段。單擊“運行”按鈕可看到例4.28的查詢結果,如圖4-19所示。圖4-18例4.28選定的字段圖4-19例4.28查詢結果2025/2/3724.5報表和標簽報表和標簽是將需要的數(shù)據(jù)表格化的重要工具。本節(jié)主要介紹如何快速創(chuàng)建報表,并將應用程序有機地連接起來。2025/2/3734.5.1VisualFoxPro的報表和標簽報表包括兩個基本組成部分:數(shù)據(jù)源和布局。數(shù)據(jù)源通常是數(shù)據(jù)庫中的表,或是視圖、查詢或臨時表。報表布局定義了報表打印格式。在定義表和視圖或查詢后,便可創(chuàng)建報表或標簽。創(chuàng)建報表的過程包括定義報表的樣式并指定數(shù)據(jù)源。系統(tǒng)將報表樣式保存在報表文件中,報表文件的擴展名為.frx,其相關文件是.frt。報表文件指定了想要的字段、要打印的文本(數(shù)據(jù)源)及數(shù)據(jù)在頁面上的位置。報表文件不存儲每個數(shù)據(jù)字段的值,只存儲特定數(shù)據(jù)庫或表中各字段值在報表中的位置和格式信息。標簽的創(chuàng)建過程和創(chuàng)建報表基本相同,標簽保存在.lbx文件中,相關文件為.lbt。2025/2/3741.創(chuàng)建報表布局創(chuàng)建報表之前,首先應該確定報表的常規(guī)格式,系統(tǒng)提供了幾種基本的報表布局,列報表、行報表、一對多報表、多欄報表和標簽。每種報表布局的一般用途如表4-8所示。用戶可以使用“報表設計器”進行修改布局,直至符合用戶的要求為止。布局類型說明示例列報表每行一條記錄,每條記錄的字段在頁面上按水平方向放置分組/總計報表、財政報表、存貨清單和銷售總結行報表每列一字段,每條記錄的字段在一側豎直放置列表一對多一條記錄或一對多關系發(fā)票多列多列記錄,每條記錄的字段沿左邊緣豎直放置電話號碼薄,名片標簽多列的記錄,每條記錄的字段左邊緣豎直放置,打印在特殊紙上郵件標簽,名簽表4-8報表常規(guī)布局及用途2025/2/375(1)用報表向導創(chuàng)建報表VFP6.0提供了3種方法創(chuàng)建報表布局:用報表向導創(chuàng)建簡單的單表或多表的布局用快速報表從單表中創(chuàng)建一個簡單報表用報表設計器修改已有的報表或創(chuàng)建自己的報表。每種方法創(chuàng)建的報表布局文件都可以用“報表設計器”進行修改。“報表向導”是創(chuàng)建報表的最簡單途徑,它自動提供很多“報表設計器”的定制功能?!翱焖賵蟊怼笔莿?chuàng)建簡單布局的最迅速途徑。直接在“報表設計器”內創(chuàng)建報表,“報表設計器”提供一個空白布局。2025/2/376(2)用“快速報表”命令創(chuàng)建報表詳細步驟如下:1)在“文件”菜單中選擇“新建”命令,打開“新建”對話框,并在該對話框中選擇“報表”單選按鈕,然后單擊“新建文件”命令按鈕。此時將打開“報表設計器”,同時在菜單中增加“報表”菜單項,如圖4-20所示。2)在“報表”菜單中選擇“快速報表”命令,此時出現(xiàn)“打開”對話框,用戶可在此對話框中選擇報表要使用的表或視圖。例如選擇dz.dbf表。3)選擇完報表要使用的數(shù)據(jù)源后,系統(tǒng)出現(xiàn)“快速報表”對話框,如圖4-21所示。在“快速報表”對話框中,提供了簡單的字段布局,例如列布局或行布局。2025/2/377(2)用“快速報表”命令創(chuàng)建報表(續(xù))4)可在字段布局、標題和別名選項中做出選擇。如果不想讓表中的所有字段全部出現(xiàn)在報表中,可單擊“字段”按鈕,在字段選擇器對話框中選擇適當?shù)淖侄魏?,單擊“確定”按鈕,返回“快速報表”對話框。5)在“快速報表”對話框中單擊“確定”按鈕返回報表設計器。用戶所做的選擇反映在報表設計器中。用戶可在報表設計器中繼續(xù)修改報表,直至符合要求為止。圖4-20“報表”菜單項圖4-21“快速報表”對話框2025/2/378(3)使用報表設計器創(chuàng)建報表報表設計器可用來設計報表布局,規(guī)劃數(shù)據(jù)在頁面上的打印位置以及添加各種組件。可通過“文件”菜單的“新建”命令,打開一個具有空白報表的報表設計器;也可以通過“文件”菜單的“打開”命令,打開一個已存在的報表。圖4-22是報表設計器窗口。圖4-22報表設計器窗口2025/2/379(3)使用報表設計器創(chuàng)建報表(續(xù))【例4.29】已知有dz.dbf表,請設計一個報表,顯示讀者信息。1)打開報表設計器2)單擊“報表”菜單的“快速報表”命令。3)選擇需要的表。本例選擇表dz.dbf,此時已生成了一個簡單的表。單擊“打印預覽”按鈕可看到運行結果。2025/2/380(4)報表帶區(qū)VFP將報表的不同部分定義成不同的帶區(qū),不同的帶區(qū)可根據(jù)需要在報表設計器中進行增加或取消。圖4-22中列出了報表完整的帶區(qū),表4-9給出了這些帶區(qū)的用途。名稱用途添加方法標題每報表出現(xiàn)一次,用來放置標題、日期、頁碼、公司標志或圍繞標題的各種式樣的框從“報表”菜單中選擇“標題/總結”帶區(qū)頁標頭每頁面出現(xiàn)一次,用來放置日期、頁碼和列標題默認組標頭每組出現(xiàn)一次,組標頭個數(shù)和分組數(shù)相等,用來放置分組字段和分隔線等從“報表”菜單中選擇“數(shù)據(jù)分組”細節(jié)帶區(qū)每記錄出現(xiàn)一次,用來放置數(shù)據(jù)和說明性文本等默認組注腳區(qū)每組出現(xiàn)一次,用來放置分組總計、小計文本等從“報表”菜單中選擇“數(shù)據(jù)分組”頁注腳每頁面出現(xiàn)一次,用來放置日期、頁碼、分類總計及說明性文本等默認總結每報表出現(xiàn)一次,用來放置有關總計文本從“報表”菜單中選擇“標題/總結”帶區(qū)表4-9報表帶區(qū)用途2025/2/3812.打開報表布局利用下面的命令可打開如圖4-22所示的報表設計器:MODIFYREPORT報表名稱其中,報表名稱文件的擴展名是.frx。已創(chuàng)建的報表布局不符合設計要求時,可利用報表設計器修改。用報表設計器可更改數(shù)據(jù)環(huán)境、頁面設置或報表控件。數(shù)據(jù)環(huán)境定義了報表中將包含的數(shù)據(jù)源,而頁面設置定義了報表頁面和報表帶區(qū)的總體形狀,報表控件定義了出現(xiàn)于頁面上的數(shù)據(jù)項。
修改報表布局主要包括設置報表數(shù)據(jù)環(huán)境,修改報表帶區(qū),修改或添加控件,調整控件位置和大小,定義字段格式,更改報表中的字體,添加線條、矩形和圓形,向報表添加圖片,向報表添加注釋、在布局上分組數(shù)據(jù)等。2025/2/3823.報表控件的使用(1)控件工具欄在報表設計器中可插入各種控件,包括標簽、字段、變量和表達式。如圖4-23所示是報表設計器中的控件工具欄。表4-10列出了報表控件及其作用。控件名稱作用域用來顯示表的字段、變量和其他表達式標簽用來顯示文本線條用來顯示直線矩形用來顯示框和邊界圓角矩形用來顯示圓、橢圓、圓角矩形和邊界圖片/ActiveX用來顯示位圖或通用字段表4-10報表控件名稱及作用圖4-23控件工具欄2025/2/383(2)添加域控件可以采用以下方式之一添加域控件:1)從數(shù)據(jù)環(huán)境中添加字段。在報表設計器中,打開報表數(shù)據(jù)環(huán)境,選擇需要的表或視圖,并將需要的字段拖放到報表布局上。2)從工具欄添加字段。在報表控件工具欄中:選擇“域控件”,彈出如圖4-24所示的報表表達式對話框;然后在“報表表達式”對話框中,選擇“表達式”框后的“…”按鈕,出現(xiàn)“表達式生成器”對話框,如圖4-25所示。在“表達式生成器”對話框的“字段”列表框中,列出了已添加到數(shù)據(jù)環(huán)境中的表或視圖中包含的字段,雙擊想要的字段名。表名和字段名將出現(xiàn)在“報表字段的表達式”框內;最后,單擊“檢驗”按鈕,可檢驗表達式的正確性。2025/2/384(2)添加域控件(續(xù))圖4-24“報表表達式”對話框圖4-25“表達式生成器”對話框
2025/2/385(3)選擇和移動報表控件可通過移動或者改變的大小來調整報表布局上已存在控件的布局。選擇控件的方法是:1)選擇單個控件:單擊控件,已選擇的控件周圍會出現(xiàn)若干個黑色控點。2)選擇多個控件:按住Shift鍵,單擊要選擇的控件或者在控件周圍拖動,將需要選擇的控件均置于拖出的方框中。已選擇的多個控件可一起移動、復制、刪除或改變格式??丶诓季謨纫苿游恢玫脑隽坎⒉皇沁B續(xù)的。增量取決于網格的設置。按住Ctrl鍵再拖動控件時,則可忽略網格的作用。2025/2/386(4)調整控件大小1)手動調整控件大?。菏紫冗x擇要調整大小的控件,然后將鼠標指針指向控件周圍的控點,最后拖動即可。2)自動匹配控件大?。合冗x定這些控件,再單擊“格式”菜單中的“大小”命令?!按笮 泵钪刑峁┝?種調整控件的方法,分別是“對齊網格”、“調整到最高”、“調整到最窄”、“調整到最寬”、“調整到最短”,可按照需要選擇,系統(tǒng)自動匹配控件大小。2025/2/387(5)對齊報表控件將彼此有關系的控件相互對齊,以便它們能整齊地顯示或打印在表格中。VFP6.0中提供了若干種對齊選項,主要有左對齊、右對齊、底對齊和頂對齊等13種,如圖4-26所示。按先選取要對齊的控件再單擊控件工具欄中的相應對齊按鈕的方法操作。圖4-26布局工具欄2025/2/3884.報表分組系統(tǒng)允許在一個報表中添加一個或多個組,已建立的分組可根據(jù)需要改變組的順序,重復組標頭或者更改或刪除組帶區(qū)。報表分組之后,報表布局就有了組標頭和組注腳帶區(qū),可向其中添加控件。組注腳通常包含組總計和其他組總結性信息。報表分組并不重排數(shù)據(jù)記錄,只是按記錄原來的順序進行分組,而不會將表中所有具有相同分組特性的記錄分在一個組。報表內最多可定義20級數(shù)據(jù)分組。嵌套分組有助于組織不同層次的數(shù)據(jù)和總表達式。2025/2/389(1)添加單個組一個單組報表具有基于輸入表達式的一級數(shù)據(jù)分組。例如,在前面建立的dz表中,按讀者性別進行分組,即將女讀者放在一組,男讀者放在另一組。1)從“報表”菜單中選擇組,打開“數(shù)據(jù)分組”對話框。2)在“數(shù)據(jù)分組”對話框中,輸入分組表達式,或者單擊分組表達式框后面的“…”按鈕,在表達式生成器中輸入分組表達式。本例的表達式是:dz.dzxb=“女”。3)在組屬性區(qū)域中選定想要的屬性。組屬性主要用來為組指定頁面分隔選項VFP6.0提供了4個選項。4)添加表達式后,可在帶區(qū)內放置任何希望的控件。例如,說明性文字、求和、求平均值,以及求分組個數(shù)統(tǒng)計等。2025/2/390(1)添加單個組(續(xù))圖4-27顯示了增加組帶區(qū)后的報表設計器畫面,其中只選了讀者表中的4個屬性。圖4-28是報表的運行結果。圖4-27添加一個報表設計器圖4-28本例的報表2025/2/391(2)添加多個數(shù)據(jù)分組若要添加多個數(shù)據(jù)分組,可從“報表”中選擇“數(shù)據(jù)分組”。在第一個“分組表達式”框下方鍵入新的分組表達式,然后在“組屬性”區(qū)域選擇想要的屬性。分組順序將利用“組注腳X”(其中X=1,2,3,...)來標識其次序。2025/2/392(3)更改組帶區(qū)若要更改分組表達式和組打印選項,可從“報表”菜單中選擇“數(shù)據(jù)分組”,然后在“數(shù)據(jù)分組”對話框中選定要更改的分組表達式,并輸入新的表達式。(4)刪除組帶區(qū)若要刪除組帶區(qū),可從“報表”菜單中選擇“數(shù)據(jù)分組”,選定希望刪除的組,然后選擇“刪除”按鈕,則該組帶區(qū)將從布局中刪除。2025/2/3935.使用標簽向導標簽是多列報表布局。在VFP6.0中,提供“標簽向導”、標簽設計器和語言三種方法創(chuàng)建標簽。用戶可根據(jù)標簽向導提示逐步完成標簽的布局設計。使用標簽向導完成的標簽布局不一定完全符合用戶的要求,用戶還可以使用“標簽設計器”進行修改布局,直至符合用戶的要求為止。2025/2/3946.標簽設計器標簽設計器是報表設計器的一部分,它們使用相同的菜單和工具欄。設計標簽和設計報表的方法是一樣的。詳細請參見“報表設計”部分。2025/2/3957.預覽報表報表在設計過程中或設計完成后,可通過報表預覽查看報表的頁面外觀;檢查數(shù)據(jù)列的對齊和間隔;查看報表是否返回希望的數(shù)據(jù)。可以采用以下方式之一預覽報表:菜單方法。從“顯示”菜單中選擇“預覽”,或單擊“常用”工具欄中的“預覽”按鈕。命令方法。VFP6.0提供了命令方法預覽報表或標簽。命令格式如下:REPORTFORM報表名稱PREVIEW2025/2/3968.打印報表可以采用以下方式之一打印報表:菜單方法:從“文件”菜單中選擇“打印”命令,在彈出的“打印選項”對話框中,可配置有關打印機的屬性、紙張大小、打印份數(shù)和打印頁碼范圍。命令方法:此方法可直接寫入程序中。例如,將“讀者表”報表送打印機打印,可執(zhí)行下述命令:REPORTFORM讀者表TOPRINTER打印報表時,通過提供選擇條件可限制出現(xiàn)在報表中的記錄數(shù)目;通過指定一個數(shù)量或范圍為記錄選擇范圍;生成FOR表達式來選定與條件相匹配的記錄;生成WHILE表達式來選定記錄直到發(fā)現(xiàn)與條件不匹配的記錄為止。2025/2/3974.5.2向應用程序添加報表和標簽向應用程序添加報表和標簽主要包括:控制數(shù)據(jù)源定義報表頁面和報表變量在域控件中使用表達式和函數(shù)域控件格式化控制報表和標簽的輸出集成查詢和報表2025/2/3981.控制數(shù)據(jù)源數(shù)據(jù)環(huán)境定義了報表中包含的數(shù)據(jù)源。所謂數(shù)據(jù)源就是用來填充到報表中的數(shù)據(jù)所在的表或視圖。向數(shù)據(jù)環(huán)境中添加表或視圖的方法如下:(1)從“顯示”菜單中選擇“數(shù)據(jù)環(huán)境”命令,打開數(shù)據(jù)環(huán)境設計器。(2)選擇“數(shù)據(jù)環(huán)境”菜單的“添加”命令,此時若已經打開了某個數(shù)據(jù)庫或視圖,將出現(xiàn)“添加表或視圖”對話框,否則將出現(xiàn)“打開”對話框。(3)選擇要添加到數(shù)據(jù)環(huán)境中的表或視圖,在“添加表或視圖”對話框中單擊“添加”按鈕,在“打開”對話框中單擊“確定”按鈕,系統(tǒng)返回到“添加表或視圖”對話框中。(4)單擊“關閉”按鈕。2025/2/3992.定義報表頁面和報表變量(1)修改報表布局和更改報表頁面。修改已設計好的報表或標簽,可按以下方法操作:1)設計報表帶區(qū)內容。使用報表帶區(qū)可以決定報表的每頁、分組及開始與結尾的樣式。選擇“報表”菜單中的“標題/總結”,彈出如圖4-29所示的“標題/總結”對話框;然后單擊“標題帶區(qū)”和“總結帶區(qū)”復選框,最后單擊“確定”按鈕,則報表設計畫面如圖4-30所示。在“標題/總結”對話框中,兩個“新頁”復選框用于決定打印完標題帶區(qū)或總結帶區(qū)后是否走一頁紙。2)修改表帶區(qū)。在“報表設計器”中,可以通過拖動帶區(qū)欄達到適當高度,來調整每個帶區(qū)的帶區(qū)大小。2025/2/31002.定義報表頁面和報表變量(續(xù))3)放置控件。向標題帶區(qū)放置圖片和標題文字等控件。在本例中,分別向標題帶區(qū)放一圖片和標題文字,并在細節(jié)區(qū)上下畫一條直線以分離記錄。4)報表預覽。單擊報表預
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業(yè)基金考試題及答案
- 醫(yī)學檢測面試題及答案
- 鄉(xiāng)鎮(zhèn)農業(yè)中心工作總結
- 小學音樂減負的工作總結
- 山東平陰一中2026屆化學高二第一學期期中聯(lián)考模擬試題含解析
- 河南省南陽市省示范性高中聯(lián)誼學校2026屆化學高三上期末達標測試試題含解析
- 知識題庫-電力安全工作規(guī)程考試題及答案(下)(變電檢修專業(yè))
- 2020-2025年公用設備工程師之專業(yè)基礎知識(暖通空調+動力)題庫檢測試卷A卷附答案
- 2025年二級建造師之二建建設工程施工管理每日一練試卷A卷含答案
- 保安隊員急救知識培訓課件
- 醫(yī)院課件:《老年綜合評估》
- 網絡技術基礎知識單選題100道及答案
- 人力資源和社會保障局公務員考試真題及參考答案(滿分必刷)
- 江蘇無錫歷年中考作文題與審題指導(2002-2024)
- 2025年上半年北京廣播電視臺招聘140人筆試易考易錯模擬試題(共500題)試卷后附參考答案
- 《慢性阻塞性肺疾病與肺源性心臟病》課件
- 化工廠班組員工安全活動
- 酒店客房驗收工程項目檢查表
- RFID固定資產管理系統(tǒng)解決方案文檔
- 吉蘭巴雷綜合征病人的護理
- 《英語句子成分》課件
評論
0/150
提交評論