⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 97.txt

📁 介绍VB里的各种控件的使用方法,窗口控制,图像编程以及OCX等内容,还提供了一个API集供参考.
💻 TXT
字号:
数据报表设计器在多层结构开发的应用 
珠海 
刘平 
---- 在Visual Basic中制作报表,一般是用数据环境设计器(Data Environment Designer)与数据报表设计器(Data Report Designer)相结合来实现的。上述方法通常应用于客户/服务器(C/S)结构。下面,让我们一起来探讨一下Data Report Designer 在多层结构中的应用。 

---- 一 、前言 

---- 多层应用开发之所以能够成为程序开发的主流技术,是与其具有的数据访问和事务处理能力紧密相关的。多层应用开发在逻辑上则分为三层:客户(表现层),应用服务器(业务层)和数据库(数据层)。客户向服务器发请求,作为中间层的服务器接收请求提供相应的逻辑、性能和目录服务,并最终通过服务器建立与数据库的连接。多层应用开发中很重要的一点是将应用逻辑集中于服务器,这样一个进程便可以为多个客户服务,而不用再为每客户都建立一个服务器进程。下文可作为表现层的一个例子。 

---- 二、数据结构 

---- 假设我们要打印两项数据,其定义如下: 

字段名      数据类型         数据长度
  tid         char              10
  tname      char              20

---- 三、创建工程 

---- (1)在新建工程中选取“标准 EXE”后按“确定”键,修改工程名为Rptprint,修改Form1的name 属性为 frmreport。增加一个类模块,修改Class1的name 属性为clsreport。如果在“工程”菜单中未发现“添加Data Report”的子菜单,则要进行以下操作,单击“工程”菜单中的“部件”,选中“设计器”中的“Data Report”选项后单击“确定”按钮。此时应在“工程”菜单中发现“添加Data Report”的子菜单,单击该子菜单添加一个Data Report 到工程。 

---- (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)引用Microsoft ActiveX Data Objects 2.0 Library类库,做完以上操作后保存工程。 

---- 四、编写程序 

---- (1)在clsreport 类模块输入如下代码: 

    Option Explicit
    Private RST_RPT As ADODB.Recordset
    '定义一个记录集变量
    
    Private Sub Class_Initialize()
          Set RST_RPT = CreateObject("ADODB.Recordset")
          '创建一个空的记录集
          With RST_RPT
              .Fields.Append "tid", adChar, 10
              .Fields.Append "tname", adChar, 20
              '往记录集中添加字段(此例假设只有两个,
              如需要可增加多个字段)
              .CursorLocation = adUseClient
              '设置CursorLocation属性为“客户端游标”
          End With
    
          RST_RPT.Open
          '打开记录集
          
          Set DataReport1.DataSource = RST_RPT
          '设置DataReport1设计器的数据源为 RST_RPT 记录集
    End Sub
    Private Sub Class_Terminate()
          If Not RST_RPT Is Nothing Then
            RST_RPT.Close
             '关闭记录集
          End If
          
          Set RST_RPT = Nothing
          '撤消对象
    End Sub
      
Public Function AddRecord(strdata
() As String) As Boolean
     
        On Error GoTo errdo
        '错误捕获
      
        With RST_RPT
            .AddNew
            !tid = strdata(1)
            !tname = strdata(2)
            '给记录集赋值
            .Update
            '更新修改
        End With
        AddRecord = True
        '如果成功则返回“真”
    Exit Function
    
    errdo:
        '可根据需要对错误进行分类处理
        '方法可查阅随机文档的“调试代码和处理错误”部分
        '此例省略
        AddRecord = False
        '如果失败则返回“假”
        Set RST_RPT = Nothing
        '撤消对象
    End Function
    
    Public Function Print_Report() As Boolean
    
        On Error GoTo errdo
        
        If Not RST_RPT Is Nothing Then
          Set DataReport1.DataSource = RST_RPT
          '重置数据源
        End If
        
        DataReport1.PrintReport
        '直接打印
        Print_Report = True
        '如果成功则返回“真”
    Exit Function
    errdo:
        Print_Report = False
        '如果失败则返回“假”
    End Function
    
    Public Function Show_Report() As Boolean
    
        On Error GoTo errdo
        
        If Not RST_RPT Is Nothing Then
          Set DataReport1.DataSource = RST_RPT
          '重置数据源
        End If
        
        DataReport1.Show
        '浏览
        Show_Report = True
        '如果成功则返回“真”
    Exit Function
    errdo:
        Show_Report = False
        '如果失败则返回“假”
    End Function
    
---- (2)在frmreport 窗体输入如下代码: 

    Option Explicit
    Private obj As clsReport
    '定义局部变量
    
    Private Sub Command1_Click()
        Dim b1 As Boolean
        Dim sd(2) As String
        Dim mg As Integer
        
        sd(1) = Trim(TextID.Text)
        sd(2) = Trim(TextName.Text)
        '把要打印的数据赋给sd数组,此例的数据来自文本框。
        '在多层开发应用中数据源通常是通过业务层和数据层处理
        '后返回的记录集(如ADODB.Recordset),把记录集
        '赋给sd数组,即可打印。注意要保持记录集的字段数
        '与设计器的文本框数一致。
        b1 = obj.AddRecord(sd) '增加记录
        If b1 = True Then
           mg = MsgBox("增加记录成功!", vbOKOnly, "打印消息")
        Else
           mg = MsgBox("增加记录失败!", vbOKOnly, "打印消息")
        End If
    End Sub
    
    Private Sub Command2_Click()
        Dim b1 As Boolean
        Dim mg As Integer
        
        b1 = obj.Show_Report '浏览记录
        If Not b1 Then
           mg = MsgBox("浏览操作失败!", vbOKOnly, "打印消息")
        End If
    End Sub
    
    Private Sub Command3_Click()
        Dim b1 As Boolean
        Dim mg As Integer
        
        b1 = obj.Print_Report '打印报表
        If Not b1 Then
           mg = MsgBox("打印操作失败!", vbOKOnly, "打印消息")
        End If
    End Sub
    
    Private Sub Command4_Click()
        Unload Me
        '关闭窗口
    End Sub
    
    Private Sub Form_Load()
        Set obj = New clsReport
        '创建对象实例
    End Sub
    
    Private Sub Form_Unload(Cancel As Integer)
        Set obj = Nothing
        '撤消对象
    End Sub

---- 五、小结 

---- 上例具有如下特点:(1)组织数据很灵活,既可以是本地数据也可以是记录集或者俩者相结合。(2)程序运行速度很快,它比用VB生成Excel报表快得多。(3)易于移植,只要建立ActiveX DLL 工程,加入clsReport和DataReport1模块编译成动态库,即可被其他应用程序调用。建议:可修改clsReport类模块的属性把它直接作为DataReport1数据源,关于类模块的详细用法可查阅有关文档。本例用Visual Basic 6.0(专业版)编写,在Windows95下调试通过。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -