主  题:为什么查不到相应的记录?
作  者: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分 
谢谢大家帮我解决。  

解决方案 »

  1.   

    照着做了,可还是报一样的错,我那个字段的格式:YYYY-MM-DD。是不是这里有问题??该怎么解决??
      

  2.   

    有可能是格式问题,分为长日期,短日期,你可以用下decodedatetime这个函数,可以把年、月、日、时间分离出来。
      

  3.   

    fmain.Query1.Close;
      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;
      

  4.   

    这样应该就没问题了:
      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;
      

  5.   

    to lfh:
      这样如果本机日期格式和oracle不一样,就出问题了
    但是这个错误提示真的好象是因为用string参数传递日期引起的.呵呵,奇怪
      

  6.   

    fmain.Query1.SQL.Add('Select *');//from在哪儿??
    应该是:fmain.Query1.SQL.Add('Select * from tablename');
      

  7.   

    我觉得可能还是oracle所要求的日期格式和你程序中取的不匹配
      

  8.   

    绝对是没有Query控件中的SQL语句中没有From 的问题
    我刚试完,错误信息和你的一样,只是不是用的ORACLE数据库
      

  9.   

    方法太多,这是其中一种
      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;
      

  10.   

    From语句有啊,动态生成的,忘记粘贴上来了,不好意思。但是还是有这个问题,我都快发疯了。到底怎么回事呢?
      

  11.   

    代码在这里,怎么还是有问题啊?
      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;
      

  12.   

    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.ParamByName('LocalDate').AsString := formatdatetime('yyyy-mm-dd',date);  fmain.Query1.Open; 试一试吧