163K网站系统官方论坛's Archiver

hongji 发表于 2007-2-16 18:21

.net教程:在vb中使用水晶报表的一种简易编程方法

[size=3]第一步:
在vb工程中project菜单加入"add crystal report 9",报表名使用默认即可。这时form2(crystal rerport自动添加的form,假设名为form2)被自动分配了如下代码:
option explicit
dim report as new cystal1
private sub form_load()
screen.mousepointer = vbhourglass     '调用水晶报表时置鼠标为沙漏状
crviewer91.reportsource = report     '该语句的赋值将在后面被修改
crviewer91.viewreport
screen.mousepointer = vbdefault       '调用水晶报表完成后置鼠标为默认形状
end sub
private sub form_resize()
crviewer91.top = 0
crviewer91.left = 0
crviewer91.height = scaleheight
crviewer91.width = scalewidth
end sub
第二步:
点击crystal report设计器的"数据库字段",选定"数据库专家...",然后点"创建新连接",再点"仅字段定义",创建"数据库定义"文件,字段名和宽度和原数据库表保持一致。最后,在数据库字段中获得了相应字段,将其置于报表上,按水晶报表的要求配置。
第三步:
该步骤非常关键,添加一个modual到工程文件中,定义全局的adodb变量,实现数据库和水晶报表的动态连接。代码如下:
public conn as new adodb.connection
public rs as new adodb.recordset
第四步:
关于vb程序的ado数据库连接注意事项,请看下面的打印按钮例程。
private sub command1_click()
    dim connstr as string
    if conn.state = adstateopen then conn.close
   
    connstr = "provider=microsoft.jet.oledb.4.0;data source=" & app.path & "\prtest.mdb;persist security info=false"    'prtest.mdb是程序当前目录的测试access数据库

   
    conn.connectionstring = connstr
   
    conn.open
   
    conn.cursorlocation = aduseclient
   
    if rs.state = adstateopen then rs.close
   
    rs.open "test", conn, adopenkeyset, adlockreadonly
   
'    report.database.setdatasource rs, 3, 1  '此行取消
   
    form2.show 1   '数据库连接完成后,调用form2水晶报表工程
   
   
end sub
需要提请大家注意的是,上面代码中的report.database.setdatasource rs, 3, 1是初用水晶报表的程序员容易犯的错误,使用该语句后将造成数据库和水晶报表的连接失败。如何动态调用水晶报表呢?请看第五步。
第五步:
创建水晶报表和数据库数据源的连接,需要修改上面form2的代码。
option explicit
'dim report as new cystal1
'上面一行取消
private sub form_load()
dim oapp as new craxdrt.application
dim orpt as craxdrt.report
dim reportname as string
'上面三行是新增加的
screen.mousepointer = vbhourglass

reportname = "\rpt\pr1.rpt"      '定义要引用的rpt文件
set orpt = oapp.openreport(app.path & reportname, 1)
orpt.database.setdatasource rs    '连接水晶报表和数据源
orpt.readrecords
crviewer91.reportsource = orpt  '启用水晶报表的预览功能
crviewer91.viewreport
screen.mousepointer = vbdefault

end sub
private sub form_resize()
crviewer91.top = 0
crviewer91.left = 0
crviewer91.height = scaleheight
crviewer91.width = scalewidth
end sub
private sub form_unload(cancel as integer)
   
    'set report = nothing
   
    set rs = nothing
   
    set conn = nothing
   
    unload form2
   
end sub
      上面介绍了在vb中使用水晶报表进行报表开发的一种方法,该方法简单易用,适合初学者上手。



[/size]

ioio123 发表于 2007-3-13 10:29

正在学习中..........

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.