第二张图是rave中的数据,是通过连接SQL Server 2005数据库来的,有2009/07/28、2009/07/29、2009/07/30 共3天的数据,我希望输入日期就能查到当天的所有内容,怎么实现?谢谢。
第二张图是rave中的数据,是通过连接SQL Server 2005数据库来的,有2009/07/28、2009/07/29、2009/07/30 共3天的数据,我希望输入日期就能查到当天的所有内容,怎么实现?谢谢。
你的图我看不到你可以用下面的程序 adoquery1.sql.text:='select 你要的字段 from 你的表 where 日期字段='''+edit1.text+'''';ps:我建议你不要用edit输入日期,防止出错,最好用datetimepicker 程序: adoquery1.sql.text:='select 你要的字段 from 你的表 where 日期字段='''+datetostr(datetimepicker1.date)+'''';
你的程序版面应该有个查询之类的按钮吧,一按键就显示当前日期的记录,然后再打印? 如果是这样,把下面的程序放入你的查询按钮下面 adoquery1.active:=false; adoquery1.sql.clear; adoquery1.sql.text:='select 你要的字段 from 你的表 where 日期字段='''+edit1.text+''''; adoquery1.active:=true;这样你就能看到某天的数据了,打印部分是不用修改了
不知道怎么把图片放上来? 我是这样做的: 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、不知道我的问题出在哪里?望能解决,谢谢!
1:你的表头应该是一个text吧?可以参照27楼的程序 2:这个你可以用 if combobox1.itemindex=0 then //选择的第一项 选择的是ado1或者 if combobox1.text='01#记录表' then 选择的是ado1
2:这个你可以用 if combobox1.itemindex=0 then //选择的第一项 选择的是ado1 或者 if combobox1.text='01#记录表' then 选择的是ado1 这个语句是放在Button下吗?语句是不是: if combobox1.text='01#记录表' then AD01; 对吗?提示AD01未申明
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 你要的字段=你的值';
不好意思,我前面的程序写错了if combobox1.text='01#记录表' then tb:='ado1' else if combobox1.text='02#记录表' then tb:='ado2'
else if combobox1.text='02#记录表' then这句前面写成else if combobox1.text='01#记录表'了
adoquery1.sql.text:='select 你要的字段 from 你的表 where 日期字段='''+edit1.text+'''';ps:我建议你不要用edit输入日期,防止出错,最好用datetimepicker
程序:
adoquery1.sql.text:='select 你要的字段 from 你的表 where 日期字段='''+datetostr(datetimepicker1.date)+'''';
如果是这样,把下面的程序放入你的查询按钮下面
adoquery1.active:=false;
adoquery1.sql.clear;
adoquery1.sql.text:='select 你要的字段 from 你的表 where 日期字段='''+edit1.text+'''';
adoquery1.active:=true;这样你就能看到某天的数据了,打印部分是不用修改了
我是这样做的:
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、不知道我的问题出在哪里?望能解决,谢谢!
改为Rvdatasetconnection> Dataset:adoQuuery1 你的查询的数据集用的adoquery,打印用的是query,查询的结果就没有意义了
Avtive:Ture
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;
再问下,我想再做个Edit 输入或选择不同的表好做吗?
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 你要的字段=你的值';
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按钮确定. (总页数)
刚刚网络有问题,没发上来,还请教几个问题:
1、我在运行打开Rave报表时,如何让rave的表头跟着我选择不同的表跟着变?例如,我选择AD02时,表头跟着会显示02#数据记录表。
2、用combonbox做下拉菜单选择表AD01、AD02、....时,只能在combonbox的Items的TStrings中填入AD01、AD02、....,但是这个是数据库中直接的表名,用户看不懂的,如何实现用户在选择combonbox时显示01#记录表、02#记录表、...而能直接对应AD01、AD02、....的数据?
1:你的表头应该是一个text吧?可以参照27楼的程序
2:这个你可以用
if combobox1.itemindex=0 then //选择的第一项
选择的是ado1或者 if combobox1.text='01#记录表' then
选择的是ado1
if combobox1.itemindex=0 then //选择的第一项
选择的是ado1 或者 if combobox1.text='01#记录表' then
选择的是ado1 这个语句是放在Button下吗?语句是不是:
if combobox1.text='01#记录表' then AD01;
对吗?提示AD01未申明
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 你要的字段=你的值';
tb:='ado1'
else if combobox1.text='02#记录表' then
tb:='ado2'
else if combobox1.text='02#记录表' then这句前面写成else if combobox1.text='01#记录表'了
http://topic.csdn.net/u/20090728/16/16db4e77-a256-40ca-9ba6-7c9657104b90.html
SuperTitan001
(除了黑龙,我怕谁!) 等 级:在吗?请教了。
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;
出错提示内容为:
工程project1.exe 检测到错误类 EAccessViolation, 错误信息:'Access violation at address 0051DB6A in module'Project1.exe'. Read of adress 00000000'. 进程中止. 使用单步或运行继续运行。什么意思啊?
MyText1 := RvProject1.ProjMan.FindRaveComponent('Text3',MyPage) as TRaveText; 这个估计是你前面的这两句没有执行成功,看看有没有输错名字?
工程Project1.exe 检测到错误类 EDatabaseError, 错误信息: 'ADOQuery1:Missing SQL property'.进程中止。使用单步或运行继续运行。