比如下面的程序段
  qryLSCX.SQL.Add('select * from JC where 1=1 ');
  qryLSCX.SQL.Add('  and JC_SJ > :pSJ');
  qryLSCX.ParamByName('pSJ').AsDateTime := dtpQS.DateTime;  //取datetimepicker中的日期时间
我想取大于某个日期时间的数据,为什么查到的结果不是我想要的,而是全部数据。看坛子上也看了不少类似的帖子,试了试似乎没用。(DELPHI 7 +SQL+BDE)
特请教各位,就以上面的程序为例吧,如何实现我想要的功能呢? 

解决方案 »

  1.   

    //用时间的字符串试试
    var
      S: String;
    begin
      S := QuotedStr(FormatDataTime('YYYY-MM-DD hh:nn:ss', dtpQS.DateTime));
      //如果是Access要这样S := FormatDataTime('#YYYY-MM-DD hh:nn:ss#', dtpQS.DateTime);  
      qryLSCX.SQL.Add('select * from JC where 1=1 '); 
      qryLSCX.SQL.Add('  and JC_SJ > '+S); 
    end;
      

  2.   

    如果还不行在qryLSCX的OnFilter事件直接用Delphi代码过滤
      

  3.   


    procedure TForm1.Button1Click(Sender: TObject);
    begin
       edit1.Text :=formatdatetime('yyyy/mm/ss hh:mm:ss',now);
    end;
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
       edit1.Text :=formatdatetime('yyyy/mm/ss hh:mm:ss',DateTimePicker1.date);
    end;
      

  5.   

      qryLSCX.SQL.Add('select * from JC where 1=1 ');
      qryLSCX.SQL.Add('  and JC_SJ > :pSJ');
      qryLSCX.ParamByName('pSJ').AsDateTime := dtpQS.DateTime;  //取datetimepicker中的日期时间 你这样写是没有问题的,你先看看数据库中的JC_SJ的数据类型及数据值是什么。
    可以把sql截出来,在查询分析器中执行一下,把这个dtpQS.DateTime这个的具体值代进去看看结果。
      

  6.   

    是不是定义pSJ参数时。就定义了date类型
      

  7.   

    用string处理
    比如“select * from #table where time>'2008-04-25'”
    当然2008-04-25可以换成你的变量,但要用单引号拼接起来
      

  8.   


    qryLSCX.SQL.Add('select * from JC where 1=1 '); 
    qryLSCX.SQL.Add('  and JC_SJ > :pSJ'); 
    qryLSCX.ParamByName('pSJ').Value := FormatDataTime('YYYY-MM-DD', dtpQS.DateTime);   
      

  9.   

    with qryLSCX do
    begin
      Close;
      SQL.Clear;
      SQL.Add('select * from JC where 1=1 ');  
      SQL.Add('  and JC_SJ > :pSJ');  
      ParamByName('pSJ').Value := FormatDataTime('YYYY-MM-DD', dtpQS.DateTime);
      Open
    end;
     
      

  10.   

    日期时间类型自动转换的问题Delphi中日期时间(TDateTime/TDate)实际上浮点数
      TDateTime = type Double;
      TDate = type TDateTime;当你通过BDE/ADO向数据库提交带参数的SQL语句时,如果该参数的类型为日期时间型,就会有一个类型转换的问题。
    就是要把Delphi中的日期时间类型(就是一个浮点数,整数部分为日期,小数部分为时间)转换为对应数据库的日期时间类型
    如果这样写
    qryLSCX.ParamByName('pSJ').AsDateTime := dtpQS.DateTime;
    那么这个转换将由BDE/ADO和相应的数据ODBC/OLE DB接口模块(驱动程序)自动完成。由于不同厂商的数据库及数据库接口(ADO/BDE,及ODBC/OLE DB/.NET数据库接口/JDBC等)在日期时间类型实现方式以及之间转换的不兼容性,导致在使用时经常遇到问题。
    比如一段代码在MS-SQL数据库上可以正常执行,如果把数据换成DB2,则出现错误;DB2可以,再换成Oracle,换成Access,又要重新调试,等等这种情况,省事的办法可以不用带参数的SQL语句,直接拼好SQL语句字符串,提交数据库
    一般的数据库中日期时间类型写成'2008-4-29 12:00:55'形式都是可以的
    当然也有例外,比如Access,可能要写成#2008-4-29 12:00:55#