学籍表:
id:学号
name:姓名
addr:住址成绩表:
id:学号
年级学期           subj1:科目1            subj2:科目2      subj3:科目3
  代号             order1:成绩1           order2:成绩2     order3:成绩3其中,学籍表和成绩表的记录是一对多的关系。学号id是全校唯一的。
成绩表是从一年级第一学期代号=1,一年级第一学期代号=2,二年级第一学期代号=3,依此类推。请问:怎么在vb的data report里制作标签打印如下的表格(A4纸,两列)?
--------------------------------------
|姓名:×××                        |姓名:××                       |
|地址:××××××××               |地址:××××××××            |
|                                   |                                |
| --------------------------------- | ------------------------------ |
|            成绩单                  |             成绩单             |
| 学期  语文   数学   体育    美术    | 学期  语文   数学   体育   美术 |
|  1   ***    ***    ***    ***     |  1    ***    ***   ***    ***  |
|  2   ***    ***    ***    ***     |  2    ***    ***   ***    ***  |
|  3   ***    ***    ***    ***     |  3    ***    ***   ***    ***  |
...........请教各位高手,谢谢!

解决方案 »

  1.   

    把你的数据库发给我,我试试
    [email protected]
      

  2.   

    谢谢大侠的帮忙!数据在这,另外给您发一份。不知sql server2000的数据库行不行?不行我再发文本的。
    谢谢先!CREATE TABLE [dbo].[学籍表] (
    [id] [nvarchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
    [name] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [addr] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL 
    ) ON [PRIMARY]
    GOCREATE TABLE [dbo].[成绩表] (
    [id] [nvarchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [sudj1] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [sudj2] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [sudj3] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [sudj4] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [order1] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [order2] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [order3] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [order4] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [xueqi] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL 
    ) ON [PRIMARY]
    GO/*---------成绩表-----------*/
     Insert into 成绩表 (id,sudj1,sudj2,sudj3,sudj4,order1,order2,order3,order4,xueqi) values ( '1', '语文', '数学', '体育', '美术', '85', '87', '93', '65', '1' );  Insert into 成绩表 (id,sudj1,sudj2,sudj3,sudj4,order1,order2,order3,order4,xueqi) values ( '1', '语文', '数学', '体育', '美术', '58', '77', '63', '60', '2' );  Insert into 成绩表 (id,sudj1,sudj2,sudj3,sudj4,order1,order2,order3,order4,xueqi) values ( '1', '语文', '数学', '体育', '美术', '88', '78', '68', '69', '3' );  Insert into 成绩表 (id,sudj1,sudj2,sudj3,sudj4,order1,order2,order3,order4,xueqi) values ( '2', '语文', '数学', '体育', '美术', '35', '77', '99', '68', '1' );  Insert into 成绩表 (id,sudj1,sudj2,sudj3,sudj4,order1,order2,order3,order4,xueqi) values ( '2', '语文', '数学', '体育', '美术', '48', '75', '69', '70', '2' );  Insert into 成绩表 (id,sudj1,sudj2,sudj3,sudj4,order1,order2,order3,order4,xueqi) values ( '2', '语文', '数学', '体育', '美术', '88', '58', '69', '65', '3' );  Insert into 成绩表 (id,sudj1,sudj2,sudj3,sudj4,order1,order2,order3,order4,xueqi) values ( '2', '语文', '数学', '体育', '美术', '78', '59', '59', '65', '4' );  Insert into 成绩表 (id,sudj1,sudj2,sudj3,sudj4,order1,order2,order3,order4,xueqi) values ( '3', '语文', '数学', '体育', '美术', '45', '76', '59', '63', '1' );  Insert into 成绩表 (id,sudj1,sudj2,sudj3,sudj4,order1,order2,order3,order4,xueqi) values ( '3', '语文', '数学', '体育', '美术', '78', '25', '63', '75', '2' );  Insert into 成绩表 (id,sudj1,sudj2,sudj3,sudj4,order1,order2,order3,order4,xueqi) values ( '3', '语文', '数学', '体育', '美术', '18', '28', '75', '645', '3' );  Insert into 成绩表 (id,sudj1,sudj2,sudj3,sudj4,order1,order2,order3,order4,xueqi) values ( '3', '语文', '数学', '体育', '美术', '38', '89', '79', '64', '4' );  Insert into 成绩表 (id,sudj1,sudj2,sudj3,sudj4,order1,order2,order3,order4,xueqi) values ( '4', '语文', '数学', '体育', '美术', '75', '77', '99', '68', '1' );  Insert into 成绩表 (id,sudj1,sudj2,sudj3,sudj4,order1,order2,order3,order4,xueqi) values ( '4', '语文', '数学', '体育', '美术', '68', '75', '69', '70', '2' );  Insert into 成绩表 (id,sudj1,sudj2,sudj3,sudj4,order1,order2,order3,order4,xueqi) values ( '4', '语文', '数学', '体育', '美术', '98', '58', '69', '65', '3' );  Insert into 成绩表 (id,sudj1,sudj2,sudj3,sudj4,order1,order2,order3,order4,xueqi) values ( '4', '语文', '数学', '体育', '美术', '74', '59', '59', '65', '4' );  Insert into 成绩表 (id,sudj1,sudj2,sudj3,sudj4,order1,order2,order3,order4,xueqi) values ( '4', '语文', '数学', '体育', '美术', '65', '76', '57', '62', '5' );  Insert into 成绩表 (id,sudj1,sudj2,sudj3,sudj4,order1,order2,order3,order4,xueqi) values ( '4', '语文', '数学', '体育', '美术', '75', '25', '65', '77', '6' );  Insert into 成绩表 (id,sudj1,sudj2,sudj3,sudj4,order1,order2,order3,order4,xueqi) values ( '4', '语文', '数学', '体育', '美术', '14', '28', '33', '63', '7' );  Insert into 成绩表 (id,sudj1,sudj2,sudj3,sudj4,order1,order2,order3,order4,xueqi) values ( '4', '语文', '数学', '体育', '美术', '39', '89', '67', '84', '8' ); /*---------学籍表-----------*/
     Insert into 学籍表 (id,name,addr) values ( '1', '黎明', '珠海市香洲区1号' );  Insert into 学籍表 (id,name,addr) values ( '2', '刘德华', '北京市朝阳区2号' );  Insert into 学籍表 (id,name,addr) values ( '3', '张惠妹', '台北市台中县3号' );  Insert into 学籍表 (id,name,addr) values ( '4', '窦唯', '北京市海淀区4号' ); 
    谢谢!
      

  3.   

    很简单。
    创建一个空表,然后分别把两个表的查询结果填入这个空表。给你看一篇文章。实用哦~实用技巧 数据报表设计器在多层结构开发的应用 
    珠海 
    刘平 
    ---- 在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下调试通过。