程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 數據報表設計器在多層結構開發的應用

數據報表設計器在多層結構開發的應用

編輯:VB綜合教程
----在VisualBasic中制作報表,一般是用數據環境設計器(DataEnvironmentDesigner)與數據報表設計器(DataReportDesigner)相結合來實現的。上述方法通常應用於客戶/服務器(C/S)結構。下面,讓我們一起來探討一下DataReportDesigner在多層結構中的應用。
  
  ----一、前言
  
  ----多層應用開發之所以能夠成為程序開發的主流技術,是與其具有的數據訪問和事務處理能力緊密相關的。多層應用開發在邏輯上則分為三層:客戶(表現層),應用服務器(業務層)和數據庫(數據層)。客戶向服務器發請求,作為中間層的服務器接收請求提供相應的邏輯、性能和目錄服務,並最終通過服務器建立與數據庫的連接。多層應用開發中很重要的一點是將應用邏輯集中於服務器,這樣一個進程便可以為多個客戶服務,而不用再為每客戶都建立一個服務器進程。下文可作為表現層的一個例子。
  
  ----二、數據結構
  
  ----假設我們要打印兩項數據,其定義如下:
  
  字段名數據類型數據長度
  tidchar10
  tnamechar20
  
  ----三、創建工程
  
  ----(1)在新建工程中選取“標准EXE”後按“確定”鍵,修改工程名為Rptprint,修改Form1的name屬性為frmreport。增加一個類模塊,修改Class1的name屬性為clsreport。如果在“工程”菜單中未發現“添加DataReport”的子菜單,則要進行以下操作,單擊“工程”菜單中的“部件”,選中“設計器”中的“DataReport”選項後單擊“確定”按鈕。此時應在“工程”菜單中發現“添加DataReport”的子菜單,單擊該子菜單添加一個DataReport到工程。
  
  ----(2)添加四個CommandButton控件(name屬性分別為Command1、Command2與Command3,Command4,caption屬性分別為“增加”、“預覽”、“打印“與“返回”)和兩個TextBox控件(name屬性分別為TxtID與TxtName)到frmreport窗體。
  
  ----(3)雙擊工程中的DataReport1打開設計器,添加兩個RptTextBox控件(名稱分別為Text1和Text2)到“細節(Section1)”分組中,修改Text1的DataField屬性為tid,Text2的DataField屬性為tname。
  
  ----(4)引用MicrosoftActiveXDataObjects2.0Library類庫,做完以上操作後保存工程。
  
  ----四、編寫程序
  
  ----(1)在clsreport類模塊輸入如下代碼:
  
  OptionExplicit
  PrivateRST_RPTAsADODB.Recordset
  '定義一個記錄集變量
  
  PrivateSubClass_Initialize()
  SetRST_RPT=CreateObject("ADODB.Recordset")
  '創建一個空的記錄集
  WithRST_RPT
  .Fields.Append"tid",adChar,10
  .Fields.Append"tname",adChar,20
  '往記錄集中添加字段(此例假設只有兩個,
  如需要可增加多個字段)
  .CursorLocation=adUseClient
  '設置CursorLocation屬性為“客戶端游標”
  EndWith
  
  RST_RPT.Open
  '打開記錄集
  
  SetDataReport1.DataSource=RST_RPT
  '設置DataReport1設計器的數據源為RST_RPT記錄集
  EndSub
  PrivateSubClass_Terminate()
  IfNotRST_RPTIsNothingThen
  RST_RPT.Close
  '關閉記錄集
  EndIf
  
  SetRST_RPT=Nothing
  '撤消對象
  EndSub
  
  PublicFunctionAddRecord(strdata
  ()AsString)AsBoolean
  
  OnErrorGoToerrdo
  '錯誤捕獲
  
  WithRST_RPT
  .AddNew
  !tid=strdata(1)
  !tname=strdata(2)
  '給記錄集賦值
  .Update
  '更新修改
  EndWith
  AddRecord=True
  '如果成功則返回“真”
  ExitFunction
  
  errdo:
  '可根據需要對錯誤進行分類處理
  '方法可查閱隨機文檔的“調試代碼和處理錯誤”部分
  '此例省略
  AddRecord=False
  '如果失敗則返回“假”
  SetRST_RPT=Nothing
  '撤消對象
  EndFunction
  
  PublicFunctionPrint_Report()AsBoolean
  
  OnErrorGoToerrdo
  
  IfNotRST_RPTIsNothingThen
  SetDataReport1.DataSource=RST_RPT
  '重置數據源
  EndIf
  
  DataReport1.PrintReport
  '直接打印
  Print_Report=True
  '如果成功則返回“真”
  ExitFunction
  errdo:
  Print_Report=False
  '如果失敗則返回“假”
  EndFunction
  
  PublicFunctionShow_Report()AsBoolean
  
  OnErrorGoToerrdo
  
  IfNotRST_RPTIsNothingThen
  SetDataReport1.DataSource=RST_RPT
  '重置數據源
  EndIf
  
  DataReport1.Show
  '浏覽
  Show_Report=True
  '如果成功則返回“真”
  ExitFunction
  errdo:
  Show_Report=False
  '如果失敗則返回“假”
  EndFunction
  
  ----(2)在frmreport窗體輸入如下代碼:
  
  OptionExplicit
  PrivateobjAsclsReport
  '定義局部變量
  
  PrivateSubCommand1_Click()
  Dimb1AsBoolean
  Dimsd(2)AsString
  DimmgAsInteger
  
  sd(1)=Trim(TextID.Text)
  sd(2)=Trim(TextName.Text)
  '把要打印的數據賦給sd數組,此例的數據來自文本框。
  '在多層開發應用中數據源通常是通過業務層和數據層處理
  '後返回的記錄集(如ADODB.Recordset),把記錄集
  '賦給sd數組,即可打印。注意要保持記錄集的字段數
  '與設計器的文本框數一致。
  b1=obj.AddRecord(sd)'增加記錄
  Ifb1=TrueThen
  mg=MsgBox("增加記錄成功!",vbOKOnly,"打印消息")
  Else
  mg=MsgBox("增加記錄失敗!",vbOKOnly,"打印消息")
  EndIf
  EndSub
  
  PrivateSubCommand2_Click()
  Dimb1AsBoolean
  DimmgAsInteger
  
  b1=obj.Show_Report'浏覽記錄
  IfNotb1Then
  mg=MsgBox("浏覽操作失敗!",vbOKOnly,"打印消息")
  EndIf
  EndSub
  
  PrivateSubCommand3_Click()
  Dimb1AsBoolean
  DimmgAsInteger
  
  b1=obj.Print_Report'打印報表
  IfNotb1Then
  mg=MsgBox("打印操作失敗!",vbOKOnly,"打印消息")
  EndIf
  EndSub
  
  PrivateSubCommand4_Click()
  UnloadMe
  '關閉窗口
  EndSub
  
  PrivateSubForm_Load()
  Setobj=NewclsReport
  '創建對象實例
  EndSub
  
  PrivateSubForm_Unload(CancelAsInteger)
  Setobj=Nothing
  '撤消對象
  EndSub
  
  ----五、小結
  
  ----上例具有如下特點:(1)組織數據很靈活,既可以是本地數據也可以是記錄集或者倆者相結合。(2)程序運行速度很快,它比用VB生成Excel報表快得多。(3)易於移植,只要建立ActiveXDLL工程,加入clsReport和DataReport1模塊編譯成動態庫,即可被其他應用程序調用。建議:可修改clsReport類模塊的屬性把它直接作為DataReport1數據源,關於類模塊的詳細用法可查閱有關文檔。本例用VisualBasic6.0(專業版)編寫,在Windows95下調試通過。->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved