我是用VB6.0 + SQL2000 + CRYSTAL REPORT 9.2 ,现在数据库中有2张表B1、B2B1中的表结构是编号  姓名
001   AA
002   BB
.
.
.
B2的表结构是编号   工作经历
001     1-XXXXXX
001     2-XXXXXX
002     1-XXXXXX
002     2-XXXXXX
.
.
.
现在我要从表1中取出一个编号,先要将该编号传递到报表中,然后从报表中得到该编号,并从表2中取出符合该编号的内容,这个要怎么实现。最好能有源代码,完成一定给分,谢谢!

解决方案 »

  1.   

    CRYSTAL REPORT 9.2
       如何去下载???
      

  2.   

    下载9.2:
    http://soft.0zones.com/SoftView/SoftView_5147.html
      

  3.   

    http://soft.0zones.com/SoftView/SoftView_5147.html
      

  4.   

    create view test
    as
    select * from b1,b2 where b1.编号=b2.编号然后在水晶报表里基于test设计报表就可以了,代码就这么简单
      

  5.   

    谢谢你walkonthesky,想问一下这里TEST是指什么呢,呵呵,比较笨。我现在在报表中建立一个参数字段 ddh ,现在将变量 ldh 的值传递进报表,我是这么写的REPORT.ParameterFields.GetItemByName("ddh").AddCurrentValue (ldh)但是我一运行报表的时候就会出错,提示:登录失败。
    详细资料:28000:[Microsoft][ODBC SQL Server Driver][SQL Server]用户“aa"登录失败。这个是什么原因呢??
      

  6.   

    呵呵,刚刚发现是自己数据库没连接好但是现在重新连接好以后,运行还是有问题错误提示:
    登录失败。
    详细资料:ADO Error Code:0x80040e4d
    Source:Microsoft OLE DB Provider for SQL Server
    Description:用户'aa'登录失败 
    SQL state:42000
    Native Error:18456
    这是什么原因呢,请指点一下,谢谢啦!
      

  7.   

    想传参数值简单啊,你这样试试,把参数值当作sql语句的一个字段传进去不就行了,比如,想穿个日期进去这样写:select '2004-10-10' as data,recid,name,....from [表名]在报表中使用字段data 不就行了。
      

  8.   

    可以这么写sql="select '" & ldh &"' as data,recid,name,... from [表名]不过你上面用的方法:REPORT.ParameterFields.GetItemByName("ddh").AddCurrentValue (ldh)一样可以传进去,是正路,我这种方法也行。你上面说的登陆失败的原因我也不太清楚,可能是sql语句哪有问题吧。
      

  9.   

    我完整的代码是这么写的
    Private Sub Command1_Click()Dim CRY As CRAXDRT.Report
      Dim CRYAT As New CRAXDRT.Application
      Set CRYAT = New CRAXDRT.Application
      Set CRY = CRYAT.OpenReport(App.Path + "\htdy.rpt")
      
      CRY.ParameterFields.GetItemByName("ddh").ClearCurrentValueAndRange
      
      CRY.ParameterFields.GetItemByName("ddh").AddCurrentValue (ldh)
      
      bbdy.CRViewer91.ReportSource = CRY
      bbdy.CRViewer91.Refresh
      bbdy.CRViewer91.ViewReport
      
      bbdy.Show 1  
    End Sub但是运行就是会出现上边的错误我发现在设计报表的时候通过OLE DB 建立连接到SQL数据库,但是过一会再去“数据库-->数据库专家”里边查看“当前连接”的时候发现连接“未找到项目”,需要重新连接,会不会是和这有关系呢??有没有知道原因的呢,如果知道请指教一下,万分感谢!
      

  10.   

    你应该在程序中把数据库连接加上:
    adoRs.Open strSQL, conn, adOpenDynamic, adLockBatchOptimistic
    Report.Database.SetDataSource adoRs
    CRViewer91.ReportSource = Report
    CRViewer91.ViewReport
      

  11.   

    to gaojian530:这里是不是要在 strSQL里边写上SQL查询语句?
      

  12.   

    是的strSQL里写查询语句,conn是adodb的连接对象
      

  13.   

    test就是你的视图名字,你可以选任意的名字
      

  14.   

    唉,还是不行呀,还是提示这个错误:登录失败。
    详细资料:ADO Error Code:0x80040e4d
    Source:Microsoft OLE DB Provider for SQL Server
    Description:用户'aa'登录失败 
    SQL state:42000
    Native Error:18456可是都已经把连接写上了,为什么还会这样呢?
      

  15.   

    是不是在报表里边还要设置什么呢,我后来在报表中把所有数据都清除,留下标题,运行后提示“下标越界”,指向这一句CRY.Database.SetDataSource nRst是不是这句有问题?
      

  16.   

    vs.net里的水晶报表使用dataset数据源提示“登录失败”,这是水晶报表的一个bug,需要打补丁。相关讨论:http://expert.csdn.net/Expert/topic/2173/2173961.xml 
    push方式,不存在登录数据库的问题。这是crystal的一个bug,到crystal官方网站上去搜一下这个补丁:CR90DBEXWIN_EN.ZIP补丁在:http://support.crystaldecisions.com/communityCS/FilesAndUpdates/cr90dbexwin_en.zip.asp
      

  17.   

    非常感谢提供这个补丁的信息还要在请问一下,什么样是PUSH的方式呢,那个讨论的页面打不开呀。
      

  18.   

    不是,我是用VB6.0的如果
    adoRs.Open strSQL, conn, adOpenDynamic, adLockBatchOptimistic
    Report.Database.SetDataSource adoRs 
    连接上了,在报表中怎么调出SQL语句中取的字段啊?
      

  19.   

    在报表中用向导把sql语句加上,在报表中会显示这些字段,然后把字段摆放一下就可以了。
      

  20.   

    to gaojian530:是通过什么向导把SQL语句加上啊,小弟我是真的不懂呀,能说的详细点么,谢谢啦!
      

  21.   

    to gaojian530 老兄,教教我怎样把SQL语句加上吧,我这报表就差这一步啦,拜托了!
      

  22.   

    select * from b2 where id in (select id from  b2 where 编号='001')