我需要在delphi中调用若干个已经制作完毕的水晶报表,这些水晶报表的数据源是服务器上的数据库,需要实现的功能是:
1.用户在delphi应用程序中可以自己选择报表统计的日期区间。
请问要用到哪个控件,参数如何设置?
2.用户可以刷新和保存报表中的数据。
水晶报表的数据库源有密码,请问我在delphi应用程序中怎么登录数据库?使用哪个控件,参数怎么设置?另外补充一个问题,在delphi中需要用到Report控件吗?目前我只用了Application和CRViewer控件,好像也能调用水晶报表,不知道什么情况下需要Report控件?我看到delphi中有Report,Application,ParameterValue,ParameterValueInfo,CRViewer,CRFields等等水晶报表控件,但是不知道怎么用,还请高手指点具体的使用方法,或者告知哪里有这方面的资料下载?感激不尽,定高分相赠。

解决方案 »

  1.   

    http://expert.csdn.net/Expert/TopicView1.asp?id=2843587建议使用VCL,可以连接很多数据库。
    可以设置过滤条件等。
      

  2.   

    用Crystal report 
    用控件:CRPE(在Delphi面板上DataAccess)
    建立连接:
          Crpe.ReportName := '';
          Crpe.Connect.ServerName := '';
          Crpe.Connect.DatabaseName := '';
          Crpe.Connect.UserID := '';
          Crpe.Connect.Password := '';
          Crpe.Connect.Propagate := True;
    SQL查寻:
          Crpe.SQL.Query.Text := '';
    给报表文本赋值:
          Crpe.TextObjects[2].Lines.Text := '';显示:
          Crpe.Show;
      

  3.   

    我的控件只用到一个TCrpe。水晶报表For Delphi控件的8.5版。
    CrpeReport:TCrpe;CrpeReport.ParamFields[i].CurrentValue := 某值;其中i是第几个参数。
    如果参数是日期时间,需要用这个函数:CrDateTimeToStr(日期时间值,false);设置数据库连接用
    CrpeReport.Connect.ServerName := 数据库服务器名
    CrpeReport.Connect.DatabaseName := 数据库名;
    CrpeReport.Connect.UserID := 用户ID;
    CrpeReport.Connect.Password := 用户密码;如果你装了控件,应该装了帮助的,里面东西还挺全的,自己看看就可以了。
      

  4.   

    请问eastliangliang(青苹果):
    “CrpeReport.ParamFields[i].CurrentValue := 某值;其中i是第几个参数。”
    我如何获知我所用的报表的日期参数的i值是多少?我需要在制作水晶报表模板时就把日期字段设为参数吗?还是说只需要在delphi中直接将日期字段视为参数,通过用户输入来赋值就行了?
      

  5.   

    制作水晶报表模板时就把日期字段设为参数。外部传递进去的CurrentValue都是字符串,我是用的Delphi的DateTimePicker控件提取用户输入,所以用函数CrDateTimeToStr(日期时间值,false);转换成字符串。
      

  6.   

    我点了crpe的refresh按钮之后报表变成空的了,并没有更新数据,这是为什么?是不是要对refresh按钮另外写事件?
    什么情况下才会弹出登录数据库的窗口?
      

  7.   

    水晶报表For Delphi控件的8.5版,那里有下载?有安装注册码和使用注册码吗?
      

  8.   

    to firmamenthy:
    控件在...borland\delphi6\Crystal目录下
    to eastliangliang(青苹果):
    如果要刷新数据的话是不是就只能先打开水晶报表,刷新,然后启动delphi应用程序?
    就不能在delphi中由用户自己刷新吗?
      

  9.   

    你不是要用Delphi调用设计好的水晶报表吗?当然是启动你的应用程序,然后设置好报表的数据库连接属性,设置报表名称,报表的参数,然后执行报表,如果你的报表内存有设计时留下的数据,用DiscardSavedData方法去掉它们,你说的刷新是不是就是指去掉报表设计时留下的数据呢?
      

  10.   

    我是想让用户能够在应用程序中调取最新的数据,而不是非得先使用水晶报表刷新然后再运行delphi应用程序才能获得最新数据。
    我刚才这样试过了:
      Crpe1.ReportName:='e:\Report1.rpt';
      Crpe1.Connect.DatabaseName:='databasename';
      Crpe1.Connect.Password:='password';
      Crpe1.Connect.Propagate:=true;
      Crpe1.Connect.ServerName:='oraclea';
      Crpe1.Connect.UserID:='userid';
      Crpe1.DiscardSavedData;
      Crpe1.Refresh;
      Crpe1.Execute;
    但是运行发生异常,这是为什么?
      

  11.   

    异常都有错误代码的,水晶报表的帮助里有错误代码相应的错误信息。看一下是什么错误,另外,不用写Crpe1.Refresh啊。