主 题:为什么查不到相应的记录?
作 者:AAAAAAAA
所属论坛:Delphi
问题点数:20
回复次数:12
发表时间:2001-6-15 21:18:00
我用datetimepicer这个控件往SQL数据库中存的日期。可是在做查询时却查不到相应的记录,这是怎么回事呀?
下面是我程序的代码。
query1.close;
query1.SQL.Clear;
query1.SQL.add('select * from xinxicunchu where yonghuid=:id and riqi=:riqi');
query1.ParamByName('id').asinteger:=strtoint(edit1.text);
query1.ParamByName ('riqi').asdatetime:=datetimepicker1.date;query1.open;
回复贴子:
回复人:sweihua(nil) (2001-6-15 21:29:00) 得1分
可能是datetimepicer这个控件的日期格式的问题!
你仔细看一下
回复人:trump(大宏) (2001-6-15 21:30:00) 得1分
你在数据库中定义的日期是DateTime类型的吗?如果是的话那就是时间的问题了
回复人:ameng007(阿门) (2001-6-15 21:41:00) 得0分
因为用datetimepicker取出的日期存入存入数据库时也带了时间,当然不能保证你前后的日期+时间是一致的。建议你保存和比较时使用formatdatetime函数。
回复人:AAAAAAAA(雪儿) (2001-6-15 23:13:00) 得0分
我数据库中定义的是datatime类型。可是,我把数据库中的日期字段的值读出来放在EDIT中,然后再用EDIT中的值去查找,仍然找不到。
formatadatetime函数的格式是什么?
回复人:ocean617(海洋) (2001-6-16 8:45:00) 得2分
天啊!遇到一个我以前遇到一个问题,我发现datatimepicker的时间好像晚了一天,你试一下把日期减一看看.
回复人:qkl(康) (2001-6-16 10:18:00) 得1分
你要注意 datetimepicker1.date 包含的时间(Time)部分是否与数据库中的匹配。
回复人:yg2000() (2001-6-16 10:24:00) 得1分
你用asdate
回复人:ameng007(阿门) (2001-6-16 14:10:00) 得5分
保存时:
query1.close;
query1.SQL.Clear;
query1.SQL.add('update xinxicunchu set riqi= ''' + formatdatetime('yyyy-mm-dd',datetimepicker1.date) + '''');
query1.Add('where yonghuid='+edit1.text);
ExecSql;打开时:
query1.close;
query1.SQL.Clear;
query1.SQL.add('select * from xinxicunchu where yonghuid=:id and riqi=:riqi');
query1.ParamByName('id').asinteger:=strtoint(edit1.text);
query1.ParamByName ('riqi').asstring:=formatdatetime('yyyy-mm-dd',datetimepicker1.date);query1.open;
回复人:hujizong(Hover) (2001-6-16 14:17:00) 得3分
我这几天正在做一个日期查询的问题,也碰到了这个问题,试了好久,发现传参数时,将日期转换成字符串,好象可以,你不妨试试。
query1.close;
query1.SQL.Clear;
query1.SQL.add('select * from xinxicunchu where yonghuid=:id and riqi=:riqi');
query1.ParamByName('id').asinteger:=strtoint(edit1.text);
query1.ParamByName ('riqi').asstring:=datetostr(datetimepicker1.date);query1.open;
祝好运!
回复人:ruizi(编.编.我编死你) (2001-6-16 14:59:00) 得3分
是这样的,sql查询中日期有固定的格式mm/dd/yyyy,datetimepicker1.date的值取
的是系统的日期格式,所以最简单的方法是在win98的控制面版的区域设置中改变日期格式
但这样有个缺点就是安装到别的机器的时候你要手动改一下日期,最好的方法是在程序中
用函数将日期格式转换一下
回复人:mingyezi(飞天) (2001-6-16 15:02:00) 得3分
主要是因为datetime数据类型的原因,它是个浮点数,在datetimepicker里取的值包含了时间,一般你取的是日期,你可以用类似一下的代码来查询。
sql.add('select * FROM yourtable');
sql.add('where (billmakedate>=:datetime1) and (billmakedate<=:datetime2)');
parambyname('datetime1').asdatetime:=strtodatetime(datetostr(DateTimeP1.date)+' 00:00:00');
parambyname('datetime2').asdatetime:=strtodatetime(datetostr(Datetimep2.date)+' 23:59:59');good luck!
回复人:AAAAAAAA(雪儿) (2001-6-16 22:57:00) 得0分
谢谢大家帮我解决。
作 者:AAAAAAAA
所属论坛:Delphi
问题点数:20
回复次数:12
发表时间:2001-6-15 21:18:00
我用datetimepicer这个控件往SQL数据库中存的日期。可是在做查询时却查不到相应的记录,这是怎么回事呀?
下面是我程序的代码。
query1.close;
query1.SQL.Clear;
query1.SQL.add('select * from xinxicunchu where yonghuid=:id and riqi=:riqi');
query1.ParamByName('id').asinteger:=strtoint(edit1.text);
query1.ParamByName ('riqi').asdatetime:=datetimepicker1.date;query1.open;
回复贴子:
回复人:sweihua(nil) (2001-6-15 21:29:00) 得1分
可能是datetimepicer这个控件的日期格式的问题!
你仔细看一下
回复人:trump(大宏) (2001-6-15 21:30:00) 得1分
你在数据库中定义的日期是DateTime类型的吗?如果是的话那就是时间的问题了
回复人:ameng007(阿门) (2001-6-15 21:41:00) 得0分
因为用datetimepicker取出的日期存入存入数据库时也带了时间,当然不能保证你前后的日期+时间是一致的。建议你保存和比较时使用formatdatetime函数。
回复人:AAAAAAAA(雪儿) (2001-6-15 23:13:00) 得0分
我数据库中定义的是datatime类型。可是,我把数据库中的日期字段的值读出来放在EDIT中,然后再用EDIT中的值去查找,仍然找不到。
formatadatetime函数的格式是什么?
回复人:ocean617(海洋) (2001-6-16 8:45:00) 得2分
天啊!遇到一个我以前遇到一个问题,我发现datatimepicker的时间好像晚了一天,你试一下把日期减一看看.
回复人:qkl(康) (2001-6-16 10:18:00) 得1分
你要注意 datetimepicker1.date 包含的时间(Time)部分是否与数据库中的匹配。
回复人:yg2000() (2001-6-16 10:24:00) 得1分
你用asdate
回复人:ameng007(阿门) (2001-6-16 14:10:00) 得5分
保存时:
query1.close;
query1.SQL.Clear;
query1.SQL.add('update xinxicunchu set riqi= ''' + formatdatetime('yyyy-mm-dd',datetimepicker1.date) + '''');
query1.Add('where yonghuid='+edit1.text);
ExecSql;打开时:
query1.close;
query1.SQL.Clear;
query1.SQL.add('select * from xinxicunchu where yonghuid=:id and riqi=:riqi');
query1.ParamByName('id').asinteger:=strtoint(edit1.text);
query1.ParamByName ('riqi').asstring:=formatdatetime('yyyy-mm-dd',datetimepicker1.date);query1.open;
回复人:hujizong(Hover) (2001-6-16 14:17:00) 得3分
我这几天正在做一个日期查询的问题,也碰到了这个问题,试了好久,发现传参数时,将日期转换成字符串,好象可以,你不妨试试。
query1.close;
query1.SQL.Clear;
query1.SQL.add('select * from xinxicunchu where yonghuid=:id and riqi=:riqi');
query1.ParamByName('id').asinteger:=strtoint(edit1.text);
query1.ParamByName ('riqi').asstring:=datetostr(datetimepicker1.date);query1.open;
祝好运!
回复人:ruizi(编.编.我编死你) (2001-6-16 14:59:00) 得3分
是这样的,sql查询中日期有固定的格式mm/dd/yyyy,datetimepicker1.date的值取
的是系统的日期格式,所以最简单的方法是在win98的控制面版的区域设置中改变日期格式
但这样有个缺点就是安装到别的机器的时候你要手动改一下日期,最好的方法是在程序中
用函数将日期格式转换一下
回复人:mingyezi(飞天) (2001-6-16 15:02:00) 得3分
主要是因为datetime数据类型的原因,它是个浮点数,在datetimepicker里取的值包含了时间,一般你取的是日期,你可以用类似一下的代码来查询。
sql.add('select * FROM yourtable');
sql.add('where (billmakedate>=:datetime1) and (billmakedate<=:datetime2)');
parambyname('datetime1').asdatetime:=strtodatetime(datetostr(DateTimeP1.date)+' 00:00:00');
parambyname('datetime2').asdatetime:=strtodatetime(datetostr(Datetimep2.date)+' 23:59:59');good luck!
回复人:AAAAAAAA(雪儿) (2001-6-16 22:57:00) 得0分
谢谢大家帮我解决。
解决方案 »
- 菜鸟提问:delphi如何设置程序运行时的默认窗口
- 请教:用 FastReport 打印 MS-SQL 的 Image 字段.
- 有关oracle数据库表的问题?
- 请问在richedit 中如何 用 代码 添加 有 颜色的文字 ??????????????
- 关于API Hook的问题。。会出现无限循环吗?
- Microsoft.Jet.OLEDB.3.5升级成4.0?请高手指教!
- ESMTP发送邮件问题!等待中……
- 字符串的问题
- 为何我的Active Form发布后在本机(服务器)上可见,在其他人的浏览器内不可见?
- 请问怎么动态创建鼠标指针?(我出100分,要真正的动态创建)
- 有关dbgrid中显示标记的问题,
- 为什么要调用一个DLL中一个过程要有type Tdll=procedure(Myform:TForm);的语句?
fmain.Query1.SQL.Clear;
fmain.Query1.SQL.Add('Select *');
fmain.Query1.SQL.Add('Where DLYRQ = TODATE(:localdate,''yyyy-mm-dd''')');
fmain.Query1.Params[0].AsString := formatdatetime('yyyy-mm-dd',date);
fmain.Query1.Open;
fmain.Query1.Close;
fmain.Query1.SQL.Clear;
fmain.Query1.SQL.Add('Select *');
fmain.Query1.SQL.Add('Where DLYRQ = :LocalDate');
fmain.Query1.Params[0].AsDateTime := Date;
fmain.Query1.Open;
这样如果本机日期格式和oracle不一样,就出问题了
但是这个错误提示真的好象是因为用string参数传递日期引起的.呵呵,奇怪
应该是:fmain.Query1.SQL.Add('Select * from tablename');
我刚试完,错误信息和你的一样,只是不是用的ORACLE数据库
fmain.Query1.Close;
fmain.Query1.SQL.Clear;
fmain.Query1.SQL.Add('Select *');
fmain.Query1.SQL.Add('Where to_char(DLYRQ,''yyyy-mm-dd'') = :LocalDate');
fmain.Query1.Params[0].AsString := formatdatetime('yyyy-mm-dd',date);
fmain.Query1.Open;
fmain.Query1.Close;
fmain.Query1.SQL.Clear;
fmain.Query1.SQL.Add('Select * From BMHP_SY');
fmain.Query1.SQL.Add('Where to_char(DLYRQ,''yyyy-mm-dd'') = :LocalDate');
fmain.Query1.Params[0].AsString := formatdatetime('yyyy-mm-dd',date);
fmain.Query1.Open;
fmain.Query1.SQL.Clear;
fmain.Query1.SQL.Add('Select * From BMHP_SY');
fmain.Query1.SQL.Add('Where to_char(DLYRQ,''yyyy-mm-dd'') = :LocalDate'); //fmain.Query1.Params[0].AsString := formatdatetime('yyyy-mm-dd',date);
fmain.Query1.ParamByName('LocalDate').AsString := formatdatetime('yyyy-mm-dd',date); fmain.Query1.Open; 试一试吧