怎么实现对时间的动态参数查询?急! (55分)

  • 主题发起人 主题发起人 免费人
  • 开始时间 开始时间

免费人

Unregistered / Unconfirmed
GUEST, unregistred user!
1.
adoquery2.close;
adoquery2.sql.Clear;
adoquery2.sql.Add('select * from 来宾消费表 where 就餐房号=:ff and 日期=:rr and 登记时间=:tt');
adoquery2.Parameters.ParamByName('ff').Value:=label2.Caption;
adoquery2.Parameters.ParamByName('tt').Value:=label6.Caption;
adoquery2.Parameters.ParamByName('rr').Value:=label12.Caption;
adoquery2.open;
adoquery2.Last;
2.
adotable1.Filtered:=false;
adotable1.filter:='就餐房号='+label4.Caption+' and 日期='+label12.Caption+' and 登记时间=#'+format('hh:mm',(label6.caption))+'#';
adotable1.Filtered:=true;
以上两种方式,都有错误,都提示label6.caption无效,毛病肯定出在对时间查询格式上。
这点我敢肯定的。其他的问题,也许是我在提出问题的时候写错了。
我只想知道,正确的用参数查询时间的格式。
请详细的给我解答一下这两个问题,可以吗。
 
无tt参数
'select * from 来宾消费表 where 就餐房号=:ff and 日期=:rr and aa=:tt'
换datetimepicker组件
 
没有用tt参数呀。
另外你的日期参数应该用个strtodate(label12.caption)。
 
关键是类型匹配
 
注意参数的类型,像hbezwwl所说
 
请详细的解答好吗。分不够,可以在加,这个不是问题。
楼上的三个富翁,都没有解答到问题的关键!
 
对于时间型变量,最好是使用转换,如:Convert、To_Date等。
同时尽量不要使用参数而是直接拼写SQL语句。
 
如果lable6里的内容是字符串,要
经过转换,
FormatdateTime('yyyy-mm-dd',strToDatatime(label6.caption)


 
1.adoquery2.Parameters.ParamByName('tt').Value:=formatdatetime('hh:mm',strtotime(label6.Caption));
建議日期時間均用datetimepicker控件。
2.adotable1.filter:='就餐房?='''+label4.Caption+''' and 日期='''+label12.Caption+'''and 登???=#'+formatdatetime('hh:mm',strtodatetime(label6.caption))+'#';
建議過濾寫在ADOQuery1FilterRecord事件中。
 
adotable1.filter:='就餐房号='+label4.Caption+' and 日期='+label12.Caption+
' and 登记时间='+label6.caption 不可以吗
主要是时间(hh)查询这样不知行不行
 
zxb200完全正确!
来迟了:P
 
adoquery2.Parameters.ParamByName('tt').Value:=strtodate(label6.Caption);
adoquery2.Parameters.ParamByName('rr').Value:=strtodate(label12.Caption);
就行了,如果是MSSQLserver还简单
不知道你是不是
 
多人接受答案了。
 
日期字段查询应该用时间段来表示。 日期=:rr 这样的写法只能查到 日期= 2002-04-06 00:00:00 这样一个时间点的数据
adoquery2.close;
adoquery2.sql.Clear;
adoquery2.sql.Add('select * from 来宾消费表 where 就餐房号=:ff and 日期 between :rr0 and :rr1
and 登记时间 between :tt and tt1');
adoquery2.Parameters.ParamByName('ff').Value:=label2.Caption;
adoquery2.Parameters.ParamByName('tt').AsDatetime:= StrToDateTime(label6.Caption); //字符串要转成时间格式
adoquery2.Parameters.ParamByName('tt1').AsDatetime:= StrToDateTime(label6.Caption) +1; //字符串要转成时间格式

adoquery2.Parameters.ParamByName('rr0').AsDateTime:=StrToDateTime(label12.Caption);
adoquery2.Parameters.ParamByName('rr1').AsDateTime:=StrToDateTime(label12.Caption)+1;

adoquery2.open;
adoquery2.Last;
2. 同第一个问题
adotable1.Filtered:=false;
adotable1.filter:='就餐房号='+''''+label4.Caption+''''
+ 'and 日期 >= ' +''''+ label12.Caption +''''
+ 'and 日期 <' +''''+ datetimeToStr(StrToDateTime(Label2.Caption)+1)+''''+
+' and 登记时间=#'+format('hh:mm',(label6.caption))+'#';
adotable1.Filtered:=true;
胡乱做答。 大概是这个意思。 第2个问题如果filter的格式不对。查查FILTER的帮助
 
后退
顶部