本帖最后由 mikyy 于 2009-07-30 17:01:40 编辑

解决方案 »

  1.   

    第二张图是rave中的数据,是通过连接SQL Server 2005数据库来的,有2009/07/28、2009/07/29、2009/07/30 共3天的数据,我希望输入日期就能查到当天的所有内容,怎么实现?谢谢。
      

  2.   

    第二张图是rave中的数据,是通过连接SQL Server 2005数据库来的,有2009/07/28、2009/07/29、2009/07/30 共3天的数据,我希望输入日期就能查到当天的所有内容,怎么实现?谢谢。
      

  3.   

    你的图我看不到你可以用下面的程序
    adoquery1.sql.text:='select 你要的字段 from 你的表 where 日期字段='''+edit1.text+'''';ps:我建议你不要用edit输入日期,防止出错,最好用datetimepicker
    程序:
    adoquery1.sql.text:='select 你要的字段 from 你的表 where 日期字段='''+datetostr(datetimepicker1.date)+'''';
      

  4.   

    你的程序版面应该有个查询之类的按钮吧,一按键就显示当前日期的记录,然后再打印?
    如果是这样,把下面的程序放入你的查询按钮下面
    adoquery1.active:=false;
    adoquery1.sql.clear;
    adoquery1.sql.text:='select 你要的字段 from 你的表 where 日期字段='''+edit1.text+''''; 
    adoquery1.active:=true;这样你就能看到某天的数据了,打印部分是不用修改了
      

  5.   

    不知道怎么把图片放上来?
    我是这样做的:
    1、我有个SQL Server 2005 的服务器数据库,数据库名为QJLT,里面有几张表,分别为AD01、AD02、AD03、AD04、.....
    2、表的格式为:序号、日期、规格、硫化开始.......
    3、表的内容为:序号是1、2、3、4、...数字
                   日期是:2009/07/28、2009/07/29、2009/07/30、....每个日期下有多条记录
                   规格是:中文的字符.....
    4、在Delphi上新建项目>放:database、datasorse、ADOQuery、Rvdatasetconnection、Rvproject、Rvsystem、edit、Button、Quuery.
        分别设置:database> AliasName:QJLTDATA(在ODBC中建的)、DatabaseName:qjlt、Conneted:True
        datasorse> Dataset:ADOQuery1
        ADOQuery> ConnetionSetring:数据源>QJLTDATA;要使用的初始目录>QJLT、Active:True
        Rvdatasetconnection> Dataset:Quuery1
        Rvproject> RvprojectFile:链接到已经做好的一个rave做好的.rav项目文件上
        Button> 程序如下:
                 if trim (edit.text) = '' then
                begin
                  showmessage ('请输入查询日期!');
                    exit;
                end;
                with adoquery1 do
                begin
                  adoquery1.active :=false;
                  adoquery1.sql.clear;
                  adoquery1.sql.text := 'select 日期 from AD01 Where 日期 ='''+edit1.text+'''';
                  adoquery1.active :=ture;
                  open;
                 end;
                 rvproject1.Execute;
    5、当Delphi运行时在Edit中输入:2009/07/30,点击Button,显示的报表还是:2009/07/28、2009/07/29、2009/07/30 三天的内容都有。
    6、不知道我的问题出在哪里?望能解决,谢谢!
      

  6.   

    我只希望点击按钮时显示的是Edit输入日期的所有内容,不需要其他的。
      

  7.   

    Rvdatasetconnection> Dataset:Quuery1 
    改为Rvdatasetconnection> Dataset:adoQuuery1 你的查询的数据集用的adoquery,打印用的是query,查询的结果就没有意义了
      

  8.   

    这样的话所有显示的是 invalid
      

  9.   

    老大,你把query的语句写出来吧
      

  10.   

    忘记了一点:在ADOQuery 的 SQL TStrings 中写有一句:select 序号 as S1, 日期as S2, 规格as S3, 硫化开始as S4, 内压as S5, 内温as S6, 外温as S7, 硫化结束as S8, 硫化时间as S9, 硫化延时as S10 from AD01
      

  11.   

    Query 的 SQL TStrings 中写有一句:select 序号 as S1, 日期as S2, 规格as S3, 硫化开始as S4, 内压as S5, 内温as S6, 外温as S7, 硫化结束as S8, 硫化时间as S9, 硫化延时as S10 from AD01DatabaseName:QJLTDATA
    Avtive:Ture
      

  12.   

    你把rave的dataview的字段 refresh一次吧
      

  13.   

    要打开rave 的右边树结构下的DataView1 右键 refresh 吗?试了 还是 invalid 太晕了
      

  14.   

    是不是select 序号 as S1, 日期as S2, 规格as S3, 硫化开始as S4, 内压as S5, 内温as S6, 外温as S7, 硫化结束as S8, 硫化时间as S9, 硫化延时as S10 from AD01 这个有问题啊?
      

  15.   

    拿个dbgrid显示一下adoquery的内容
      

  16.   

    运行点击查询时显示 2009/07/30,就是Edit 输入的内容
      

  17.   

    Button> 程序如下: 
                if trim (edit.text) = '' then 
                begin 
                  showmessage ('请输入查询日期!'); 
                    exit; 
                end; 
                with adoquery1 do 
                begin 
                  adoquery1.active :=false; 
                  adoquery1.sql.clear; 
                  adoquery1.sql.text := 'select 序号 as S1, 日期as S2, 规格as S3, 硫化开始as S4, 内压as S5, 内温as S6, 外温as S7, 硫化结束as S8, 硫化时间as S9, 硫化延时as S10 from AD01  Where 日期 ='''+edit1.text+''''; 
                  adoquery1.active :=ture; 
                  open; 
                end; 
                rvproject1.Execute; 
      

  18.   

    哈哈,你太有才了,50分给你了,太感谢了。
    再问下,我想再做个Edit 输入或选择不同的表好做吗?
      

  19.   

    这个都可以
    1:想再做个Edit 输入adoquery1.sql.text := 'select 序号 as S1, 日期as S2, 规格as S3, 硫化开始as S4, 内压as S5, 内温as S6, 外温as S7, 硫化结束as S8, 硫化时间as S9, 硫化延时as S10 from AD01  Where 日期 ='''+edit1.text+''' and 你要的字段=你的值';2: 选择不同的表adoquery1.sql.text := 'select 序号 as S1, 日期as S2, 规格as S3, 硫化开始as S4, 内压as S5, 内温as S6, 外温as S7, 硫化结束as S8, 硫化时间as S9, 硫化延时as S10 from '+edit2.text+'  Where 日期 ='''+edit1.text+''' and 你要的字段=你的值';
      

  20.   

    我在RAVE下加了个DATATEXT控件,在其DATAFIELD属性做关的设置,有当前页和总页数,日期,但是显示时全部是连在一起的,怎么分开,我想显示  共N页 第N页 怎么做?
      

  21.   

    表头的设置参看下面的程序吧
    var
      MyPage: TRavePage;
      MyText1,mytext2,mytext3,mytext4: TRaveText;    RvProject1.Open;
        MyPage := RvProject1.ProjMan.FindRaveComponent('Report1.Page1',nil) as TRavePage;
        MyText1 := RvProject1.ProjMan.FindRaveComponent('Text3',MyPage) as TRaveText; //Text3为text的名字 
        MyText1.Text :=formatdatetime('yyyy-mm-dd',datetimepicker1.Date);
        MyText2 := RvProject1.ProjMan.FindRaveComponent('Text2',MyPage) as TRaveText;
        MyText2.Text :=formatdatetime('yyyy-mm-dd',datetimepicker2.Date);
        mytext3:=RvProject1.ProjMan.FindRaveComponent('Text5',MyPage) as TRaveText;
        MyText3.Text :='编报单位:'+dwmc;
        mytext4:=RvProject1.ProjMan.FindRaveComponent('Text25',MyPage) as TRaveText;
        mytext4.text:='编报日期:'+formatdatetime('yyyy-mm-dd',date);
        RvProject1.Execute;
        RvProject1.Close;页码的获得用dataText.将其DataView属性设为DataView1,DataField属性窗口中的
    report variables选项中选currentPage后点Insert Report Var按钮后再点OK按钮确定. (当前页数)
    report variables选项中选TotalPages后点Insert Report Var按钮后再点OK按钮确定. (总页数)
      

  22.   

    太感谢了,刚刚用其他方式实现了,不过没你这个好。
    刚刚网络有问题,没发上来,还请教几个问题:
    1、我在运行打开Rave报表时,如何让rave的表头跟着我选择不同的表跟着变?例如,我选择AD02时,表头跟着会显示02#数据记录表。
    2、用combonbox做下拉菜单选择表AD01、AD02、....时,只能在combonbox的Items的TStrings中填入AD01、AD02、....,但是这个是数据库中直接的表名,用户看不懂的,如何实现用户在选择combonbox时显示01#记录表、02#记录表、...而能直接对应AD01、AD02、....的数据?
      

  23.   


    1:你的表头应该是一个text吧?可以参照27楼的程序
    2:这个你可以用
    if combobox1.itemindex=0 then   //选择的第一项
      选择的是ado1或者 if combobox1.text='01#记录表' then
            选择的是ado1 
      

  24.   

    2:这个你可以用 
    if combobox1.itemindex=0 then  //选择的第一项 
      选择的是ado1 或者 if combobox1.text='01#记录表' then 
            选择的是ado1 这个语句是放在Button下吗?语句是不是:
    if combobox1.text='01#记录表' then AD01;
    对吗?提示AD01未申明
      

  25.   

    my godvar
      tb:string;  if combobox1.text='01#记录表' then
        tb:='ado1'
      else if combobox1.text='01#记录表' then
        tb:='ado2'
    ...  adoquery1.sql.text := 'select 序号 as S1, 日期as S2, 规格as S3, 硫化开始as S4, 内压as S5, 内温as S6, 外温as S7, 硫化结束as S8, 硫化时间as S9, 硫化延时as S10 from '+tb+'  Where 日期 ='''+edit1.text+''' and 你要的字段=你的值';
      

  26.   

    不好意思,我前面的程序写错了if combobox1.text='01#记录表' then 
        tb:='ado1' 
      else if combobox1.text='02#记录表' then 
        tb:='ado2' 
      

  27.   


     else if combobox1.text='02#记录表' then这句前面写成else if combobox1.text='01#记录表'了
      

  28.   

    TRavePage、TRaveText 这个是什么?在那里申明的?
      

  29.   

    看你自己的前一个帖子里的吧
    http://topic.csdn.net/u/20090728/16/16db4e77-a256-40ca-9ba6-7c9657104b90.html
      

  30.   

    frp就可以自己写参数,返回你想要的。很简单。
      

  31.   

    请问我怎么才能把AD01、AD02、...或另外做值01、02、...赋值给rave报表中的Datatext做对应显示啊?
      

  32.   

     
    SuperTitan001
     
    (除了黑龙,我怕谁!) 等 级:在吗?请教了。
      

  33.   

    var 
      MyPage: TRavePage; 
      MyText1,mytext2,mytext3,mytext4: TRaveText; 
      tb:string;    
        if combobox1.text='01#记录表' then 
          tb:='ado1' 
        else if combobox1.text='02#记录表' then 
          tb:='ado2' 
        RvProject1.Open; 
        MyPage := RvProject1.ProjMan.FindRaveComponent('Report1.Page1',nil) as TRavePage; //这个地方的'Report1.Page1'具体用什么,请查看rave报表的右侧有一个Report Library,点击开后显示的是report的名字,再点击开就是page的名字,我的例子里面的名字分别为Report1和Page1,所以我用的是'Report1.Page1'    MyText1 := RvProject1.ProjMan.FindRaveComponent('Text3',MyPage) as TRaveText; //Text3为text的名字 ,也就是rave中text控件的name    MyText1.Text :=formatdatetime('yyyy-mm-dd',datetimepicker1.Date); //这一行就是设置text的内容
    //如果你要设置text的内容为ado1,ado2等
    //    mytext1.text:=tb
    //如果你要设置text的内容为'01#记录表','02#记录表'
          mytext1.text:=combobox1.text;    RvProject1.Execute; 
        RvProject1.Close; 
      

  34.   

    mytext1.text:=tb;运行时出错,光标停在这句上。
    出错提示内容为:
    工程project1.exe 检测到错误类 EAccessViolation, 错误信息:'Access violation at address 0051DB6A in module'Project1.exe'. Read of adress 00000000'. 进程中止. 使用单步或运行继续运行。什么意思啊?
      

  35.   

    从新运行时还有个提示:Access violation at address 0051DB6A in module'Project1.exe'. Read of adress 00000000'.
      

  36.   

    MyPage := RvProject1.ProjMan.FindRaveComponent('Report1.Page1',nil) as TRavePage; 
    MyText1 := RvProject1.ProjMan.FindRaveComponent('Text3',MyPage) as TRaveText; 这个估计是你前面的这两句没有执行成功,看看有没有输错名字?
      

  37.   

    这个我是怕输错,就复制你的,我把Text3放到rave的窗体上时,运行后提示:
    工程Project1.exe 检测到错误类 EDatabaseError, 错误信息: 'ADOQuery1:Missing SQL property'.进程中止。使用单步或运行继续运行。
      

  38.   

    OK了,这个Text3要放到rave的窗体上,我开始放在表头上,所以不对。