国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

VB通用數(shù)據(jù)表格輸出程序的設(shè)計

2019-11-18 17:46:54
字體:
供稿:網(wǎng)友
----做為一種簡捷、系統(tǒng)的Windows應(yīng)用程序開發(fā)工具,VisualBasic5具有強大的數(shù)據(jù)處理能力,提供了多種數(shù)據(jù)訪問方法,可以方便地存取MicrosoftSQLServer、Oracle、XBase等多種數(shù)據(jù)庫,被廣泛應(yīng)用于建立各種信息管理系統(tǒng)。但是,VB缺乏足夠的、符合中文習(xí)慣的數(shù)據(jù)表格輸出功能。雖然使用CrystalReport控件及CrystalReports程序可以輸出報表,但操作很麻煩,中文處理能力也不理想,特別是不能夠用來制作不確定內(nèi)容的表格。筆者在用VB開發(fā)淮北市醫(yī)療保險信息管理系統(tǒng)時,需要對任意的查詢結(jié)果進行表格輸出,為此,編制了一個通用的數(shù)據(jù)表格輸出控件,能夠根據(jù)查詢的結(jié)果自動生成二維中文表格,并打印輸出,在此介紹給大家,共同探討。

一.VB5中的結(jié)果集
----VB5提供的數(shù)據(jù)訪問方法有數(shù)據(jù)詢問對象(DAO)、Data控件、遠(yuǎn)程數(shù)據(jù)對象(RDO)、RemoteData控件(RDC)、ODBCAPI、VBSQL等,其中ODBCAPI比較復(fù)雜,開發(fā)、調(diào)試和支持非常困難;VBSQL是針對MicrosoftSQLServer的,這兩種方法使用的比較少,這里不做討論。比較常用的方法是DAO、Data控件、RDO、RDC,其中DAO和Data控件使用的結(jié)果集(又叫紀(jì)錄集)包含在Recordset對象中,RDO和RDC使用的結(jié)果集包含在rdoResultset對象中。通用表格輸出的實現(xiàn)方法就是根據(jù)任意的Recordset對象或rdoResultset對象自動生成表格并輸出。
二.表格的自動生成
----1.Recordset對象
----下面以Data控件為例,介紹Recordset對象的表格自動生成方法。

----假設(shè)有Data控件名稱為MyData,首先說明相關(guān)的內(nèi)容及用法:

----(1)Data控件的結(jié)果集包含在它的Recordset對象中,引用方法為:MyData.Recordset。

----(2)Recordset對象的RecordCount屬性為結(jié)果集的行數(shù),它決定了表格的長度,該屬性引用方法為:MyData.Recordset.RecordCount。

----(3)Recordset對象包含一個Fields集合,通過Fields集合的Count屬性可以得到結(jié)果集中字段的個數(shù),用做表格的列數(shù),該屬性引用方法為:MyData.Recordset.Fields.Count。

----(4)Fields集合包括結(jié)果集合全部Field對象,這些Field對象引用方法為:MyData.Recordset.Fields(i),其中i是該Field對象在中的位置序號,從0開始計數(shù)。

----(5)Field對象的Name屬性是該字段的名稱,用做表格對應(yīng)列的名稱,引用方法為:MyData.Recordset.Fields(i).Name。

----(6)Field對象的Size屬性是該字段數(shù)據(jù)的最大尺寸,引用方法為:MyData.Recordset.Fields(i).Size。

----(7)Field對象的Type屬性是該字段數(shù)據(jù)的類型,引用方法為:MyData.Recordset.Fields(i).Type。

----用Field對象的Size和Type屬性可以計算出表格對應(yīng)列的寬度。

----(8)Field對象的Value屬性是該字段的值,這是表格對應(yīng)列的內(nèi)容,引用方法為:MyData.Recordset.Fields(i).Value。

----以上引用在VB中都可有多種引用方法,這里使用的是比較明了的一種,便于說明問題。

----表格的自動生成可分為兩個步驟:

----第一步,根據(jù)結(jié)果集中各字段的Size和Type屬性,生成表格各對應(yīng)列的寬度,用Format函數(shù)使用的格式字符串表示。

----下面的FunctiongetFmt()用來生成表格各列的格式字符串,調(diào)用時把Field對象的Type和Size屬性值分別賦給形式參數(shù)intType和logSize。

 實際上即是strDy()的元素個數(shù)

 PrivateSubDy()
 WithMyData.Recordset
 .MoveLast
 ReDimstrDy(.RecordCount 8) 
'需存放標(biāo)題、表框等,所以加8
 ReDimFmt(.Fields.Count)
 Fori=0To.RecordCount 7
  strDy(i)=""    '初始置空
 Next
 Fori=0To.Fields.Count-1
Fmt(i)=getFmt(.Fields(i).Type,.Fields(i).Size)
'生成表格各列的格式字符串
  j=Len(.Fields(i).Name)
  Ifj >Len(Fmt(i))Then
   Fmt(i)=String$(Int((j/2) 0.5)*2,"@")
'標(biāo)題(字段名)字多則增大列寬
  EndIf
Next
  str="┃"
  str0="┏"
  str1="┠"
str2="┗"  '設(shè)定表格為粗框細(xì)線,
可根據(jù)需要改變
 Fori=0To.Fields.Count-1
  Forj=1ToLen(Fmt(i))/2
   str0=str0&"━"
   str1=str1&"─"
   str2=str2&"━"
  Next
  If(i=.Fields.Count-1)Then
   str=str&Format(.Fields(i).Name,Fmt(i))&"┃"
  Else
   str=str&Format(.Fields(i).Name,Fmt(i))&"│"
  EndIf
  If(i=.Fields.Count-1)Then
   str0=str0&"┓"
   str1=str1&"┨"
   str2=str2&"┛"
  Else
   str0=str0&"┯"
   str1=str1&"┼"
   str2=str2&"┷"
  EndIf
 Next
 strDy(0)="表格標(biāo)題"
 '通過在標(biāo)題前增加空格可使標(biāo)題居中
 strDy(1)=""
 strDy(2)=Format(Now,"打印日期:
yyyy年m月d日")
 strDy(3)=str0
 strDy(4)=str
 strDy(5)=str1
 intDc=6
 .MoveFirst
 DoWhileNot.EOF
 str="┃"
 Fori=0To.Fields.Count-1
   IfIsNull(.Fields(i).Value)Then  
'處理Null值
    Ifi=.Fields.Count-1Then
     str=str&Format("",Fmt(i))&"┃"
    Else
     str=str&Format("",Fmt(i))&"│"
    EndIf
   Else
    Ifi=.Fields.Count-1Then
     str=str&Format(Left$(.Fields(i).
Value,Len(Fmt(i))),Fmt(i))&"┃"
    Else
     str=str&Format(Left$(.Fields(i).
Value,Len(Fmt(i))),Fmt(i))&"│"
    EndIf
   EndIf
  Next
  strDy(intDc)=strDy(intDc)&str
  intDc=intDc 1
  .MoveNext
 Loop
 strDy(intDc)=str2
 EndWith
EndSub

----在實際編程中還要排除二進制數(shù)據(jù)字段,全角與半角字符的匹配調(diào)整,處理數(shù)據(jù)中出現(xiàn)的換行符、回車符、制表符,等等,限于篇幅,這里不于介紹。
----2.rdoResultset對象

----rdoResultset對象的表格自動生成方法與Recordset對象的方法相似,在處理過程中把Recordset對象的RecordCount屬性用rdoResultset對象的RowCount屬性替換,F(xiàn)ields集合用rdoColumns替換,F(xiàn)ield對象用rdoColumn替換,其余相同。例如:

----引用Data控件MyData結(jié)果集中第三個字段的名稱用:MyData.Recordset.Fields(3).Name。

----引用RDC控件MyRDC相應(yīng)字段的名稱用:MyRDC.Resultset.rdoColumns(3).Name。

三.表格的輸出
----表格的輸出包括二個部分,一是屏幕預(yù)覽,二是打印機輸出。屏幕預(yù)覽是把存放在數(shù)組中的表格通過在PictureBox控件上調(diào)用Print方法顯示出來而實現(xiàn)的。打印輸出是把同樣的內(nèi)容通過Printer對象的Print方法實現(xiàn)的。下面例示打印機輸出的實現(xiàn)方法:
 Printer.Font.Name="黑體" 
   '設(shè)置標(biāo)題

----屏幕預(yù)覽程序與打印機的輸出相同,只要把Printer對象換成PictureBox控件對象并使用相應(yīng)的對象屬性及方法,同時,在編程中還要處理
分頁、紙張、打印設(shè)置、字體、出錯等等,限于篇幅,這里不一一介紹。在控件中實現(xiàn)了字體及其大小的設(shè)置、紙張的設(shè)置、自動分頁、自動順序號,任選列的匯總、選擇打印、多份打印等功能,感興趣的朋友可與本人聯(lián)系。
----該控件在中文Windows95、VB5下運行通過。->


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 郓城县| 红河县| 陆丰市| 普宁市| 怀仁县| 郁南县| 庆阳市| 房产| 长葛市| 通辽市| 涟水县| 景谷| 前郭尔| 庄河市| 南投县| 岢岚县| 府谷县| 梁山县| 盘锦市| 稻城县| 伊金霍洛旗| 稷山县| 宽甸| 开化县| 普安县| 突泉县| 漳浦县| 靖安县| 广州市| 介休市| 太保市| 昭平县| 大安市| 侯马市| 民丰县| 衡山县| 图片| 陇川县| 右玉县| 门头沟区| 庐江县|