VB通用数据表格输出程序的设计

2008-02-23 06:55:40来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

---- 做为一种简捷、系统的 Windows应用程序开发工具,Visual Basic 5 具有强大的数据处理能力,提供了多种数据访问方法,可以方便地存取Microsoft SQL Server、Oracle、XBase等多种数据库,被广泛应用于建立各种信息管理系统。但是,VB缺乏足够的、符合中文习惯的数据表格输出功能。虽然使用Crystal Report控件及 Crystal Reports程序可以输出报表,但操作很麻烦,中文处理能力也不理想,特别是不能够用来制作不确定内容的表格。笔者在用VB开发淮北市医疗保险信息管理系统时,需要对任意的查询结果进行表格输出,为此,编制了一个通用的数据表格输出控件,能够根据查询的结果自动生成二维中文表格,并打印输出,在此介绍给大家,共同探讨。

一.VB 5中的结果集
---- VB 5提供的数据访问方法有数据询问对象(DAO)、Data控件、远程数据对象(RDO)、RemoteData控件 (RDC)、ODBC API、VB SQL等,其中ODBC API比较复杂,开发、调试和支持非常困难;VB SQL是针对Microsoft SQL Server的,这两种方法使用的比较少,这里不做讨论。比较常用的方法是DAO、Data控件、RDO、RDC,其中DAO和Data控件使用的结果集 (又叫纪录集) 包含在Recordset对象中,RDO和RDC使用的结果集包含在rdoResultset对象中。通用表格输出的实现方法就是根据任意的Recordset对象或rdoResultset对象自动生成表格并输出。
二.表格的自动生成
---- 1. Recordset对象
---- 下面以Data控件为例,介绍 Recordset对象的表格自动生成方法。

---- 假设有Data控件名称为MyData,首先说明相关的内容及用法:

---- (1) Data控件的结果集包含在它的 Recordset对象中,引用方法为: MyData.Recordset。

---- (2) Recordset 对象的 RecordCount属性为结果集的行数,它决定了表格的长度,该属性引用方法为: MyData.Recordset.RecordCount。

---- (3) Recordset 对象包含一个Fields集合,通过Fields集合的 Count属性可以得到结果集中字段的个数,用做表格的列数,该属性引用方法为: MyData.Recordset.Fields.Count。

---- (4) Fields集合包括结果集合全部 Field对象,这些 Field对象引用方法为: MyData.Recordset.Fields(i),其中 i是该 Field对象在中的位置序号,从 0开始计数。

---- (5) Field 对象的Name属性是该字段的名称,用做表格对应列的名称,引用方法为:MyData.Recordset.Fields(i).Name。

---- (6) Field 对象的Size属性是该字段数据的最大尺寸,引用方法为:MyData.Recordset.Fields(i).Size。

---- (7) Field 对象的Type属性是该字段数据的类型,引用方法为:MyData.Recordset.Fields(i).Type。

---- 用Field 对象的Size和Type属性可以计算出表格对应列的宽度。

---- (8) Field 对象的 Value属性是该字段的值,这是表格对应列的内容,引用方法为:MyData.Recordset.Fields(i).Value。

---- 以上引用在VB中都可有多种引用方法,这里使用的是比较明了的一种,便于说明问题。

---- 表格的自动生成可分为两个步骤:

---- 第一步,根据结果集中各字段的Size和Type属性,生成表格各对应列的宽度,用Format函数使用的格式字符串表示。

---- 下面的 Function getFmt()用来生成表格各列的格式字符串,调用时把Field 对象的Type和Size属性值分别赋给形式参数intType和logSize。

  Private Function getFmt(intType As Integer,
logSize As Long) As String
  Dim i As Integer
  getFmt = ""        
  '返回的结果串初始置空
  Select Case intType
   Case dbBoolean
    getFmt = getFmt & "\ \ \ \0;\ \ \ \1"
'Boolean 型值转换为0、1,
   Case dbByte
    getFmt = "@@@@"
   Case dbInteger
    getFmt = "@@@@@@"
   Case dbLong
    getFmt = "@@@@@@@@@@"
   Case dbCurrency
    getFmt = "@@@@@@@@@@"
   Case dbSingle
    getFmt = "@@@@@@@@@@"
   Case dbDouble
    getFmt = "@@@@@@@@@@"
   Case dbDate
    getFmt = "@@@@@@@@@@"
   Case dbBinary
    getFmt = "@@@@"
   Case dbText
    If logSize >= 40 Then
  '限制一列最多打印40个半角字符
getFmt = "@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@"
    Else
     For i = 0 To CInt(logSize / 2) * 2 - 1
      getFmt = getFmt & "@"
     Next  '调整数值长度为偶数,
以适应汉字制表符
    End If
   Case dbLongBinary
    getFmt = "@@@@"
   Case dbMemo
    getFmt = "@@@@@@@@@@@@@@@@"
   Case dbGUID
    getFmt = "@@@@"
   Case dbBigInt
    getFmt = "@@@@@@@@@@"
   Case dbVarBinary
    getFmt = "@@@@"
   Case dbChar
    For i = 0 To CInt(logSize / 2) * 2 - 1
     getFmt = getFmt & "@"
    Next
   Case dbNumeric
    For i = 0 To CInt(logSize / 2) * 2 - 1
     getFmt = getFmt & "@"
    Next
   Case dbDecimal
    For i = 0 To CInt(logSize / 2) * 2 - 1
     getFmt = getFmt & "@"
    Next
   Case dbFloat
    getFmt = "@@@@@@@@@@"
   Case dbTime
    getFmt = "@@@@@@@@"
   Case dbTimeStamp
    getFmt = "@@@@@@@@@@"
  End Select
  End Function

---- 第二步,取结果集的内容并根据各列的格式字符串生成表格,生成的表格存放在字符串数组 strDy()中,下面用Sub Dy()例示这一步骤。
  Dim strDy() As String   
'存放格式化后的表格内容
  Dim Fmt() As String   
  '存放表格各列的格式字符串
    '以上二个数组变量的元素个数根

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:如何在VB中实现绘图区的大十字光标

下一篇:VB5.0数据库编程经验小集