最新-第2章_數(shù)據(jù)查詢與統(tǒng)計-PPT課件_第1頁
最新-第2章_數(shù)據(jù)查詢與統(tǒng)計-PPT課件_第2頁
最新-第2章_數(shù)據(jù)查詢與統(tǒng)計-PPT課件_第3頁
最新-第2章_數(shù)據(jù)查詢與統(tǒng)計-PPT課件_第4頁
最新-第2章_數(shù)據(jù)查詢與統(tǒng)計-PPT課件_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、上一次課講到創(chuàng)建數(shù)據(jù)庫、使用命令顯示與操作記錄、創(chuàng)建與使用可視類、使用表格顯示與操作記錄、使用TreeView控件顯示記錄、表單之間傳遞數(shù)據(jù)。請同學們回顧這樣兩個問題:數(shù)據(jù)庫表結(jié)構(gòu)中項目組成?2.如何添加、編輯自定義方法?1.字段名稱、類型、寬度、小數(shù)位數(shù)、索引方式;2.字段格式、輸入掩碼、標題;3.字段有效性規(guī)則;4.字段注釋。添加方法:菜單:表單/新建屬性/輸入上面的屬性名/添加建立以后,可以通過“菜單:表單/編輯屬性/方法程序”進行編輯。對表單對象新建方法程序內(nèi)容的編輯與對象事件過程編輯相同。上一次課主要學習的內(nèi)容本章主要介紹VFP中的數(shù)據(jù)查詢命令,SQL查詢語句,在表單中定位記錄,過濾

2、記錄以及數(shù)據(jù)統(tǒng)計。第2章.數(shù)據(jù)查詢與統(tǒng)計VFP中數(shù)據(jù)查詢命令分類:VFP中數(shù)據(jù)查詢命令可以分為順序查詢、索引查詢和過濾記錄3種。2.1數(shù)據(jù)查詢命令格式:LOCATE FOR 格式:CONTINUE功能: 定位到第一個符合條件的記錄位置, CONTINUE定位下一個符合條件的記錄 注意:該命令只能在當前工作區(qū)查詢。2.1.1順序查詢在下列示例中,定位德國顧客的記錄,然后顯示總數(shù)。CLOSE DATABASESOPEN DATABASE (HOME(2) + Datatestdata)USE customer & 打開 customer 表SET TALK OFFSTORE 0 TO gnCoun

3、tLOCATE FOR ALLTRIM(UPPER(customer.country) = GERMANY DO WHILE FOUND() gnCount = gnCount + 1 ? company CONTINUEENDDO? 總的德國客戶數(shù): + LTRIM(STR(gnCount).Locate例 命令格式:SEEK 功能:SEEK 在一個表中搜索首次出現(xiàn)的一個記錄,這個記錄的索引關(guān)鍵字必須與指定的表達式匹配。2.1.2索引查詢完整的命令格式:SEEK eExpression ORDER nIndexNumber | IDXIndexFileName | TAG TagName O

4、F CDXFileName ASCENDING | DESCENDING IN nWorkArea | cTableAlias說明:只能在索引過的表中使用 seek 命令,并且只能搜索索引關(guān)鍵字。除非 SET EXACT 的設(shè)置為 OFF ,否則匹配指的是完全匹配。如果 SEEK 找到了與索引關(guān)鍵字相匹配的記錄,則 RECNO( ) 返回匹配記錄的記錄號;FOUND( ) 返回“真”(.T.);EOF( ) 返回“假”(.F.)。如果找不到相匹配的關(guān)鍵字,則 RECNO( ) 將表中記錄的個數(shù)加 1,然后返回;FOUND( ) 返回“假”(.F.);EOF( ) 返回“真”(.T.)。如果 S

5、ET NEAR 設(shè)置為 ON ,則記錄指針指向與索引關(guān)鍵字最相匹配的那個記錄的后面一個記錄。如果 SET NEAR 設(shè)置為 OFF,則記錄指針指向文件的結(jié)尾。在這兩種情況下,RECNO(0) 都返回與關(guān)鍵字最匹配的記錄號。CLOSE DATABASESOPEN DATABASE (HOME(2) + Datatestdata)USE customer ORDER company & 打開 Customer 表SET EXACT OFFSTORE B TO gcSeekValSEEK gcSeekValIF FOUND() DISPLAY FIELDS company, contactENDIF

6、示例中,先打開 customer 表,并按 company 字段建立索引。然后,用 seek 命令查找與內(nèi)存變量 gcseekval 的值相匹配的索引關(guān)鍵字表達式。.Seek例 VFP記錄過濾是從邏輯上過濾掉不符合條件的記錄,不真正刪除。記錄過濾可以將不需要的記錄屏蔽掉。命令格式:SET FILTER TO 表達式 IN 區(qū)號 | 別名功能:指定訪問當前表中記錄時必須滿足的條件。表達式-指定記錄必須滿足的條件。 IN 區(qū)號 | 別名指定受 SET FILTER 命令影響的工作區(qū)或表別名。用該子句來指定一個當前工作區(qū)以外的工作區(qū)或表。關(guān)閉過濾功能命令:SET FILTER TO說明:該命令對Se

7、lect-SQL不起作用。函數(shù)FILTER(IN 區(qū)號 | 別名)返回 SET FILTER 命令中指定的表篩選表達式。2.1.3記錄過濾CLOSE DATABASESOPEN DATABASE (HOME(2) + Datatestdata)USE customer & 打開 Customer 表SET TALK ONSET FILTER TO SUBSTR(cust_id,1) = BCLEAR? FILTER() & 顯示 filter expressionSTORE FILTER(customer) TO gcOldFilter & Save filter expressionSET

8、FILTER TO country = USA? FILTER() & 顯示 filter expressionSET FILTER TO &gcOldFilter & Restore filter expression? FILTER() & 顯示 filter expressionLIST FIELDS cust_id, contact & Demonstrate filter condition.Set Filter例VFP支持SQL語句,可以從一個或多個表中檢索數(shù)據(jù)。SELECT SQL 命令是與其它 VFP 一樣的內(nèi)置的 VFP 命令。當你使用 SELECT 來生成查詢時, VFP翻

9、譯查詢并從表中獲取指定數(shù)據(jù)。你可以從以下地方創(chuàng)建 SELECT 查詢: “命令”窗口中 帶有其它任何 VFP 命令的 VFP 程序中 查詢設(shè)計器中 2.2查詢操作 SELECTALL|DISTINCT & ALL默認設(shè)置,結(jié)果包含所有行 | 剔除重復的行。TOP PERCENT&符合條件記錄中,取指定數(shù)量或百分比的記錄。該子句要求先ORDER BY。包含 PERCENT 關(guān)鍵字時,取值范圍0.01到99.99 AS , AS &限定匹配項的名稱, 檢索項應該是FROM 子句所包含的表中的字段名稱 或 一個常量,查詢結(jié)果中每一行都出現(xiàn)這個常量值 或 一個表達式,可以是用戶自定義函數(shù)名。指定各項均

10、生成一列。如果多項同名, 在項名前包含表別名和一個句點來避免列重復?!?.Select-SQL格式-1/6“AS ”為查詢輸出中的列指定顯示名, 下列字段函數(shù)可以與選定項一起使用,選定項可以是一個字段或包含字段的表達式: AVG(檢索項), 計算列中數(shù)值的平均值。 COUNT(檢索項), 計算列中選定項的數(shù)目。計算查詢輸出的行數(shù)。COUNT(*) 計算查詢輸出中的行數(shù)。 MIN(檢索項), 確定列中檢索項的最小值。 MAX(檢索項), 確定列中檢索項的最大值。 SUM(檢索項), 計算列中數(shù)值的和。.Select-SQL格式-2/6FROM ! AS&列出所有從中檢索數(shù)據(jù)的表。AS ,為表指定

11、一個臨時名稱。INTO |TO FILE|TO PRINTER|TO SCREEN& 指定在何處保存查詢結(jié)果。:ARRAY 數(shù)組名 | CURSOR 臨時表名 | DBF/TABLE 表名 缺省輸出到瀏覽窗口。.Select-SQL格式-3/6WHERE AND AND|OR AND|OR & 指定查詢條件/表間聯(lián)接條件,可以是關(guān)系表達式/邏輯 表達式,也可以是:FieldName NOT BETWEEN Start_Range AND End_Range檢查是否字段值在指定的范圍內(nèi)。FieldName NOT LIKE cExpression搜索匹配 cExpression 的各字段。可以用

12、百分號 (%) 和下劃線 (_) 通配符作為 cExpression 的一部分。百分號代表串中任何長度的不知道的字符。下劃線代表串中的單個的不知道的字符。.Select-SQL格式-4/6FieldName NOT IN (Subquery)在記錄出現(xiàn)在查詢結(jié)果中之前字段必須包含一個由子查詢返回的值。GROUP BY ,HAVING &指定分組輸出及輸出條件HAVING應出現(xiàn)在INTO前。.Select-SQL格式-5/6UNION ALL SELECT語句&把一個 SELECT 語句的最后查詢結(jié)果同另一個 SELECT 語句最后查詢結(jié)果組合起來。默認情況下,UNION 檢查組合的結(jié)果并排除重

13、復的行。要組合多個UNION 子句,可使用括號??梢杂?UNION 子句模擬一個外部聯(lián)接。ALL 防止 UNION 刪除組合結(jié)果中重復的行。ORDER BY ASC|DESC,ORDER BY ASC|DESC&查詢結(jié)果排序輸出.Select-SQL格式-6/6顯示customer 表中所有的公司名稱(來自一個表的一個字段)。CLOSE ALLCLOSE DATABASESOPEN DATABASE (HOME(2) + datatestdata)SELECT customerpany ; FROM customer.Select-SQL示例1顯示兩個表中的三個字段的內(nèi)容并根據(jù) cust_id

14、 字段連接表。它使用兩個表的本地別名。CLOSE ALLCLOSE DATABASESOPEN DATABASE (HOME(2) + datatestdata)SELECT xpany, y.order_date, y.shipped_on ; FROM customer x ; INNER JOIN orders y ON x.cust_id = y.cust_id.Select-SQL示例2顯示在指定字段只有唯一數(shù)據(jù)的記錄。CLOSE ALLCLOSE DATABASESOPEN DATABASE (HOME(2) + datatestdata)SELECT DISTINCT xpany

15、, y.order_date,; y.shipped_on ; FROM customer x, orders y ; WHERE x.cust_id = y.cust_id.Select-SQL示例3以升序次序顯示 country、postalcode 和 company 字段。CLOSE ALL CLOSE DATABASES OPEN DATABASE (HOME(2) + datatestdata) SELECT country, postalcode, company ; FROM customer ; Order By country, postalcode, company.Se

16、lect-SQL示例4將來自兩個表的字段內(nèi)容存儲在第三個表中。CLOSE ALLCLOSE DATABASESOPEN DATABASE (HOME(2) + datatestdata)SELECT xpany, y.order_date, y.shipped_on ; FROM customer x, orders y ; WHERE x.cust_id = y.cust_id ; INTO TABLE custship.dbfBROWSE.Select-SQL示例5顯示訂單 (order) 日期早于 2019 年 9 月 16 日的記錄。CLOSE ALL CLOSE DATABASES

17、OPEN DATABASE (HOME(2) + datatestdata) SELECT xpany, y.order_date, y.shipped_on ; FROM customer x, orders y ; WHERE x.cust_id = y.cust_id ; AND y.order_date 2019-09-16.Select-SQL示例6顯示訂貨日期早于 09/16/2019 的所有客戶。CLOSE ALLCLOSE DATABASESOPEN DATABASE (HOME(2) + datatestdata)SELECT xpany, y.order_date, y.s

18、hipped_on ; FROM customer x ; LEFT JOIN orders y ; ON x.cust_id = y.cust_id ; AND y.order_date 2019-09-16.Select-SQL示例7顯示 customer 表中郵政編碼與 orders 表的郵政編碼相匹配的所有公司名。CLOSE ALLCLOSE DATABASESOPEN DATABASE (HOME(2) + datatestdata)SELECT company FROM customer x WHERE ; EXISTS ; (SELECT * FROM orders y ; WH

19、ERE x.postalcode = y.postalcode).Select-SQL示例8在VFP中,可以使用Loacte命令查找表中任意字段(備注型和通用型除外)并進行定位。 下面以“輸入查詢條件”為例介紹VFP如何查找并定位記錄。2.3定位記錄在項目管理器中建立“輸入查詢條件”表單,表單名稱為:trainprjser,在表單中添加2個標簽、1個組合框、1個文本框、2個MyCmd類對象。該表單被用于其他表單中,所以不需要單獨定義數(shù)據(jù)環(huán)境.2.3.1創(chuàng)建表單AutoCenter=.T.BorderStyle=2-固定對話框Caption=輸入查詢條件Closable=.F.Height=90

20、Width=250Icon=people.icoMDIForm=.T.MaxButton=.F.MinButton=.F.ShowTips=.T.ShowWindow=1-在頂層表單中WindowType=1-模式 Name=TrainPrjSer組合框FindType.RowSource=項目編號,項目主題,培訓人RowSourceType=1-值Style=2-下拉列表框文本框FindKey.FontSize=12Height=25按鈕CmdOk.Caption=確定Default=.T.ToolTipText=開始查找定位按鈕CmdCcl. Caption=取消Cancel=.T.Too

21、lTipText=取消查找.表單及控件屬性*聲明本地變量LOCAL FindStr, oldRecord*保存記錄指針位置oldRecord = RECNO()*模糊比較SET EXACT OFF*根據(jù)查詢類型生成查詢條件DO CASE *以項目編號查詢 CASE THISFORM.FindType.Value = 1 FindStr=+ALLTRIM(THISFORM.FindKey.Value)+$ 項目編號2.3.2添加代碼確定鈕CmdOk.Click-1/5 CASE THISFORM.FindType.Value = 2FindStr=+ALLTRIM(THISFORM.FindKe

22、y.Value)+$ 培訓主題*以培訓人查詢 CASE THISFORM.FindType.Value = 3 FindStr=+ALLTRIM(THISFORM.FindKey.Value)+$ 培訓人ENDCASE*進行查詢SELECT TrainPrj*過濾記錄SET FILTER TO &FindStrGO TOPCmdOk.Click-2/5*循環(huán)詢問用戶DO WHILE .NOT. EOF() *更新主表單畫面 TrainPrj.REFRESH *將本表單最小化 THISFORM.WINDOWSTATE=1 *詢問用戶 IF MESSAGEBOX(是本筆記錄嗎,4+32,人力資源管

23、理系統(tǒng)) = 6 *退出循環(huán)EXITCmdOk.Click-3/5*如果用戶選擇“否” ELSE *下移記錄指針并刷新表單SKIPTrainPrj.REFRESH ENDIF *將本表單還原 THISFORM.WINDOWSTATE = 0ENDDOCmdOk.Click-4/5*到了表的末尾并且未找到記錄IF EOF()MESSAGEBOX(未找到指定的記錄, 16, 人力資源管理系統(tǒng))*回到原記錄GO oldRecordENDIF*清除過濾條件SET FILTER TOTrainPrj.REFRESHTHISFORM.RELEASECmdOk.Click-5/5ThisForm.Relea

24、se取消鈕CmdCcl.ClickVFP提供了簡單的統(tǒng)計命令,也可以根據(jù)統(tǒng)計創(chuàng)建圖表。2.4數(shù)據(jù)統(tǒng)計VFP提供了5個統(tǒng)計命令:Count、Sum、Average、CalCulate、Total。2.4.1數(shù)據(jù)統(tǒng)計命令命令格式:COUNT FOR/WHILE TO 功能:統(tǒng)計表中記錄數(shù)目。說明:COUNT 在 FOR 或 WHILE 條件為“真”時,對一定范圍內(nèi)的記錄進行計數(shù)。如果 SET TALK 是 ON,則顯示記錄的數(shù)目。如果 SET DELETE 是 OFF,則帶有刪除標記的記錄也包括在計數(shù)中。1.計數(shù)命令下面的示例統(tǒng)計并顯示在巴黎的顧客數(shù)目。CLOSE DATABASESOPEN DA

25、TABASE (HOME(2) + Datatestdata)USE customer & 打開 Customer 表CLEARCOUNT FOR UPPER(city) = PARISDISPLAY FIELDS company, contact FOR UPPER(city) = PARIS.Count示例格式:SUM 表達式列表 范圍 FOR/ WHILE 條件 TO 內(nèi)存變量表 | TO ARRAY 數(shù)組名功能:對當前選定表的指定數(shù)值字段或全部數(shù)值字段進行求和。2.求和命令下面的示例顯示 products 表中的 in_stock 字段和 on_order 字段的總計,以及這兩個總計的

26、和。CLOSE DATABASESOPEN DATABASE (HOME(2) + datatestdata)USE products & 打開 Products 表SUM in_stock, on_order, in_stock+on_order ; TO gnInStock, gnOnOrder, gnUnitsCLEAR? 庫存總數(shù) : , gnInStock & 顯示 3119.00? 訂貨總數(shù) : , gnOnOrder & 顯示 780.00? 總單位 : , gnUnits & 顯示 3899.00.Sum示例 格式:AVERAGE 表達式列表 范圍 FOR/WHILE 條件 T

27、O 變量列表 | TO ARRAY 數(shù)組名功能:計算數(shù)值表達式或字段的算術(shù)平均值。說明:除非包含可選的表達式列表,否則選定表的所有字段都將參與求平均值的運算。如果 SET TALK 為 ON,結(jié)果顯示在屏幕上。如果 SET HEADINGS 為 ON,字段名或包括字段名的表達式將顯示在結(jié)果的上面。3.求平均值CLOSE DATABASESOPEN DATABASE (HOME(2) + Datatestdata)USE orders & 打開 order 表CLEARAVERAGE Order_Amt & 計算所有訂單的平均值A(chǔ)VERAGE Order_Amt TO gnAvg & 保存平均值

28、到內(nèi)存變量? 平均訂貨數(shù): ? gnAvg & 再次顯示平均值.Average示例格式:TOTAL ON TO FOR/WHILE FIELDS 功能:計算當前選定表中數(shù)值字段的總和。4.分組匯總命令要使用此命令,當前工作區(qū)中的表必須經(jīng)過排序或索引。對于具有相同字段值或索引關(guān)鍵字值的各組記錄,將分別計算其總計值??傆嫿Y(jié)果放入另一個表的記錄中,同時在此表中還將對這些字段值或索引關(guān)鍵字值創(chuàng)建一條記錄。如果第二個表中數(shù)值字段的寬度不足以放置總計值,將會發(fā)生數(shù)值溢出錯誤。當發(fā)生數(shù)值溢出錯誤時,Visual FoxPro 保存總計值最主要的部分: *小數(shù)位被截斷,即對總計值余下小數(shù)位進行圓整。 *如果總

29、計值仍然不能放下,如包含七位以上的數(shù)字,這時將采用科學計數(shù)法表示。 *最后,用星號代替字段的內(nèi)容。.Total命令使用說明AcademyCount視圖對員工信息表中各學歷人數(shù)進行了分組統(tǒng)計,其統(tǒng)計結(jié)果是以表的形式顯示的,在VFP中可以使用MicroSoft Graph將表形式的統(tǒng)計結(jié)果變?yōu)閳D表形式顯示。MicroSoft Graph包含2個對象,數(shù)據(jù)表DadaSheet和圖表Chart,Chart結(jié)果基于DadaSheet。 以下介紹以圖表形式顯示員工信息表中各學歷人數(shù)統(tǒng)計結(jié)果。2.4.2創(chuàng)建統(tǒng)計圖表新建1個表,命名為Chart,該表中包含1個通用型字段。.創(chuàng)建表新建1個表單:ChartGra

30、ph,將表Chart添加到數(shù)據(jù)環(huán)境中。在表單中添加1個Active綁定控件:ChartGraph調(diào)整其大小,使其能顯示整個圖表。.創(chuàng)建表單*回車換行符#DEFINE CRLF CHR(13) + CHR(10)*TAB鍵#DEFINE TAB CHR(9)*運行查詢DO AGStat.qpr.表單Init代碼-1/6LOCAl lcData*讀取學歷名稱作為橫坐標lcData = + TAB + 男 + TAB + 女 + CRLFSELECT AGStatGO TOPSCAN lcData = lcData + ALLTRIM(學歷) + TAB +; ALLTRIM(STR(男) + TAB + ALLTRIM(STR(女) + CRLFENDSCAN.表單Init代碼-2/6*將字符串生成的Chart對象保存通用型字段中IF !USED(Chart)USE DATA/ChartENDIFSELECT ChartAPPEND GENERAL 學歷統(tǒng)計 DATA lcData CLASS MSGRAPH.CHART*設(shè)置OLE綁定控件的數(shù)據(jù)源為通用型字段THISFORM.ChartGr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論