要求:查询将要到车辆保养日期fbytxrq(提前14天提醒)的车辆信息,界定一个时间段比如2009-05-01~2009-06-01之间需要提醒的客户资料,
                     
                   也即是说保养日期fbytxrq-14天,如果属于后面这个时间段就显示出来select * from tb_cl  where DATEADD(d, -14,fbytxrq)  between'" & MaskEdBox1.Text & "' and '" & MaskEdBox2.Text & "'order by flzrq asc"1、数据库里fbytxrq对应的字段为smalldatetime类型,如何界定这个方位不让他出错,smalldatetime日期范围1990到2079年
超过这个范围就会报错2、不允许更改数据库
上面那个语句总是显示提示错误:向列smalldatetime添加值时导致溢出

解决方案 »

  1.   

    select * from tb_cl  where DATEADD(d, -14,fbytxrq)  >='" & MaskEdBox1.Text & "' and where DATEADD(d, -14,fbytxrq) <=  '" & MaskEdBox2.Text & "'order by flzrq asc"
      

  2.   

    把 
    DATEADD(d, -14,fbytxrq) 改成 
    DATEADD(d, -14, convert(datetime,sdatae,20)) 就不用加减了 
      

  3.   

    先在查询分析器里运行此语句:
    select * from tb_cl  where fbytxrq < '1900-1-1'"看看结果是不是为空的
      

  4.   

    先在查询分析器里运行此语句: 
    select * from tb_cl  where fbytxrq < '1900-1-1'看看结果是不是为空的 
      

  5.   

    这样写
    select * from tb_cl  where fbytxrq  between'" & dateadd("d" ,14,cdate(MaskEdBox1.Text)) & "' and '" & dateadd("d" ,14,cdate(MaskEdBox2.Text)) & "'order by flzrq asc"
      

  6.   

    按照这个查出来的信息,比如我要查询2009-05-01到2009-06-01之间的数据
    查出来的结果,fbytxrq最小的开始时间都是2009-05-01号,提前14天,应该是2009-05-01往前14天才对,另外order by排序也不起作用了
      

  7.   

    你原语句的意思就不对,
    select * from tb_cl  where DATEADD(d, -14,fbytxrq)  between'" & MaskEdBox1.Text & "' and '" & MaskEdBox2.Text & "'order by flzrq asc" 
    比如MaskEdBox1.Text 和MaskEdBox2.Text 的值分别为2009-5-1和2009-6-1,查出的内容的fbytxrq范围应该是:2009-5-15到2009-6-15之间的数据.而你本意是:MaskEdBox1.Text 和MaskEdBox2.Text 的值分别为2009-5-1和2009-6-1时,查出的fbytxrq范围应该是:2009-4-16到2009-5-17这间的数据,那高应该是这样的:
    select * from tb_cl  where fbytxrq  between'" & dateadd("d" ,-14,cdate(MaskEdBox1.Text)) & "' and '" & dateadd("d" ,-14,cdate(MaskEdBox2.Text)) & "'order by flzrq asc" 
      

  8.   

    还有就是用MaskEdBox这个控件要进行格式转换,同时后台数据库是什么是sql2000还是其他数据库呢?
      

  9.   


    而你本意是:MaskEdBox1.Text 和MaskEdBox2.Text 的值分别为2009-5-1和2009-6-1时,查出的fbytxrq范围应该是:2009-4-16到2009-5-17这间的数据,那高应该是这样的:
    select * from tb_cl  where fbytxrq  between'" & dateadd("d" ,-14,cdate(MaskEdBox1.Text)) & "' and '" & dateadd("d" ,-14,cdate(MaskEdBox2.Text)) & "'order by flzrq asc"
    [/Quote]应该是这样,不过也没有5.1以前的数据,查不出来
      

  10.   

    1、select * from tb_cl  where DATEADD(d, -14,fbytxrq)  between #" & MaskEdBox1.Text & "# and #" & MaskEdBox2.Text & "# order by flzrq asc" 
    2、加上CDate函数。
      

  11.   

    来分析一下你的要求:
    要求:查询将要到车辆保养日期fbytxrq(提前14天提醒)的车辆信息,界定一个时间段比如2009-05-01~2009-06-01之间需要提醒的客户资料, 
                        
                      也即是说保养日期fbytxrq-14天,如果属于后面这个时间段就显示出来 
    fbytxrq是车辆的保养日期,需要在这个日期到来之前的14天开始提醒客户做保养,比如说如果是2009-5-1日保养,那么从2009-4-16日开始就要每天提醒."界定一个时间段比如2009-05-01~2009-06-01之间需要提醒的客户资料"意思是在五月期间有哪些客户需要提醒的,那2009-5-1日开始要提醒的最早的保养日期应该是2009-5-14日,是之后日期,而不应该是之前的,之前的应该在4月份就做过了.
    所以还是应该用这句:
    select * from tb_cl  where fbytxrq  between'" & dateadd("d" ,14,cdate(MaskEdBox1.Text)) & "' and '" & dateadd("d" ,14,cdate(MaskEdBox2.Text)) & "'order by flzrq asc"
      

  12.   

    MaskEdBox1.Text 和MaskEdBox2.Text 的值分别为2009-5-1和2009-6-1时,查出的fbytxrq范围应该是:2009-4-16到2009-5-17这间的数据这个是所要求的,
    用了你的查询,现在查询出的结果有两个问题,
    1、查询不到5月1日前的数据
    2、排序order by语句不起作用
      

  13.   

    1.4月16到5月1之间是不是没有数据
    2.flzrq字段是什么类型的