第09章數(shù)據(jù)庫(kù)應(yīng)用程序開發(fā)詳版課資
《第09章數(shù)據(jù)庫(kù)應(yīng)用程序開發(fā)詳版課資》由會(huì)員分享,可在線閱讀,更多相關(guān)《第09章數(shù)據(jù)庫(kù)應(yīng)用程序開發(fā)詳版課資(96頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、Delphi實(shí)用教程實(shí)用教程第第9章章 數(shù)據(jù)庫(kù)應(yīng)用程序開發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序開發(fā) 1課堂優(yōu)質(zhì)9.1數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的開發(fā)過程數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的開發(fā)過程通常開發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序有以下三個(gè)階段:分析階段。明確應(yīng)用程序需做什么及需要什么數(shù)據(jù)、誰(shuí)將使用這些數(shù)據(jù)。設(shè)計(jì)階段。確定數(shù)據(jù)表的形式和所需的程序塊,編寫為了實(shí)現(xiàn)設(shè)計(jì)中的功能的程序代碼。維護(hù)階段。對(duì)應(yīng)用程序進(jìn)行維護(hù),根據(jù)用戶使用情況進(jìn)一步優(yōu)化應(yīng)用程序。利用Delphi進(jìn)行客戶機(jī)/服務(wù)器數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的開發(fā),通常按以下步驟進(jìn)行:系統(tǒng)總體設(shè)計(jì)與規(guī)劃。網(wǎng)絡(luò)和SQL服務(wù)器建設(shè)。數(shù)據(jù)庫(kù)設(shè)計(jì)。前端開發(fā)。調(diào)試與應(yīng)用程序的發(fā)布。 2課堂優(yōu)質(zhì)9.2 試題庫(kù)管理系統(tǒng)的設(shè)計(jì)實(shí)例試題
2、庫(kù)管理系統(tǒng)的設(shè)計(jì)實(shí)例 9.2.1 創(chuàng)建創(chuàng)建stkgl(試題庫(kù)管理)數(shù)據(jù)庫(kù)(試題庫(kù)管理)數(shù)據(jù)庫(kù) 創(chuàng)建包含試題信息表和試卷信息表,結(jié)構(gòu)分別如下兩表所示。 試題信息表(表名試題信息表(表名st) 3課堂優(yōu)質(zhì) 9.2.1 創(chuàng)建創(chuàng)建stkgl(試題庫(kù)管理)數(shù)據(jù)庫(kù)(試題庫(kù)管理)數(shù)據(jù)庫(kù) 試卷信息表(表名試卷信息表(表名sj) 4課堂優(yōu)質(zhì)9.2.2建立存儲(chǔ)過程建立存儲(chǔ)過程 編寫試題庫(kù)管理系統(tǒng)中使用的試卷生成存儲(chǔ)過程。 思路: 根據(jù)試卷信息表(sj)的試卷編號(hào)(sjbh),查找到相應(yīng)記 錄的試卷內(nèi)容。根據(jù)試卷內(nèi)容(sjnr),創(chuàng)建一個(gè)新的試卷 表(paper)。試卷表(paper)包含兩個(gè)字段:題型代碼 (tx
3、dm)和題目?jī)?nèi)容(tmnr)。代碼如下: 5課堂優(yōu)質(zhì)9.2.2建立存儲(chǔ)過程建立存儲(chǔ)過程CREATE PROCEDURE sjscsjbh tinyint ASDROP TABLE paper;CREATETABLE paper(txdm tinyint,tmnr text);DECLARE i int;SET i=-3;WHILE i”按鈕。 16課堂優(yōu)質(zhì)9.2.4 C/S數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì) 第三,選擇連接屬性,這個(gè)界面上要求選擇的內(nèi)容較多。 需根據(jù)SQL Server數(shù)據(jù)服務(wù)器的設(shè)置來定。本例中按以下 步驟進(jìn)行設(shè)置: (1)單擊“選擇或輸入服務(wù)器名稱”下拉列表框的下拉按鈕,
4、顯 示當(dāng)前系統(tǒng)可以訪問的SQL服務(wù)器的列表,選擇其中的一 個(gè),單擊“Refresh”按鈕,獲得最新的SQL服務(wù)器列表。本 例SQL服務(wù)器名為cjhdb,如圖所示。17課堂優(yōu)質(zhì)9.2.4 C/S數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì) (2)在“登錄服務(wù)器的信息”中,輸入相應(yīng)SQL Server數(shù)據(jù)服務(wù)器的登錄信息。本例以系統(tǒng)管理員sa身份登錄計(jì)算機(jī)。 (3)選中“選擇數(shù)據(jù)庫(kù)”單選框,單擊其列表框的下拉按鈕,如果在第(2)步輸入的登錄信息正確,則會(huì)顯示在第1步選擇的SQL Server數(shù)據(jù)服務(wù)器中數(shù)據(jù)庫(kù)的列表,否則系統(tǒng)就會(huì)顯示出錯(cuò)提示。設(shè)置完后,單擊“Test Connection”按鈕測(cè)試輸入的登
5、錄信息是否正確。 (4)單擊“確定”按鈕,連接字符串設(shè)置完畢(如圖)。單擊OK 按鈕返回。 18課堂優(yōu)質(zhì)9.2.4 C/S數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)3. 主窗體設(shè)計(jì)主窗體設(shè)計(jì) 試題庫(kù)管理系統(tǒng)具有試題維護(hù)、試卷生成和維護(hù)等功能,設(shè)計(jì)的主界面如圖所示。試題庫(kù)管理系統(tǒng)主窗體所包含的組件及其屬性值列于表中 試題庫(kù)管理系統(tǒng)主窗體試題庫(kù)管理系統(tǒng)主窗體 試題庫(kù)管理系統(tǒng)主窗體和組件對(duì)象屬性表試題庫(kù)管理系統(tǒng)主窗體和組件對(duì)象屬性表 19課堂優(yōu)質(zhì)9.2.4 C/S數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)程序代碼如下程序代碼如下:/ 引用stwh, sjwh, sjsc三個(gè)單元。/ 可以手工寫入,也可以在完成模
6、塊單元后,使用File-Use Unit命令。uses stwh, sjwh, sjsc;/ 按鈕BtnSTWH的OnClick事件代碼,用于調(diào)用“試題維護(hù)”窗體。/ 其它兩個(gè)按鈕BtnSJWH、BtnSJSC的OnClick事件代碼與它類似。procedure TFrmMain.BtnSTWHClick(Sender: TObject);begin FrmSTWH.ShowModal;end;保存該單元為main,保存項(xiàng)目為StkPrj。 20課堂優(yōu)質(zhì)9.2.4 C/S數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)4. 試題維護(hù)窗體試題維護(hù)窗體 試題維護(hù)窗體主要用于試題和答案的輸入和修改,其界面如圖所
7、示,試題維護(hù)窗體所包含的組件及其屬性值列于表中。在程序的實(shí)現(xiàn)部分要引用數(shù)據(jù)模塊單元DMUSTK,即使用語(yǔ)句:uses DMUSTK; 試題維護(hù)窗體試題維護(hù)窗體 試題維護(hù)窗體和組件對(duì)象屬性表試題維護(hù)窗體和組件對(duì)象屬性表 通過從數(shù)據(jù)模塊DMStk中拖拽永久字段TabSTtmnr、TabSTckda獲得21課堂優(yōu)質(zhì)9.2.4 C/S數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)5. 試卷維護(hù)窗體試卷維護(hù)窗體 試卷維護(hù)窗體主要用于試卷內(nèi)容和評(píng)價(jià)等信息的輸入和修改,其界面如圖所示。其中的組件對(duì)象屬性表及源程序與試題維護(hù)窗體及程序類似。 試題維護(hù)窗體試題維護(hù)窗體 通過從數(shù)據(jù)模塊DMStk中拖拽永久字段DSetSJs
8、jnr、DSetSJjspj獲得 試卷內(nèi)容為三位數(shù),以逗號(hào)分開 22課堂優(yōu)質(zhì)9.2.4 C/S數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)6. 試卷生成窗體試卷生成窗體 試卷生成窗體主要用于顯示試卷內(nèi)容,其界面及結(jié)構(gòu)分別如圖所示,該窗體所包含的組件及其屬性見下表。 試卷生成窗體試卷生成窗體 窗體結(jié)構(gòu)窗體結(jié)構(gòu) 23課堂優(yōu)質(zhì)9.2.4 C/S數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)試卷生成窗體和組件對(duì)象屬性表 24課堂優(yōu)質(zhì)9.2.4 C/S數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)程序代碼如下:/ 在程序的實(shí)現(xiàn)部分引入以下三個(gè)單元uses DMUStk, dysj, DMUStkDy;/ 窗體FrmSJSC的OnH
9、ide事件代碼。procedure TFrmSJSC.FormHide(Sender: TObject);begin DMSTK.QryTMNR.Active:=false; MenSJ.Lines.Clear;end;25課堂優(yōu)質(zhì)9.2.4 C/S數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)/ 菜單項(xiàng)MIDY的OnClick事件代碼。用于打印試卷。procedure TFrmSJSC.MIDYClick(Sender: TObject);begin 重新打開數(shù)據(jù)集,獲得最新的數(shù)據(jù)。這里只列出了QryXZ組件的代碼,其它的組件QryTK、QryPD、QryJD、QryJS、QryLS、QryWD、Qr
10、yBC的代碼從略。 DMStkDy.QryXZ.Active:=false; DMStkDy.QryXZ.Active:=true; . / 下面四條語(yǔ)句根據(jù)試卷編號(hào),獲得試卷名。/ 用于在打印出的試卷卷頭中加入試卷名。 DMStkDy.QrySJM.Close; DMStkDy.QrySJM.Parameters.ParamByName(bh).Value:=strtoint(EdtSJBH.Text); DMStkDy.QrySJM.Open; FrmDY.RvProSJ.Execute; /打印試卷end;26課堂優(yōu)質(zhì)9.2.4 C/S數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)/ 菜單項(xiàng)MIE
11、xit的OnClick事件代碼。procedure TFrmSJSC.MIExitClick(Sender: TObject);begin FrmDY.Close;end;27課堂優(yōu)質(zhì)9.2.4 C/S數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)/ 按鈕BtnSJSC的OnClick代碼。調(diào)用存儲(chǔ)過程。procedure TFrmSJSC.BtnSJSCClick(Sender: TObject);begin MenSJ.Lines.Clear; / 執(zhí)行存儲(chǔ)過程,按試卷編號(hào)生成試卷。 DMSTK.SPSJSC.Parameters1.Value:=strtoint(EdtSJBH.Text); DM
12、STK.SPSJSC.ExecProc; DMSTK.QryTMNR.Close; DMSTK.QryTMNR.Open;with DMSTK do/ 在 Memo1中顯示試卷內(nèi)容 begin QryTMNR.Active:=true; QryTMNR.First; while not QryTMNR.Eof do begin MenSJ.Lines.Append(QryTMNRtmnr.AsString); QryTMNR.Next end; end;end;28課堂優(yōu)質(zhì)9.2.4 C/S數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)試題庫(kù)管理系統(tǒng)的主要窗體都已設(shè)計(jì)完成,只有與打印相關(guān)的數(shù)據(jù)模塊DMS
13、tkDy和試卷打印窗體FrmDy尚未設(shè)計(jì),將在9.4節(jié)討論。程序的運(yùn)行結(jié)果如圖所示。 29課堂優(yōu)質(zhì)9.2.4 C/S數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)6. 使用項(xiàng)目管理器對(duì)項(xiàng)目使用項(xiàng)目管理器對(duì)項(xiàng)目StkPrj進(jìn)行管理進(jìn)行管理(1)選擇主菜單下的FileOpen Project,打開項(xiàng)目StkPrj。(2)選擇主菜單下的ViewProject Manager菜單命令,彈出Project Manager對(duì)話框,如圖所示。通過項(xiàng)目管理器的樹狀結(jié)構(gòu)和彈出式菜單,可以很方便地管理項(xiàng)目StkPrj。 項(xiàng)目項(xiàng)目StkPrj 30課堂優(yōu)質(zhì)9.2.4 C/S數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)(3)選擇主菜單
14、下的ProjectOptions命令,彈出Project Options對(duì)話框,選擇Forms頁(yè)。Forms頁(yè)用來設(shè)置應(yīng)用程序的主窗體以及選擇哪些窗體被系統(tǒng)自動(dòng)創(chuàng)建、哪些窗體需用戶自己創(chuàng)建,項(xiàng)目StkPrj中的窗體如圖所示。 31課堂優(yōu)質(zhì)9.2.4 C/S數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)(4)選擇主菜單的ProjectViewView Source命令,打開當(dāng)前項(xiàng)目文件StkPrj,可以查看該項(xiàng)目的源代碼。下面的代碼是項(xiàng)目文件StkPrj中的內(nèi)容。program StkPrj;/ 項(xiàng)目文件StkPrjuses Forms, main in main.pas FrmMain, DMUStk
15、in DMUStk.pas DMSTK: TDataModule, stwh in stwh.pas FrmSTWH, sjwh in sjwh.pas FrmSJWH, sjsc in sjsc.pas FrmSJSC, dysj in dysj.pas FrmDY, DMUStkDy in DMUStkDy.pas DMStkDy: TDataModule;$R *.res 32課堂優(yōu)質(zhì)9.2.4 C/S數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)begin Application.Initialize; Application.CreateForm(TFrmMain, FrmMain); App
16、lication.CreateForm(TDMSTK, DMSTK); Application.CreateForm(TFrmSTWH,FrmSTWH); Application.CreateForm(TFrmSJWH,FrmSJWH); Application.CreateForm(TFrmSJSC, FrmSJSC); Application.CreateForm(TFrmDY, FrmDY); Application.CreateForm(TDMStkDy, DMStkDy); Application.Run; end.33課堂優(yōu)質(zhì)9.3三層結(jié)構(gòu)程序設(shè)計(jì)三層結(jié)構(gòu)程序設(shè)計(jì) 三層結(jié)構(gòu)指的是將
17、用戶界面、業(yè)務(wù)邏輯、數(shù)據(jù)管理三個(gè)層次部署在不同的位置上。用戶界面是客戶端桌面上實(shí)現(xiàn)的功能業(yè)務(wù)邏輯是在一個(gè)專門的應(yīng)用服務(wù)器上實(shí)現(xiàn)的功能數(shù)據(jù)管理是在一個(gè)專門的數(shù)據(jù)庫(kù)服務(wù)器上實(shí)現(xiàn)的功能三層結(jié)構(gòu)的優(yōu)勢(shì):瘦客戶端結(jié)構(gòu) 業(yè)務(wù)邏輯的集中封裝 集中的資源管理 34課堂優(yōu)質(zhì)9.3.1 基于基于DataSnap的三層數(shù)據(jù)庫(kù)應(yīng)用概述的三層數(shù)據(jù)庫(kù)應(yīng)用概述 基于DataSnap的三層數(shù)據(jù)庫(kù)圖 :三層數(shù)據(jù)庫(kù)應(yīng)用的結(jié)構(gòu)(基于三層數(shù)據(jù)庫(kù)應(yīng)用的結(jié)構(gòu)(基于BDE) 三層數(shù)據(jù)庫(kù)應(yīng)用的結(jié)構(gòu)(基于三層數(shù)據(jù)庫(kù)應(yīng)用的結(jié)構(gòu)(基于ADO) 35課堂優(yōu)質(zhì)9.3.1 基于基于DataSnap的三層數(shù)據(jù)庫(kù)應(yīng)用概述的三層數(shù)據(jù)庫(kù)應(yīng)用概述從圖中可見三層數(shù)
18、據(jù)庫(kù)應(yīng)用的結(jié)構(gòu)與兩層結(jié)構(gòu)的區(qū)別在于:把原來集中在一臺(tái)機(jī)器上的數(shù)據(jù)源和數(shù)據(jù)集組件分別放于網(wǎng)絡(luò)中不同的機(jī)器上(有時(shí)也存放在一臺(tái)物理機(jī)器上,但邏輯上仍屬于三層結(jié)構(gòu)),通過在應(yīng)用服務(wù)器端增加供應(yīng)器,在客戶端增加連接組件和客戶端數(shù)據(jù)集,使兩者聯(lián)系起來。在一個(gè)三層應(yīng)用中,客戶端通過應(yīng)用服務(wù)器得到數(shù)據(jù)和進(jìn)行數(shù)據(jù)更新的過程,通常按照如下順序和方式實(shí)現(xiàn): (1)用戶啟動(dòng)客戶端應(yīng)用??蛻舳诉B接到應(yīng)用服務(wù)器(可以在 設(shè)計(jì)時(shí)或者運(yùn)行時(shí)指定)。如果應(yīng)用服務(wù)器尚未運(yùn)行,它 將被啟動(dòng)。(2)客戶端從應(yīng)用服務(wù)器請(qǐng)求數(shù)據(jù)。(3)應(yīng)用服務(wù)器從數(shù)據(jù)庫(kù)服務(wù)器獲取數(shù)據(jù),為客戶端打包數(shù)據(jù), 返回一個(gè)數(shù)據(jù)包給客戶端。額外的信息(例如,字段
19、顯示 特性),可以被包含在數(shù)據(jù)包的元數(shù)據(jù)中。這個(gè)將數(shù)據(jù)打 包的過程叫做“供應(yīng)(providing)”。(4)客戶端解開數(shù)據(jù)包,顯示數(shù)據(jù)給用戶。 36課堂優(yōu)質(zhì)9.3.1 基于基于DataSnap的三層數(shù)據(jù)庫(kù)應(yīng)用概述的三層數(shù)據(jù)庫(kù)應(yīng)用概述(5)當(dāng)用戶與客戶端程序交互時(shí),數(shù)據(jù)被更新(增加、刪除或 修改記錄)。這些改動(dòng)被客戶端記錄在一個(gè)變更日志中。(6)客戶端向應(yīng)用服務(wù)器提請(qǐng)更新(Apply Updates),通常是 響應(yīng)用戶的一個(gè)操作。為了提請(qǐng)更新,客戶端將它的變更日 志打包并作為一個(gè)數(shù)據(jù)包發(fā)送給服務(wù)器。 (7)應(yīng)用服務(wù)器解開數(shù)據(jù)包,并向數(shù)據(jù)庫(kù)服務(wù)器遞交更新(Post Updates)(如果需要,在一
20、個(gè)事務(wù)的環(huán)境中)。如果一個(gè) 記錄不能被遞交(例如,由于另一個(gè)應(yīng)用在客戶端請(qǐng)求之 后、提請(qǐng)更新之前,改變了記錄),應(yīng)用服務(wù)器或者嘗試用 當(dāng)前數(shù)據(jù)調(diào)整(Reconcile)客戶端的改變,或者保存不能 被提交的記錄。這個(gè)提交記錄和緩存問題記錄的過程叫做 “解析(Resolving)”。 (8)當(dāng)應(yīng)用服務(wù)器完成解析過程,它返回沒有遞交的記錄給客 戶端,以供后來的進(jìn)一步解析。 (9)客戶端調(diào)整沒有解析的記錄。可以有多種方式,典型地, 客戶端嘗試更正阻礙記錄被遞交的情況,或放棄變化。如 果 錯(cuò)誤的情況可以被修正,客戶端再次提請(qǐng)更新。 (10)客戶端從服務(wù)器得到數(shù)據(jù)刷新自己。 37課堂優(yōu)質(zhì)9.3.1 基于基
21、于DataSnap的三層數(shù)據(jù)庫(kù)應(yīng)用概述的三層數(shù)據(jù)庫(kù)應(yīng)用概述DataSnap組件表組件表 供應(yīng)器和客戶端數(shù)據(jù)集組件需要midas.d11或midaslib.dcu,它們管理作為數(shù)據(jù)包存儲(chǔ)的數(shù)據(jù)集。由于供應(yīng)器是用在應(yīng)用服務(wù)器上,而客戶端數(shù)據(jù)集用在客戶端,所以如果使用midas.dll,則必須在應(yīng)用服務(wù)器和客戶端都要部署它。 38課堂優(yōu)質(zhì)9.4.2應(yīng)用服務(wù)器結(jié)構(gòu)應(yīng)用服務(wù)器結(jié)構(gòu) 應(yīng)用服務(wù)器的基礎(chǔ)是一個(gè)遠(yuǎn)程數(shù)據(jù)模塊(Remote Data Module),它是特殊的數(shù)據(jù)模塊,支持IAppServer接口。 在一個(gè)遠(yuǎn)程數(shù)據(jù)模塊中同樣包含一個(gè)或者多個(gè)數(shù)據(jù)集組件,來代表數(shù)據(jù)庫(kù)服務(wù)器上的記錄。同樣也包含某種數(shù)據(jù)
22、庫(kù)連接組件,用來讓數(shù)據(jù)集與數(shù)據(jù)庫(kù)服務(wù)器交互。 對(duì)于遠(yuǎn)程數(shù)據(jù)模塊公布給客戶端的每個(gè)數(shù)據(jù)集,必須有一個(gè)數(shù)據(jù)集供應(yīng)器(DataSet Provider)。 39課堂優(yōu)質(zhì)9.4.3客戶端應(yīng)用結(jié)構(gòu)客戶端應(yīng)用結(jié)構(gòu) 對(duì)于最終用戶,三層應(yīng)用中的客戶端與一個(gè)使用緩存更新的傳統(tǒng)兩層應(yīng)用看上去一樣。用戶的交互是通過標(biāo)準(zhǔn)的數(shù)據(jù)敏感組件,只是在這里,數(shù)據(jù)敏感組件從一個(gè)客戶端數(shù)據(jù)集組件(ClientDataSet)得到數(shù)據(jù)進(jìn)行顯示。連接組件建立連接到應(yīng)用服務(wù)器。通過一個(gè)連接組件,客戶端數(shù)據(jù)集從一個(gè)供應(yīng)器組件取回?cái)?shù)據(jù),并將更新提請(qǐng)給供應(yīng)器。有多種的連接組件,使用各自不同的通信協(xié)議。對(duì)應(yīng)于應(yīng)用服務(wù)器上的不同種類的遠(yuǎn)程數(shù)據(jù)模塊
23、,在客戶端需要使用不同種類的連接組件,如表所示。 40課堂優(yōu)質(zhì)9.4.4三層應(yīng)用開發(fā)三層應(yīng)用開發(fā) 開發(fā)三層數(shù)據(jù)庫(kù)應(yīng)用的主要工作過程如圖所示。 41課堂優(yōu)質(zhì)9.4.4三層應(yīng)用開發(fā)三層應(yīng)用開發(fā)下面建立一個(gè)三層數(shù)據(jù)庫(kù)應(yīng)用,包括一個(gè)應(yīng)用服務(wù)器stkServer和一個(gè)客戶端Client。應(yīng)用服務(wù)器實(shí)現(xiàn)與數(shù)據(jù)庫(kù)stkgl的連接。客戶端通過應(yīng)用服務(wù)器對(duì)數(shù)據(jù)庫(kù)中的試題表進(jìn)行修改。1. 建立應(yīng)用服務(wù)器并注冊(cè)建立應(yīng)用服務(wù)器并注冊(cè) 1)建立應(yīng)用服務(wù)器)建立應(yīng)用服務(wù)器 建立應(yīng)用服務(wù)器的步驟如下: (1)選擇菜單FileNew Application,新建一個(gè)應(yīng)用。 (2)選擇菜單FileNewOtherMultiti
24、erRemote Data Module,新建一個(gè)遠(yuǎn)程數(shù)據(jù)模塊(如圖),并設(shè)定類名RDMstk,其他取默認(rèn)值。 42課堂優(yōu)質(zhì)9.4.4三層應(yīng)用開發(fā)三層應(yīng)用開發(fā)(3)選擇一個(gè)ADOQuery組件,再?gòu)慕M件面板的Data Access頁(yè)選擇一個(gè)數(shù)據(jù)集供應(yīng)器組件 DatasetProvider,放入到遠(yuǎn)程數(shù)據(jù)模塊中遠(yuǎn) 程數(shù)據(jù)模 塊RDMstk所包含的組件及其屬性列于表中。 遠(yuǎn)程數(shù)據(jù)模塊遠(yuǎn)程數(shù)據(jù)模塊RDMstk的組件對(duì)象屬性表的組件對(duì)象屬性表 43課堂優(yōu)質(zhì)9.4.4三層應(yīng)用開發(fā)三層應(yīng)用開發(fā) (4)設(shè)計(jì)應(yīng)用服務(wù)器的主窗體。用于提示用戶應(yīng)用服務(wù)器已經(jīng)工作,如圖9.21所示,只需放入一個(gè)Label組件, 修
25、改其Caption為“正在運(yùn)行”。 (5)保存主窗體單元為stkServer,遠(yuǎn)程數(shù)據(jù)模塊為 RDMUstk,保存項(xiàng)目為stk3Prj。 服務(wù)器端程序主窗體服務(wù)器端程序主窗體 44課堂優(yōu)質(zhì)9.4.4三層應(yīng)用開發(fā)三層應(yīng)用開發(fā)2)注冊(cè)和運(yùn)行)注冊(cè)和運(yùn)行 (1) 選擇主菜單RunParameters,在Parameters欄中輸 入“/regserver”,如圖所示。(2) 選擇主菜單RunRun,運(yùn)行應(yīng)用服務(wù)器stk3Prj。 設(shè)置服務(wù)器運(yùn)行參數(shù)設(shè)置服務(wù)器運(yùn)行參數(shù) 45課堂優(yōu)質(zhì)9.4.4三層應(yīng)用開發(fā)三層應(yīng)用開發(fā)2. 建立客戶端應(yīng)用建立客戶端應(yīng)用 (1) 選擇主菜單FileNew Applicati
26、on,新建一個(gè)應(yīng)用。(2) 從DataSnap頁(yè),選擇一個(gè)DCOM連接組件DCOMConnection放 入到窗體中。通常要設(shè)置DCOMConnection組件的以下屬性: ComputerName屬性 該屬性表明應(yīng)用服務(wù)器所在的機(jī)器。若為空,表示應(yīng)用服務(wù)器與 客戶端應(yīng)用在同一臺(tái)機(jī)器。 ServerName屬性 該屬性指出應(yīng)用服務(wù)器的組件類 名字(即服務(wù)器注冊(cè)的名字)。 本例點(diǎn)擊ServerName屬性取值的 下拉列表,選擇stk3Prj。 DCOM連接組件連接組件 46課堂優(yōu)質(zhì)9.4.4三層應(yīng)用開發(fā)三層應(yīng)用開發(fā)(3) 從DataAccess頁(yè),選擇一個(gè)客戶端數(shù)據(jù)集組件ClientDataSe
27、t (命名為CDSStu),放入到窗體中。通常ClientDataSet組件需 設(shè)置的屬性有: RemoteServer屬性 用于指出DCOM連接。本例設(shè)置為為DCOMConStu。 ProviderName屬性 用于指出應(yīng)用服務(wù)器的數(shù)據(jù)集提供者。本例點(diǎn)擊屬性欄的 下拉列表,其中將有應(yīng)用服務(wù)器中的數(shù)據(jù)集供應(yīng)器的名 字DSProST,選中它,如圖所示。 47課堂優(yōu)質(zhì)9.4.4三層應(yīng)用開發(fā)三層應(yīng)用開發(fā)(4) 在窗體中放入其他相關(guān)的組件 48課堂優(yōu)質(zhì)9.4.4三層應(yīng)用開發(fā)三層應(yīng)用開發(fā)客戶端應(yīng)用程序所使用的窗體和組件及其屬性列于表中。 49課堂優(yōu)質(zhì)9.4.4三層應(yīng)用開發(fā)三層應(yīng)用開發(fā)客戶端程序代碼如下:
28、按鈕BtnXG的OnClick事件代碼:procedure TFrmClient.BtnXGClick(Sender: TObject);beginCDSStu.ApplyUpdates(-1);end;按鈕BtnSX的OnClick事件代碼 :procedure TFrmClient.BtnSXClick(Sender: TObject);begin CDSStu.Close; CDSStu.Open;end; 50課堂優(yōu)質(zhì)9.4.4三層應(yīng)用開發(fā)三層應(yīng)用開發(fā)按鈕BtnCX的OnClick事件代碼 :procedure TFrmClient.BtnCXClick(Sender: TObject
29、);begin CDSStu.UndoLastChange(true);end; 51課堂優(yōu)質(zhì)9.4.4三層應(yīng)用開發(fā)三層應(yīng)用開發(fā)3. 運(yùn)行程序運(yùn)行程序 可以試著同時(shí)運(yùn)行多個(gè)客戶端,連接到同一個(gè)應(yīng)用服務(wù)器,觀察它們共同工作的情形。如圖所示。 52課堂優(yōu)質(zhì)9.4 數(shù)據(jù)庫(kù)報(bào)表組件和報(bào)表設(shè)計(jì)器數(shù)據(jù)庫(kù)報(bào)表組件和報(bào)表設(shè)計(jì)器9.4.1建立第一份報(bào)表建立第一份報(bào)表 下面通過最少的步驟,為數(shù)據(jù)庫(kù)student中的表students建立第一份報(bào)表。 (1)運(yùn)行Delphi 7.0,創(chuàng)建一個(gè)新的應(yīng)用。(2)在窗體上放入數(shù)據(jù)集組件,如Table、Query或其它數(shù)據(jù)集組件。在本例中放入一個(gè)Table組件,并設(shè)置其Da
30、tabaseName為student,TableName為students,Name為TabStu,Active為true。 (3)在窗體上放入Rave頁(yè)中的RvDataSetConnection組件, 設(shè)置其DataSet屬性為第2步中創(chuàng)建的TabStu,Name屬性值為 StuCXN。 53課堂優(yōu)質(zhì)9.4.1建立第一份報(bào)表建立第一份報(bào)表(4)在窗體上放入Rave頁(yè)中的RvProject組件,窗體界 面如圖所示。雙擊該組件(或者右擊該組件,選擇 Rave Visual Designer菜單項(xiàng)),進(jìn)入Rave報(bào)表設(shè) 計(jì)器。 報(bào)表應(yīng)用程序主窗體報(bào)表應(yīng)用程序主窗體 54課堂優(yōu)質(zhì)9.4.1建立第一份
31、報(bào)表建立第一份報(bào)表報(bào)表設(shè)計(jì)器,其主界面如圖工具條工具條 屬性面板 頁(yè)設(shè)計(jì)器 項(xiàng)目樹 55課堂優(yōu)質(zhì)9.4.1建立第一份報(bào)表建立第一份報(bào)表(5)在Rave報(bào)表設(shè)計(jì)器的主菜單中選擇FileNew Data Object,打開“Data Connection”對(duì)話框,如圖所示。 選擇其中的Direct Data View項(xiàng),單擊Next按鈕,在 “Active Data Connections”列表框中選擇“StuCXN (DT)”項(xiàng),如圖所示,單擊OK按鈕。 選擇數(shù)據(jù)對(duì)象類型對(duì)話框選擇數(shù)據(jù)對(duì)象類型對(duì)話框 選擇活動(dòng)數(shù)據(jù)連接對(duì)話框選擇活動(dòng)數(shù)據(jù)連接對(duì)話框 56課堂優(yōu)質(zhì)9.4.1建立第一份報(bào)表建立第一份報(bào)表
32、(6)在項(xiàng)目樹(Project Tree,在報(bào)表設(shè)計(jì)器的右邊)中, 打開數(shù)據(jù)視圖條目(Data View Dictionary),選擇剛 被創(chuàng)立的DataView1,再使用屬性面板,重命名 DataView為DVStu,如圖所示 重命名重命名DataView1 57課堂優(yōu)質(zhì)9.4.1建立第一份報(bào)表建立第一份報(bào)表(7)創(chuàng)建報(bào)表。下面通過報(bào)表創(chuàng)建向?qū)韯?chuàng)建報(bào)表, 步驟是: 選擇報(bào)表設(shè)計(jì)器主菜單下的ToolsReport WizardsSimple Table,確保已選擇DVStu, 如圖所示,單擊Next按鈕。 58課堂優(yōu)質(zhì)9.4.1建立第一份報(bào)表建立第一份報(bào)表 將彈出如圖所示的選擇字段列表框,在
33、列表 框中選擇所有字段(單擊“All”按鈕),單擊Next。 59課堂優(yōu)質(zhì)9.4.1建立第一份報(bào)表建立第一份報(bào)表 進(jìn)入如圖所示的界面,可以改變報(bào)表字段的順序,單擊Next。 60課堂優(yōu)質(zhì)9.4.1建立第一份報(bào)表建立第一份報(bào)表 進(jìn)入如圖所示的界面,可以改變報(bào)表的標(biāo)題。本例中把標(biāo)題改為“學(xué)生情況表”后,單擊Next。 61課堂優(yōu)質(zhì)9.4.1建立第一份報(bào)表建立第一份報(bào)表 進(jìn)入如下左圖所示的界面,可以改變報(bào)表的字體。 最后,單擊“Generate”按鈕生成報(bào)表。查看頁(yè)面設(shè)計(jì)器中的內(nèi)容,如下右圖。 改變報(bào)表的字體改變報(bào)表的字體 頁(yè)面設(shè)計(jì)器頁(yè)面設(shè)計(jì)器 62課堂優(yōu)質(zhì)9.4.1建立第一份報(bào)表建立第一份報(bào)表(8
34、)預(yù)覽報(bào)表,單擊“Execute Report”,將出現(xiàn)“Output Option”對(duì)話框,選擇Preview,然后點(diǎn)擊OK按鈕,將 會(huì)看到生成報(bào)表的效果。如果所生成報(bào)表的效果不理 想,可以通過頁(yè)面設(shè)計(jì)器調(diào)整有關(guān)組件的位置。 OutputOption對(duì)話框?qū)υ捒?3課堂優(yōu)質(zhì)9.4.1建立第一份報(bào)表建立第一份報(bào)表運(yùn)行效果圖報(bào)表預(yù)覽報(bào)表預(yù)覽 64課堂優(yōu)質(zhì)9.4.1建立第一份報(bào)表建立第一份報(bào)表在報(bào)表中用到的一些技術(shù):在報(bào)表中用到的一些技術(shù):數(shù)據(jù)連接組件。在應(yīng)用程序所提供的數(shù)據(jù)和Rave組件之間提供了一個(gè)橋梁。RvProject組件。提供了一些重要的屬性和方法來創(chuàng)建報(bào)表。報(bào)表項(xiàng)目文件(.RAV文件)
35、。這種類型的文件用來存放報(bào)表,是一種二進(jìn)制文件,類似于Delphi的.DFM文件。報(bào)表(reports)。報(bào)表被存儲(chǔ)在報(bào)表庫(kù)中,報(bào)表由頁(yè)組成。根據(jù)需要一個(gè)報(bào)表可以包含多頁(yè)。 數(shù)據(jù)視圖(Data Views)。定義了從數(shù)據(jù)庫(kù)中獲得數(shù)據(jù)的方式。 65課堂優(yōu)質(zhì)9.4.2 數(shù)據(jù)庫(kù)報(bào)表組件數(shù)據(jù)庫(kù)報(bào)表組件 Rave頁(yè)報(bào)表組件圖:1.引擎類組件(引擎類組件(engine components)包括RvNDRWriter、RvSystem ,用以生成報(bào)表。2.格式轉(zhuǎn)換類組件格式轉(zhuǎn)換類組件(render components) 包括RvRenderPreview、RvRenderPrinter、RvRender
36、PDF、RvRenderHTML、RvRenderRTF和RvRenderText組件,可把NDR文件(Rave報(bào)表文件)或TRvNDRWriter生成的流轉(zhuǎn)換為PDF、HTML、RTF、TEXT等格式。 66課堂優(yōu)質(zhì)9.4.2 數(shù)據(jù)庫(kù)報(bào)表組件數(shù)據(jù)庫(kù)報(bào)表組件3. 數(shù)據(jù)連接組件數(shù)據(jù)連接組件數(shù)據(jù)連接組件包括RvCuston Connection、RvData SetConnection和RvTable Connection,它們?cè)趹?yīng)用程序和Rave可視化組件之間提供了一個(gè)橋梁,其作用和使用方法列于表中。 67課堂優(yōu)質(zhì)9.4.2 數(shù)據(jù)庫(kù)報(bào)表組件數(shù)據(jù)庫(kù)報(bào)表組件4. RvProject組件組件 RvPr
37、oject組件是應(yīng)用程序與Rave報(bào)表之間的接口,它有兩個(gè)重 要的屬性: (1)Engine:指明輸出引擎。 (2)ProjectFile:指出一個(gè)已經(jīng)用Rave設(shè)計(jì)好的報(bào)表項(xiàng)目文件(.rav文件)。 使用RvProject組件生成報(bào)表的基本步驟為: (1)調(diào)用RvProject.Open。打開ProjectFile屬性中定義的報(bào)表。 (2)調(diào)用RvProject.GetReportList(ListBox1.Item,true)。在列表框 中顯示報(bào)表項(xiàng)目文件中的所有報(bào)表名。 68課堂優(yōu)質(zhì)9.4.2 數(shù)據(jù)庫(kù)報(bào)表組件數(shù)據(jù)庫(kù)報(bào)表組件(3)填寫列表框ListBox1的OnClick事件,在其中調(diào)用以
38、下 兩個(gè)方法: RvProject.SelectReport (ListBox1.ItemListBox1.ItemIndex,true); RvProject.ReportDescToMemo(Memo1); 即當(dāng)用戶選擇好需打印的報(bào)表后,把報(bào)表的描述信息顯示在多 行文本框Memo1中。根據(jù)實(shí)際應(yīng)用背景,這一步可以省略。 (4)調(diào)用RvProject.Execute。實(shí)際打印所選報(bào)表。 (5)調(diào)用RvProject.Close。關(guān)閉報(bào)表項(xiàng)目文件,釋放內(nèi)存。 69課堂優(yōu)質(zhì)9.4.2 數(shù)據(jù)庫(kù)報(bào)表組件數(shù)據(jù)庫(kù)報(bào)表組件【例例】使用RvProject組件生成報(bào)表并進(jìn)行打印的示例。本例按上述5個(gè)步驟生成報(bào)
39、表,進(jìn)行打印。所設(shè)計(jì)的應(yīng)用程序主界面如圖所示,所使用的窗體、組件及其屬性值列于表。 70課堂優(yōu)質(zhì)9.4.2 數(shù)據(jù)庫(kù)報(bào)表組件數(shù)據(jù)庫(kù)報(bào)表組件窗體和組件對(duì)象屬性表窗體和組件對(duì)象屬性表 71課堂優(yōu)質(zhì)9.4.2 數(shù)據(jù)庫(kù)報(bào)表組件數(shù)據(jù)庫(kù)報(bào)表組件下面編寫程序代碼:下面編寫程序代碼:/ 主窗體FrmRepPrn的OnCreate事件。完成創(chuàng)建報(bào)表的(1)-(2)步。procedure TFrmRepPrn.FormCreate(Sender: TObject);begin RvPro.Open; RvPro.GetReportList(LBRep.Items,true);end;/ 列表框LBRep的OnCli
40、ck事件。/ 當(dāng)在LBRep列表框中選擇好要打印得報(bào)表后,完成生成報(bào)表的第3步。procedure TFrmRepPrn.LBRepClick(Sender: TObject);begin RvPro.SelectReport(LBRep.ItemsLBRep.ItemIndex,true); RvPro.ReportDescToMemo(MemDesc); end; 72課堂優(yōu)質(zhì)9.4.2 數(shù)據(jù)庫(kù)報(bào)表組件數(shù)據(jù)庫(kù)報(bào)表組件/ 主窗體FrmRepPrn的OnDestroy事件。完成生成報(bào)表的第5步。procedure TFrmRepPrn.FormDestroy(Sender: TObject);
41、begin RvPro.Close;end;/ 按鈕BtnPrn的OnClick事件。完成生成報(bào)表的第4步。procedure TFrmRepPrn.BtnPrnClick(Sender: TObject);begin RvPro.Execute;end;/ 主窗體FrmRepPrn的OnShow事件。procedure TFrmRepPrn.FormShow(Sender: TObject);begin LBRep.ItemIndex := 0; LBRepClick(nil); end; 73課堂優(yōu)質(zhì)9.4.3 Rave報(bào)表設(shè)計(jì)器報(bào)表設(shè)計(jì)器 1.Rave報(bào)表設(shè)計(jì)器報(bào)表設(shè)計(jì)器 有三種方法打開
42、Rave 5.0報(bào)表設(shè)計(jì)器:(1)選擇Delphi 7主菜單ToolsRave Designer。(2)在主窗體中放入RvProject組件后,雙擊該組件。(3)在主窗體中放入RvProject組件后,右擊該組件,選擇 Rave Visual Designer。 Rave報(bào)表設(shè)計(jì)器主界面,它包括四個(gè)部分: (1)設(shè)計(jì)器頂端顯示各種工具條。(2)頁(yè)(Page)。 (3)項(xiàng)目樹。 包括三類節(jié)點(diǎn),即報(bào)表庫(kù)、全局頁(yè)、數(shù)據(jù)視圖。 (4)屬性面板,用于定義組件的外觀和行為。 74課堂優(yōu)質(zhì)9.4.3 Rave報(bào)表設(shè)計(jì)器報(bào)表設(shè)計(jì)器2. 報(bào)表設(shè)計(jì)器組件報(bào)表設(shè)計(jì)器組件(1)基本組件)基本組件 Rave的的Stan
43、dard組件組件 Standard組件及其作用組件及其作用 75課堂優(yōu)質(zhì)9.4.3 Rave報(bào)表設(shè)計(jì)器報(bào)表設(shè)計(jì)器(2)條形碼組件)條形碼組件(3)畫圖組件)畫圖組件 Bar Code頁(yè)組件頁(yè)組件 Drawing頁(yè)組件頁(yè)組件 76課堂優(yōu)質(zhì)9.4.3 Rave報(bào)表設(shè)計(jì)器報(bào)表設(shè)計(jì)器(4)報(bào)表組件)報(bào)表組件 報(bào)表組件用于從數(shù)據(jù)庫(kù)中取得數(shù)據(jù),產(chǎn)生報(bào)表。 Report頁(yè)組件說明 Report頁(yè)組件頁(yè)組件 77課堂優(yōu)質(zhì)9.4.3 Rave報(bào)表設(shè)計(jì)器報(bào)表設(shè)計(jì)器3. 報(bào)表預(yù)覽報(bào)表預(yù)覽 三種方法執(zhí)行一個(gè)報(bào)表: (1)選擇Rave報(bào)表設(shè)計(jì)器主菜單中的FileExecute Report選項(xiàng)。 (2)單擊工具欄中或P
44、roject頁(yè)中的Execute Report圖標(biāo)。 (3)按F9鍵。4. 表段表段 表段是指特殊的數(shù)據(jù)輸出區(qū)域,Rave 5.0內(nèi)定義了多種表段,如表頭Body Header、分組組頭Group Header、表格數(shù)據(jù)欄Detail、表尾Body Footer等。 78課堂優(yōu)質(zhì)9.4.3 Rave報(bào)表設(shè)計(jì)器報(bào)表設(shè)計(jì)器下面是下面是Delphi 7.0中自帶的一個(gè)表段示例中自帶的一個(gè)表段示例:(1)選擇Rave主菜單中的FileOpen選項(xiàng),打開RaveDemo.rav文 件(在Program FilesBorlandDelphi7Rave5Demos目錄下)。 (2)在報(bào)表設(shè)計(jì)器右邊的項(xiàng)目樹中
45、打開Report Library,雙擊 SimpleListingReport報(bào)表使其加亮顯示,再單擊其左側(cè)的“+” 打開它,出現(xiàn)MainPage頁(yè)。 (3)再單擊MainPage頁(yè)左側(cè)的“+”,出現(xiàn)CustomerDVRegion區(qū)域, 再打開它。 (4)選中CustomerDVTitleBand,觀察報(bào)表設(shè)計(jì)器左邊的屬性面板 中的屬性設(shè)置。 本表段將作為ControllerBand屬性定義的表段的表頭或表尾,是表頭 還是表尾,取決于BandStyle屬性。單擊BandStyle屬性右側(cè)的 , 進(jìn)入表段風(fēng)格編輯器,如下圖所示。 79課堂優(yōu)質(zhì)9.4.3 Rave報(bào)表設(shè)計(jì)器報(bào)表設(shè)計(jì)器表段風(fēng)格編輯
46、器 :80課堂優(yōu)質(zhì)9.4.3 Rave報(bào)表設(shè)計(jì)器報(bào)表設(shè)計(jì)器在表段風(fēng)格編輯器中,可以定義或改變表段風(fēng)格,表段風(fēng)格包括表段的打印位置(即前面說明的表段的類型)和打印時(shí)機(jī),兩者分別給出報(bào)表靜態(tài)和動(dòng)態(tài)信息,兩表列出了表段位置和打印時(shí)機(jī)的信息。 表段的位置說明表段的位置說明 表段打印時(shí)機(jī)說明表段打印時(shí)機(jī)說明 81課堂優(yōu)質(zhì)9.4.3 Rave報(bào)表設(shè)計(jì)器報(bào)表設(shè)計(jì)器【例例】在上面已打開的報(bào)表中,為每行記錄增加一行橫線分隔符,并在報(bào)表的每一頁(yè)頁(yè)頭打印出一個(gè)圖標(biāo)。步驟如下: (1)放入Report頁(yè)中的兩個(gè)Band組件(組件名BdLine和BdRear)到DVStuRegion區(qū)域。 (2)將BdLine和BdR
47、ear的ControllerBand屬性均設(shè)置為DVStuDataBand。這時(shí),注意觀察頁(yè)面設(shè)計(jì)器中這兩個(gè)表段前面的箭頭形狀和顏色的變化,從中可以清楚地看出這兩個(gè)表段BdLine和BdRear與DVStuDataBand表段的對(duì)應(yīng)關(guān)系。(3)在BdLine表段中,用Drawing頁(yè)中的HLine組件畫一橫線。 在BdRear表段中,放入Standard頁(yè)組件中的Text組件(TxtRear),設(shè)置其Text屬性為“學(xué)生情況表”,見圖。 82課堂優(yōu)質(zhì)9.4.3 Rave報(bào)表設(shè)計(jì)器報(bào)表設(shè)計(jì)器(4)選中BdLine,在屬性面板中,單擊BandStyle屬性右側(cè)的,進(jìn)入表段風(fēng)格編輯器,設(shè)置BdLin
48、e的BandStyle屬性。在Print Header組中,選中Detail。在Print Occurrence組中,選中First。再設(shè)置BdRear的BandStyle屬性。在Print Header組中,選中Body Footer。在Print Occurrence組中,選中First。設(shè)置完成后,表段的風(fēng)格見圖。打印預(yù)覽學(xué)生情況報(bào)表如下一頁(yè)圖所示。 83課堂優(yōu)質(zhì)9.4.3 Rave報(bào)表設(shè)計(jì)器報(bào)表設(shè)計(jì)器報(bào)表預(yù)覽報(bào)表預(yù)覽圖圖84課堂優(yōu)質(zhì)9.4.4 試題庫(kù)管理系統(tǒng)的打印模塊實(shí)例試題庫(kù)管理系統(tǒng)的打印模塊實(shí)例 1.建立數(shù)據(jù)模塊建立數(shù)據(jù)模塊 (1)打開項(xiàng)目文件StkPrj。 (2) 建立數(shù)據(jù)模塊D
49、MStkDy(數(shù)據(jù)模塊單元為DMUStkDy),向其中加入9個(gè)Query組件,如圖所示,(每個(gè)Query組件與一種題型相對(duì)應(yīng)),Query組件的屬性按下一頁(yè)表進(jìn)行設(shè)置。 數(shù)據(jù)模塊數(shù)據(jù)模塊DMStkDy 85課堂優(yōu)質(zhì)9.4.4 試題庫(kù)管理系統(tǒng)的打印模塊實(shí)例試題庫(kù)管理系統(tǒng)的打印模塊實(shí)例 數(shù)據(jù)模塊中組件對(duì)象屬性表數(shù)據(jù)模塊中組件對(duì)象屬性表設(shè)置對(duì)象屬性的說明:設(shè)置對(duì)象屬性的說明: (1)共有9個(gè)ADOQuery組件,其中QryXZ、QryTK、QryPD、QryJD、 QryJS、QryLS、QryWD、QryBC共8個(gè)組件,它們之間的區(qū)別 在于SQL語(yǔ)句中的where子句,從txdm=1到 txdm=
50、8,在此從略。(2)點(diǎn)擊QrySJM組件的Parameters參數(shù)右側(cè) ,設(shè)置參數(shù)bh的類型 為DataType為ftInteger。 86課堂優(yōu)質(zhì)9.4.4 試題庫(kù)管理系統(tǒng)的打印模塊實(shí)例試題庫(kù)管理系統(tǒng)的打印模塊實(shí)例(3)使用字段編輯器添加QryXZ、QryTK、QryPD、QryJD、 QryJS、QryLS、QryWD、QryBC、QrySJM中的字段為 永久字段。 (4)在數(shù)據(jù)模塊單元的實(shí)現(xiàn)部分引入DMUStk,即uses DMUStk;2. 建立打印試卷窗體建立打印試卷窗體 9個(gè)RvDataSetConnection組件每個(gè)RvDataSetConnection組件與數(shù)據(jù)模塊DMStk
51、Dy中的一個(gè)Query組件對(duì)應(yīng)。 RAVEProject組件RvProSJ 87課堂優(yōu)質(zhì)9.4.4 試題庫(kù)管理系統(tǒng)的打印模塊實(shí)例試題庫(kù)管理系統(tǒng)的打印模塊實(shí)例打印試卷窗體和組件對(duì)象屬性表打印試卷窗體和組件對(duì)象屬性表 設(shè)置對(duì)象屬性的說明: 共有9個(gè)RvDataSetConnection組件 (RvDSConXZ、RvDSConTK、 RvDSConPD、RvDSConJD、RvDSConJS、RvDSConLS、 RvDSConWD、RvDSConBC、RvDSConSJM),它們的DataSet 屬性分別設(shè)置為(DMStkDy.QryXZ、RvDSConTK、 DMStkDy.QryPD、DMS
52、tkDy.QryJD、DMStkDy.QryJS、 DMStkDy.QryLS、DMStkDy.QryWD、DMStkDy.QryBC、 DMStkDy.QrySJM),在此略去。 88課堂優(yōu)質(zhì)9.4.4 試題庫(kù)管理系統(tǒng)的打印模塊實(shí)例試題庫(kù)管理系統(tǒng)的打印模塊實(shí)例3. 創(chuàng)建數(shù)據(jù)視圖創(chuàng)建數(shù)據(jù)視圖 進(jìn)入Rave報(bào)表設(shè)計(jì)器,分別為RvDSConXZ至RvDSConBC和RvDSConSJM等9個(gè)組件創(chuàng)建數(shù)據(jù)視圖DataView1至DataView9(重命名為DVXZ、DVTK、DVPD、DVJD、DVJS、DVLS、DVWD、DVBC、DVSJM,分別代表選擇題、填空題、判斷題、簡(jiǎn)答題、計(jì)算題、論述題
53、、問答題、編程題和試卷名)。創(chuàng)建這些數(shù)據(jù)視圖后,在RAVE報(bào)表設(shè)計(jì)器中Data Connections對(duì)話框?qū)@示連接,如下左圖所示。在項(xiàng)目樹中將列出這9個(gè)數(shù)據(jù)視圖,如右圖所示。 89課堂優(yōu)質(zhì)9.4.4 試題庫(kù)管理系統(tǒng)的打印模塊實(shí)例試題庫(kù)管理系統(tǒng)的打印模塊實(shí)例4. 創(chuàng)建試卷報(bào)表創(chuàng)建試卷報(bào)表 (1)在報(bào)表中放入一個(gè)Report頁(yè)中的DataText組件和三個(gè) Standard頁(yè)中的Text組件(分別命名為DTxtSJM、TxtSJT1、 TxtSJT2、TxtSJT3),用以填寫試卷頭。 (2)在頁(yè)中放入一個(gè)Region組件(命名為paper)。 (3)在Region組件內(nèi)放置一個(gè)Band組件(
54、命名為BdXZT),在 該Band組件內(nèi)放置一個(gè)Text組件TxtXZT,用以填寫 “選擇題”頭。 90課堂優(yōu)質(zhì)9.4.4 試題庫(kù)管理系統(tǒng)的打印模塊實(shí)例試題庫(kù)管理系統(tǒng)的打印模塊實(shí)例(4)在Region組件內(nèi)放入一個(gè)DataBand組件(命名為DBXZT)在該組件內(nèi)放入一個(gè)Text組件TxtXZTNum,該組件用于填寫選擇題的題號(hào),題號(hào)由TxtXZTNum的OnGetText事件代碼生成。該事件代碼為: TxtXZTNum.text:= inttostr (strtoint (TxtXZTNum.text )+1); /題號(hào)初值為1。放入TxtXZTNum組件后,單擊報(bào)表的“Event Edit
55、or”頁(yè),見圖,在“Available Events”列表框中選擇“OnGetText”,在最下方的編輯框中輸入上述語(yǔ)句。 創(chuàng)建試卷報(bào)表創(chuàng)建試卷報(bào)表 91課堂優(yōu)質(zhì)9.4.4 試題庫(kù)管理系統(tǒng)的打印模塊實(shí)例試題庫(kù)管理系統(tǒng)的打印模塊實(shí)例再在DBXZT組件內(nèi)放入一個(gè)DataMemo組件DMemXZT,該組件用于寫入試卷中選擇題的內(nèi)容。以上各組件的屬性設(shè)置見表: 92課堂優(yōu)質(zhì)9.4.4 試題庫(kù)管理系統(tǒng)的打印模塊實(shí)例試題庫(kù)管理系統(tǒng)的打印模塊實(shí)例各組件的屬性設(shè)置續(xù)表(5)重復(fù)第3步和第4步,完成填空題、簡(jiǎn)答題等其他題型的生成。 參見下頁(yè)圖。 93課堂優(yōu)質(zhì)9.4.4 試題庫(kù)管理系統(tǒng)的打印模塊實(shí)例試題庫(kù)管理系統(tǒng)
56、的打印模塊實(shí)例 產(chǎn)生的項(xiàng)目樹產(chǎn)生的項(xiàng)目樹 Paper頁(yè)頁(yè) 94課堂優(yōu)質(zhì)9.4.4 試題庫(kù)管理系統(tǒng)的打印模塊實(shí)例試題庫(kù)管理系統(tǒng)的打印模塊實(shí)例實(shí)際產(chǎn)生的試卷實(shí)際產(chǎn)生的試卷 95課堂優(yōu)質(zhì)9.4.5 進(jìn)一步使用報(bào)表設(shè)計(jì)器進(jìn)一步使用報(bào)表設(shè)計(jì)器 Rave 5.0還有一些附加的功能。其中一個(gè)較有用的功能是能將報(bào)表格式文件轉(zhuǎn)換為HTML格式文件。 例如把上圖的試卷保存為HTML格式文件:procedure TForm1.Button1Click(Sender: TObject);var NDRStream: TMemoryStream;beginNDRStream := TMemoryStream.Create;tryNDRStream.LoadFromFile(test.ndr);RenderHTML.PrintRender(NDRStream, test.html);finallyNDRStream.Free;end; ShowMessage(NDR Converted);end; 96課堂優(yōu)質(zhì)
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 領(lǐng)導(dǎo)班子2024年度民主生活會(huì)對(duì)照檢查材料范文(三篇)
- 金融工作主題黨課講稿范文(匯編)
- 鍋爐必備學(xué)習(xí)材料
- 鍋爐設(shè)備的檢修
- 主題黨課講稿:走中國(guó)特色金融發(fā)展之路加快建設(shè)金融強(qiáng)國(guó)(范文)
- 鍋爐基礎(chǔ)知識(shí):?jiǎn)t注意事項(xiàng)技術(shù)問答題
- 領(lǐng)導(dǎo)班子2024年度民主生活會(huì)“四個(gè)帶頭”對(duì)照檢查材料范文(三篇)
- 正常運(yùn)行時(shí)影響鍋爐汽溫的因素和調(diào)整方法
- 3.鍋爐檢修模擬考試復(fù)習(xí)題含答案
- 司爐作業(yè)人員模擬考試試卷含答案-2
- 3.鍋爐閥門模擬考試復(fù)習(xí)題含答案
- 某公司鍋爐安全檢查表
- 3.工業(yè)鍋爐司爐模擬考試題庫(kù)試卷含答案
- 4.司爐工考試題含答案解析
- 發(fā)電廠鍋爐的運(yùn)行監(jiān)視和調(diào)整