男女午夜激情_www.天堂av.com_亚洲综合小说区_亚洲欧美自拍视频_成年精品_久久www免费人成—看片_激情综合五月天_久久高潮视频_最新国产成人ab网站_国产精品卡一

當前位置:機電之家首頁 >> PLC技術>> PLC文案資料 >> PLC論文 >> 嵌入復雜VB報表的實現方法
嵌入復雜VB報表的實現方法

1.概述
在許多組態控制軟件中,都提供了報表的功能,可滿足不了各種客戶的報表需求,不可避免的碰到各種各樣的報表。現在大多數組態軟件支持嵌入VB程序,可以再VB平臺下作出報表嵌入到組態程序中。在VB平臺下制作報表大致有兩種選擇:使用VB自帶的Data Report控件和借助第三方軟件。使用Data Report控件有兩點局限:第一DataReport本身提供的控件很少卻功能很弱,與數據環境邦定得太死。第二DataReport沒用提供分欄等復雜的打印功能;借助第三方軟件功能復雜多樣需要學習,需要時間去理解掌握。利用VB本身提供的控件功能也可以輕松設計自己的復雜報表,簡單明了,適用于簡單和復雜報表,與大家共同探討。
2.設計報表紙
設計報表紙的容器(bbbb)也就是一張白紙,它具有bbbb.Printbbbb功能,利用它作者可以任意發揮,只要在窗體能顯示的內容都可以打印出來,制作打印所見即所得的報表。眾所周知,在窗體上可以放置VB提供的所有控件,如:Lable,TextBox,Line,Imge,MSHFGrid等各種控件,由用程序操作各種控件的結果,用數據庫內的數據填充MSHFGrid,就可以作出圖文并茂的報表。設定報表紙張(bbbb4):
在工程中添加一窗體bbbb4。設定窗體的大小通與打印紙張大小相同、前景顏色、后景顏色、邊框形式、控制按鈕、滾動條、標題等項目,使窗體顯示為一張“白紙”。程序如下:
Private Sub bbbb4_Load()

 With bbbb4
   .Appearance = 0           Flat
   .AutoRedraw = 1           True
   .BackColor = &H80000005   背景顏色:白色
   .BorderStyle = 0            None
   .Height = 15000            設置頁面的大小,即紙的大小,
   .Width = 11760            15000,11760相當于A3
   .Top = 0
   .Left = 0
   .ClipControls = 0           False
   .FillStyle = 0              Solid
   .Caption = "paper"
 End With
End Sub
3.表頭的設計
表頭包括報表的頁眉、頁腳、頁標題、日期、不規則表頭等。用Lable控件設計報表的題目。用Line控件在紙上畫出不規則表頭。用Lable,TextBox,Imge填充表頭的內容,將標頭內的所有同類的控件選中設定統一屬性。頁眉、頁腳、頁標題、日期、都可以用控件TextBox設計,程序運行時控制控件的顯示內容,可以做出復雜表頭。
4.表體的設計
在窗體上添加控件MSHFlexGrid(Microsoft Hieerarchical FlexGrid),用鼠標拖動邊框,使其占據表體所需的面積,設定其屬性:編框、前景顏色、背景顏色、固定行數,固定列數,滾動條,行寬(若各行高度不一樣,可以在程序中設定各行的高度)。在程序中設定各列的寬度。MSHFlexGrid控件以網格形式顯示Recordset數據,可以將文本、圖片或者文本和圖片放在MSHFlexGrid的任意單元中,Row和Col屬性制定了MSHFlexGrid裝的當前單元。可以在代碼種植訂單前單元,也可以在運行時使用鼠標或者方向鍵來選定當前的單元。Text屬性引用當前單元的內容。很遺憾MSHFlexGrid控件沒用打印功能,只能借助于bbbb控件的打印功能,實現報表打印。
Begin MSHierarchicalFlexGridLib.MSHFlexGrid MSHFlexGrid1 
      Height          =   10305  設置高度容納一頁所有的行。
      Left            =   300
      TabIndex        =   0
      Top             =   780
      Width           =   4755   設置寬度容納一頁所有的列。 
      _ExtentX        =   8387
      _ExtentY        =   18177
      _Version        =   393216
      Rows            =   26     設置一頁容納的行數
      FixedCols       =   0
      BackColorFixed  =   255
      BackColorBkg    =   -2147483639
      GridColor       =   8454016
      GridColorFixed  =   8454143
      GridColorUnpopulated=   8421631
      GridLines       =   1
      GridLinesUnpopulated=   3
      MergeCells      =   4
      BorderStyle     =   1      設置邊框:有邊框
      Appearance      =   0
      GridLineWidthFixed=   1
      BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851} 
         Name            =   "宋體"
         Size            =   12   設置字體的大小,行寬自動設定
         Charset         =   134
         Weight          =   400
         Underline       =   0   False
         Italic          =   0   False
         Strikethrough   =   0   False
      EndProperty
      _NumberOfBands  =   1
      _Band(0).Cols   =   2
      _Band(0).GridLineWidthBand=   1
End  上段程序是在設置MSHFlexGrid控件屬性自動產生的,以示參考

Sub MsgdWidth(ci As Integer, ccwidth() As Integer, Msgd As MSHFlexGrid)
 設置格列的寬度   ci  列數
   ccwidth() 容納列寬度的數組,單位使用缺省單位 
  Dim i As Integer
        For i = 0 To ci - 1
            msgrd.ColWidth(i) = ccwidth(i)
        Next i
End Sub
5.為MSHFlexGrid準備數據
MSHFlexGrid可以與各種數據空間邦定,能夠自動讀取數據。在報表打印中,我們不使用數據邦定,用程序代碼來控制填充MSHFlexGrid控件的每一單元格。使用ADO對象的Recordset來準備數據源,也可以用其他類似的方法獲得數據源的指針。
Sub opendata(t As bbbbbb, restdata As adodb.Recordset)
  Dim conbbbbbb, sqlbbbbbb As bbbbbb
  Dim recon As adodb.Connection
  conbbbbbb="Provider=SQLOLEDB.4;server=Datacenter;database=zbmis;uid=;pwd=" 
  數據源連接字
  sqlbbbbbb = "select stid,sbbatchid,stlong from tn_stinfo where  ckroundnum=" & ""_
   & Trim(t) & "" & "order by stid" 
  數據篩選指令,t為數據篩選條件
  restdata.Open sqlbbbbbb, conbbbbbb, adOpenKeyset, adLockReadOnly  
  打開數據記錄,獲得記錄集
End Sub
6.填充MSHFlexGrid的單元格
用打開的數據源,填充MSHFlexGrid每一行,每一列,若最后一頁所有的行填充不滿,用“”來填充。若用彩色打印機可以控制每一單元格的顏色,制作多彩的報表。可以在表中單元任意各種添加頁計、總計、序號等數據。
Sub bbbbbmsfh(ri As Integer, ci As Integer, restdata As adodb.Recordset, msgrd As MSHFlexGrid)  ri,ci 是MSHFlexGrid的行數和列數
Dim rk, ck As Integer
msgrd.Rows = ri + 1    加一行列表頭
msgrd.Cols = ci
For rk = 1 To ri
With msgrd
    .Row = rk
    For ck = 0 To ci - 1
        .Col = ck
        If restdata.EOF Or IsNull(restdata(ck)) Then
          .Text = ""
        Else
          .Text = Trim(restdata(ck))
        End If
    Next ck
  If restdata.EOF = False Then restdata.MoveNext  控制記錄行將每行填滿,
若記錄到了文件尾或記錄的列內容為null則用“”來填充
    End With
Next rk
End Sub
   列表頭的填充
  Sub msgrdname(ci As Integer, ccbbbbbb() As bbbbbb, msgrd As MSHFlexGrid)
ci  列數
ccbbbbbb() 容納列表頭的數組 
    Dim i As Integer
    With msgrd
    msgrd.Cols = ci
    msgrd.Rows = 1
        .Row = 0
        For i = 0 To ci - 1
              .Col = i
              .Text = ccbbbbbb(i)
        Next i
  End With
 End Sub
7.關于分頁和分欄
首先確定分欄數,若不分欄,窗體bbbb4頁面上只添加一個控件MSHFlexGrid1;若分兩欄,在窗體bbbb4頁面上添加兩個并列控件MSHFlexGrid1 ,MSHFlexGrid2;依次類推。下面的程序中支持分三欄以下的格式。各欄之間的距離,可以直接在窗體上確定。其次,計算報表的頁數控制打印的次序。
Private Sub Command1_Click()
Dim restdata As New adodb.Recordset
Dim t As bbbbbb          數據篩選條件
Dim ccbbbbbb() As bbbbbb   列標題名稱數組
Dim ccwidth() As Integer  列寬
Dim cc, rc   As Integer     一頁的行數rc,頁數cc
Dim prc, plc  As Integer    頁數prc,攔數plc
Dim rctotal  As Integer    總行數
Dim prc1, I  As Integer

t = bbbb1.TextBox1.Text   從bbbb1.TextBox1.Text輸入查詢的條件
   Call opendata(t, restdata)    打開數據源,獲得記錄集
   rctotal = restdata.RecordCount  取出總行數
   Print rctotal
If rctotal > 0 Then
cc = restdata.Fields.Count   取出總列數
ReDim ccbbbbbb(3) As bbbbbb
ReDim ccWidth(3) As bbbbbb
plc = 2                設定分兩欄
rc = 30                每頁30行
ccwidth(0)=600         列寬數組初始化,根據列的字符寬度設定列寬度
ccwidth(1)=1600
ccwidth(2)=1800
    ccbbbbbb(0) = "管號"       列表頭數組初始化
    ccbbbbbb(1) = "爐批號"
    ccbbbbbb(2) = "米長"
       prc = Int(rctotal / (rc * plc))  計算總頁數
     prc1 = rctotal Mod (rc * plc)
 If prc1 > 0 Then prc = prc + 1
      restdata.MoveFirst
    
      For i = 1 To prc
            bbbb4.Text1 = rctotal
            Select Case plc
                Case 1  不分欄
                    Call MsgdWidth(Msgd1 As MSHFlexGrid1)
                    Call msgrdname(cc, ccbbbbbb(), bbbb4.MSHFlexGrid1)
                    Call bbbbbmsfh(rc, cc, restdata, bbbb4.MSHFlexGrid1)
                    bbbb4.MSHFlexGrid2.Visible = False
                    bbbb4.MSHFlexGrid3.Visible = False
                Case 2   分兩欄
Call MsgdWidth(Msgd1 As MSHFlexGrid1)  第一欄列寬
Call MsgdWidth(Msgd1 As MSHFlexGrid2)  第二欄列寬
                    Call msgrdname(cc, ccbbbbbb(), bbbb4.MSHFlexGrid1) 第一欄列頭
                    Call msgrdname(cc, ccbbbbbb(), bbbb4.MSHFlexGrid2) 第二欄列頭
                    Call bbbbbmsfh(rc, cc, restdata, bbbb4.MSHFlexGrid1) 第一欄內容
                    Call bbbbbmsfh(rc, cc, restdata, bbbb4.MSHFlexGrid2) 第二欄內容
                     bbbb4.MSHFlexGrid3.Visible = False
                Case 3   分三欄
Call MsgdWidth(Msgd1 As MSHFlexGrid1)
Call MsgdWidth(Msgd1 As MSHFlexGrid2)
Call MsgdWidth(Msgd1 As MSHFlexGrid3)
                    Call msgrdname(cc, ccbbbbbb(), bbbb4.MSHFlexGrid1)
                    Call msgrdname(cc, ccbbbbbb(), bbbb4.MSHFlexGrid2)
                    Call msgrdname(cc, ccbbbbbb(), bbbb4.MSHFlexGrid3)
                    Call bbbbbmsfh(rc, cc, restdata, bbbb4.MSHFlexGrid1)
                    Call bbbbbmsfh(rc, cc, restdata, bbbb4.MSHFlexGrid2)
                    Call bbbbbmsfh(rc, cc, restdata, bbbb4.MSHFlexGrid3)
            End Select
           bbbb4.Show
        MsgBox ("打印第" & i & "頁"
        bbbb4.Printbbbb 輸出到系統缺省打印機
      Next i
    Else
      MsgBox "查無此記錄"
    End If
restdata.Close        關閉記錄
set restdata = Nothing  釋放緩沖區
End Sub
8. 結束語
所有的程序 Mcrosoft Visual Basic 6.0下調試通過,還有許多排錯指令,由于篇幅所限都已去掉,在實際運用中,使用者可以加入,以增強程序的強壯性。若有Bug請來信一起探討。

作者:未知 點擊:1108次 [打印] [關閉] [返回頂部]
本文標簽:嵌入復雜VB報表的實現方法
* 由于無法獲得聯系方式等原因,本網使用的文字及圖片的作品報酬未能及時支付,在此深表歉意,請《嵌入復雜VB報表的實現方法》相關權利人與機電之家網取得聯系。
電子樣本

SN系列樣冊
:鞏經理
:13915946763
:南京塞姆泵業有限公司
個人求購

朱善鵬 【求購】  液壓絞車  2026-3-23
機電用戶 【求購】  纏繞膜  2026-3-23
汪經理 【求購】  綜合帶電檢...  2026-3-23
王經理 【求購】  西湖輪胎  2026-3-20
蘇紅慶 【求購】  工業除濕機  2026-3-20
金喜 【求購】  線纜  2026-3-20
林杰 【求購】  自粘結鐵芯  2026-3-20
任建波 【求購】  鋰電鉆  2026-3-20
VIP公司推薦

主站蜘蛛池模板: 珠海市| 星子县| 青浦区| 武安市| 兴和县| 灵山县| 兴安盟| 扎囊县| 丹寨县| 城步| 赤壁市| 莱芜市| 康乐县| 昆山市| 广饶县| 海门市| 铜川市| 大方县| 东明县| 司法| 安乡县| 南和县| 汶上县| 鲁甸县| 平定县| 杭锦旗| 柘城县| 新田县| 上犹县| 平罗县| 车险| 广东省| 临西县| 随州市| 大埔区| 百色市| 嘉义县| 嘉黎县| 中阳县| 桓台县| 大洼县|