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

上传人:scccc 文档编号:12268607 上传时间:2021-12-02 格式:DOC 页数:6 大小:44.50KB
返回 下载 相关 举报
VB通用数据表格输出程序的设计..doc_第1页
第1页 / 共6页
VB通用数据表格输出程序的设计..doc_第2页
第2页 / 共6页
VB通用数据表格输出程序的设计..doc_第3页
第3页 / 共6页
亲,该文档总共6页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《VB通用数据表格输出程序的设计..doc》由会员分享,可在线阅读,更多相关《VB通用数据表格输出程序的设计..doc(6页珍藏版)》请在三一文库上搜索。

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

2、进行表格输出, 为此,编制了一个通用的数据表格输出控件, 能够根据查询的结果自动生成二维中文表格, 并打印输出,在此介绍给大家,共同探讨。一 VB 中的结果集VB 提供的数据访问方法有数据询问对象 (DAO) 、Data 控件、远程数据对象(RDO)、RemoteData控件 (RDC) 、ODBC API 、VB SQL 等,其中 ODBC API 比较复杂,开发、调试和支持非常困难; VB SQL 是针对 Microsoft SQL Server 的,这两种方法使用的比较少, 这里不做讨论。 比较常用的方法是 DAO 、Data 控件、RDO、RDC,其中 DAO 和 Data 控件使用的

3、结果集 (又叫纪录集 ) 包含在 Recordset 对象中, RDO 和 RDC 使用的结果集包含在 rdoResultset 对象中。通用表格输出的实现方法就是根据任意的 Recordset对象或 rdoResultset对象自动生成表格并输出。二表格的自动生成1. Recordset对象下面以 Data 控件为例,介绍Recordset对象的表格自动生成方法。假设有 Data 控件名称为 MyData,首先说明相关的内容及用法:(1) Data 控件的结果集包含在它的Recordset 对象中,引用方法 为 :MyData.Recordset。(2) Recordset 对象的 Reco

4、rdCount 属性为结果集的行数, 它决定了表格的长度,该属性引用方法为 : 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

5、 对象的 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 属性是该字段的值, 这是表格对应列的

6、内容, 引用方法为: MyData.Recordset.Fields(i).Value。1以上引用在 VB 中都可有多种引用方法, 这里使用的是比较明了的一种, 便于说明问题。注意:表格的自动生成可分为两个步骤。第一步,根据结果集中各字段的 Size 和 Type 属性,生成表格各对应列的宽度,用 Format 函数使用的格式字符串表示。下面的 Function getFmt()用来生成表格各列的格式字符串,调用时把 Field 对象的 Type 和 Size 属性值分别赋给形式参数 intType 和 logSize。Private Function getFmt(intType As In

7、teger, logSize As Long) As String Dim i As IntegergetFmt = ""'返回的结果串初始置空Select Case intTypeCase dbBooleangetFmt = getFmt & " 0; 1"'Boolean 型值转换为 0、 1,Case dbBytegetFmt = ""Case dbIntegergetFmt = ""Case dbLonggetFmt = ""Case dbCurrencygetF

8、mt = ""Case dbSinglegetFmt = ""Case dbDoublegetFmt = ""Case dbDategetFmt = ""Case dbBinarygetFmt = ""Case dbTextIf logSize >= 40 Then'限制一列最多打印40 个半角字符getFmt = " _"ElseFor i = 0 To CInt(logSize / 2) * 2 - 1getFmt = getFmt & "

9、"Next'调整数值长度为偶数,以适应汉字制表符End IfCase dbLongBinarygetFmt = ""2Case dbMemogetFmt = ""Case dbGUIDgetFmt = ""Case dbBigIntgetFmt = ""Case dbVarBinarygetFmt = ""Case dbCharFor i = 0 To CInt(logSize / 2) * 2 - 1getFmt = getFmt & ""Next

10、Case dbNumericFor i = 0 To CInt(logSize / 2) * 2 - 1getFmt = getFmt & ""NextCase dbDecimalFor i = 0 To CInt(logSize / 2) * 2 - 1getFmt = getFmt & ""NextCase dbFloatgetFmt = ""Case dbTimegetFmt = ""Case dbTimeStampgetFmt = ""End SelectEnd Func

11、tion第二步,取结果集的内容并根据各列的格式字符串生成表格, 生成的表格存放在字符串数组 strDy() 中,下面用 Sub Dy()例示这一步骤。Dim strDy() As String'存放格式化后的表格内容Dim Fmt() As String'存放表格各列的格式字符串'以上二个数组变量的元素个数根据结果集的行数和列数在程序中设定Dim str,str0,str1,str2 As String'临时使用的串变量Dim i,j As Integer'临时使用的整型变量Dim intDc As Integer '存放表格行数,实际上即是st

12、rDy() 的元素个数Private Sub Dy()3With MyData.Recordset.MoveLastReDim strDy(.RecordCount + 8)'需存放标题、表框等,所以加8ReDim Fmt(.Fields.Count)For i = 0 To .RecordCount + 7strDy(i) = "" ' 初始置空NextFor i = 0 To .Fields.Count - 1Fmt(i) = getFmt(.Fields(i).Type, .Fields(i).Size)'生成表格各列的格式字符串j = Len

13、(.Fields(i).Name)Ifj > Len(Fmt(i) ThenFmt(i) = String$(Int(j / 2) + 0.5) * 2, "")'标题 (字段名 ) 字多则增大列宽End IfNextstr = " "str0 = ""str1 = ""str2 = ""'设定表格为粗框细线,可根据需要改变For i = 0 To .Fields.Count - 1For j = 1 To Len(Fmt(i) / 2str0 = str0 & &

14、quot; "str1 = str1 & ""str2 = str2 & " "NextIf(i = .Fields.Count - 1) Thenstr = str & Format(.Fields(i).Name, Fmt(i) & " "Elsestr = str & Format(.Fields(i).Name, Fmt(i) & ""End IfIf (i = .Fields.Count - 1) Thenstr0 = str0 & &qu

15、ot; "str1 = str1 & " "str2 = str2 & " "Elsestr0 = str0 & " "str1 = str1 & ""str2 = str2 & " "End IfNextstrDy(0) = " 表格标题 "'通过在标题前增加空格可使标题居中4strDy(1) = ""strDy(2) = Format(Now, " 打印日期: yyyy 年 m 月 d

16、 日")strDy(3) = str0strDy(4) = strstrDy(5) = str1intDc = 6.MoveFirstDo While Not .EOFstr = ""For i = 0 To .Fields.Count - 1IfIsNull(.Fields(i).Value) Then'处理 Null 值Ifi = .Fields.Count - 1 Thenstr = str & Format(" ", Fmt(i) & " "Elsestr = str & Format

17、(" ", Fmt(i) & ""End IfElseIf i = .Fields.Count - 1 Thenstr = str & Format(Left$(.Fields(i).Value, Len(Fmt(i), Fmt(i) & " "Elsestr = str & Format(Left$(.Fields(i).Value, Len(Fmt(i), Fmt(i) & "End IfEnd IfNextstrDy(intDc) = strDy(intDc) & str

18、intDc = intDc + 1.MoveNextLoopstrDy(intDc) = str2End WithEnd Sub在实际编程中还要排除二进制数据字段, 全角与半角字符的匹配调整, 处理数据中出现的换行符、回车符、制表符,等等,限于篇幅,这里不于介绍。2rdoResultset对象rdoResultset对象的表格自动生成方法与 Recordset对象的方法相似, 在处理过程中把 Recordset对象的 RecordCount属性用 rdoResultset对象的 RowCount 属性替换, Fields 集合用 rdoColumns 替换, Field 对象用 rdoColu

19、mn 替换,其余相同。例如:引用 Data 控件 MyData 结果集中第三个字段的名称用:MyData.Recordset.Fields(3).Name引用 RDC 控件 MyRDC 相应字段的名称用:MyRDC.Resultset.rdoColumns(3).Name。5三表格的输出表格的输出包括二个部分, 一是屏幕预览, 二是打印机输出。 屏幕预览是把存放在数组中的表格通过在 PictureBox 控件上调用 Print 方法显示出来而实现的。打印输出是把同样的内容通过 Printer 对象的 Print 方法实现的。下面例示打印机输出的实现方法:Printer.Font.Name =

20、"黑体 "'设置标题字体Printer.Font.Size = 18'设置标题字体大小Printer.Print strDy(0)'打印标题Printer.Print strDy(1)'打印空行Printer.Font.Name = "楷体 _GB2312"'设置日期字体Printer.Font.Size = 16'设置日期字体大小Printer.Print strDy(2)'打印日期Printer.Font.Name = "宋体 "'设置表格字体Printer.Font.Size = 11'设置表格字体大小Printer.Print strDy(3)'以下打印表格内容Printer.Print strDy(4)For i = 6 To intDcIf i < intDc ThenPrinter.Print strDy(5)Printer.Print strDy(i)ElsePrinter.Print strDy(i) '表尾End IfNextPrinter.EndDoc'打印完成6

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1