t5:=' 1=1 ';
  if CheckBox5.Checked then
  t5:=' 生日>=#'+DateToStr(DateTimePicker1.Date)+'#  and 生日<=#'+DateToStr(DateTimePicker2.Date)+'#';

解决方案 »

  1.   

    关于事件的格式和界定符,access,sqlserver,oracle都有点不同,你这样硬编码建议看看你的数据库的格式要求。
    建议你用参数就可以解决这个问题,时间用参数标识,在打开数据集的之前用ParaByName('时间参数1').Value:=TDateTime变量即可,这样可以避免不同的数据库的时间表示法和界定符不同的问题如果是oracle的话,可以用to_date函数方便明确的转换,达到在sql语句中硬编码
    例如:select * from 表1 where 时间字段1 >= to_date('19900101','yyyyMMdd')
      

  2.   

    同意思一楼的说法。
    数据库不同SQL语句略有不同。
      

  3.   

    if CheckBox5.Checked then
      t5:=' 生日>=#'+formatdatetime('yyyy-mm-dd',DateTimePicker1.Date)+'# and 生日<=#'+formatdatetime('yyyy-mm-dd',DateTimePicker2.Date)+'#';
      

  4.   

    楼主如果用的是access数据库那么
    t5:=' 生日>=#'+formatdatetime('yyyy-mm-dd',DateTimePicker1.Date)+'# and 生日<=#'+formatdatetime('yyyy-mm-dd',DateTimePicker2.Date)+'#';
    如果是mssql那么t5:=' 生日>='''+formatdatetime('yyyy-mm-dd',DateTimePicker1.Date)+''' and 生日<='''+formatdatetime('yyyy-mm-dd',DateTimePicker2.Date)+'''';
      

  5.   

    我用的是sql server2000数据库。
      

  6.   

    补充一下,我用的是sql server2000的数据库,生日类型用的是datetime,抱歉啊,我还是初学者,不懂啊!!能不能说得简单易懂些啊!!
      

  7.   

    你的sql里面定义的是datetime,那么查询的时候也要带上时分秒。要么你的字段‘生日’截取为'yyyy-mm-dd'格式再做比较。
      

  8.   

    谢谢各位了,我的问题已经解决了,顺便提一下的是,我虽然定义的是datetime类型,但是不用截取也是可以比较的!谢谢各位了!!还有就是希望大家不要生气,我还是刚学Delphi的,很多都不懂,请不要见怪!