谁帮帮我啊.时间比较问题.(0分)

H

htltnt

Unregistered / Unconfirmed
GUEST, unregistred user!
用DATETOSTR比较更本没用加了# 提示不可比较.
这样根本没用的,
前提是 SQL里是DATETIME
然后 从DATETMEPICKER里取比较值(.DATE)
用了#也更本不行 到底要怎么样的啊?
这个从语法上怎么解释呢?
 
???

Access才加#(这个畸形的东西),其它的,我没有见过还有哪个数据库在做时间判断时要加#的!
从TDateTimePicker里取值,可以且TDateTimePicker.Text啊!

sql := 'select * from
where [date] > ' + QuotedStr(TDateTimePicker.Text, #39);
 
我在查询分析器里也有了结果.
可是我用动态参数弄到QUERY 里了.它就说没有可比较
SELECT *
FROM TABLE
WHERE DATE BETWEEN :DATE1 AND :DATE2
ADOQUERY.PARAMETERS[0].VALUE:=DATETOSRR(DATE1)
................................................
他就是不出结果.
 
改为select * from table where date>=:date1 and date<=:date2应该可以的
 
这样也写了.
不是语句的问题 .>= <= 和BETWEEN都一样的饿。
在查询分析器里都可以出结果.
就是不知道怎么回事!
请问 #39 是什么意思 什么编码转换吗?
 
可能是格式的问题吧!
如:12/02/2003 00:00:00
你可能需要格式化一下!
 
我把比较的参数都用出来了看了 是这样的饿 yy-mm-dd
用了 格式化 结果也还是一样的.到底怎么回事情呢?
你写过这个比较吗? 我想很多人写过的吧.能给我看看吗?
 
With AdoQuery1 do
begin
close;
Sql.clear;
sql.add('Select * from
where [date]>=cast('''+DateTimePicer1.date)+''' as DateTime)');
Open;
End;
 
对不起,写错了应是
With AdoQuery1 do
begin
close;
Sql.clear;
sql.add('Select * from
where [date]>=cast('''+DateTimeToStr(DateTimePicer1.date)+''' as DateTime)');
Open;
End;

 
在SQL中存储的格式是'12/02/2003 00:00:00',你将后面格式化成"12/01/2003"是不行的
你可以看看这个贴子:
话题614054的标题是: 日期型字段查询 (50分)
分类:数据库-文件型 友好 (2001-9-6 20:08:00)
语句如下:
SQL:='Select * from 业务表';
SQL1:=' where 日期 =:MyDate';
SQL:=SQL+SQL1;
ywADOQuery.SQL.Add(SQL);
ywADOQuery.Parameters.paramvalues['MyDate'].asdate:=StrToDate(jhtimeDBEdit.EditText);
ywADOQuery.open;

MyDate为ftDate类型
运行出现“Variant does not reference an automation object”出错提示请专家指点!

jasper (2001-9-6 21:19:00)
1 SQL使用前清空了吗?
2 日期型变量本质上是一种浮点型,查询时用=,如果一个有小时分钟秒豪秒,另一个只有年月日,怎么办呢?

kals (2001-9-6 21:37:00)
你的数据库是否SQL SERVER ,SQL SERVER的日期是有时间的,最好用
SubString(Convert(VarChar(20),DATEFIELD),1,10)转换一下再比较

Chason (2001-9-7 8:40:00)
同样的问题,我是这样来解决的:

if datam.qrydata.ParamCount < 1 then
//可能在其他查询中把参数去掉,因而要检测,加上。
begin
datam.qrydata.Params.CreateParam(ftdate, 'Todate', ptUnknown);
datam.qrydata.Params.CreateParam(ftdate, 'Fromdate', ptUnknown);
end;
datam.qrydata.ParamByName ('ToDate').asdate:=Todate;
datam.qrydata.ParamByName ('FromDate').asdate:=Fromdate;
datam.qrydata.sql.text:='select * from data where dyrq <=:ToDate and dyrq>=:FromDate';
datam.qrydata.Prepare ;
datam.qrydata.open;

不知有否帮助?

友好 (2001-9-22 13:44:00)
多人接受答案了。


Chason-30,jasper-10,kals-10,的回答最终被接受。
 
都不行啊。我想问题在于 SQL里的转换
我在查询分析器里用
select *
from table
where datetime>='02-02-02' and datetime<='03-03-03'
是绝对出结果的。

大家再帮我看看。 我用过你们说的说有方法还是每用
前提是 SQL+ ADOQUERY
代码如下:
ADOQuery_xsht.Close ;
ADOQuery_xsht.SQL.Clear ;
adoquery_xsht.Parameters.Clear;

ADOQuery_xsht.SQL.Add('select *');
ADOQuery_xsht.SQL.Add('from xs_xsht');
ADOQuery_xsht.SQL.Add('where xsht12=:user and xsht14=:state and xsht03>=:date1 and xsht03<=:date2');

adoquery_xsht.Parameters[0].Value :=trim(form_main.user_name.text);
adoquery_xsht.Parameters[1].Value:='建立';
adoquery_xsht.Parameters.ParamValues['date1'].asdate:=datetostr(datetime1.date);
adoquery_xsht.Parameters.ParamValues['date2'].asdate:=datetostr(datetime2.DATE);
adoquery_xsht.Prepared ;
ADOQuery_xsht.Open ;

还有别的我也试了 就是提示 没有可比较的特性
这个 时间到底怎么传进去的啊。




 

Similar threads

回复
0
查看
678
不得闲
回复
0
查看
855
不得闲
回复
0
查看
811
不得闲
回复
0
查看
666
不得闲
D
回复
0
查看
734
DelphiTeacher的专栏
D
顶部