with adoq do
    begin  
        Close ;
        Sql.Clear ;
        Sql.Add('Select Count(*) From E01DT0002 Where ') ;
        Sql.Add(' E01DT0002003=:E01DT0002003 and E01DT0002001<>:E01DT0002001 and ') ;
        Sql.Add('(E01DT0002009 is null or E01DT0002009<:E01DT0002009)') ;
        Parameters.ParamByName('E01DT0002003').Value :=1 ;
        Parameters.ParamByName('E01DT0002001').Value :=2 ;
        Parameters.ParamByName('E01DT0002009').Value :='2005-10-10' ;
        str:=sql.text ;
        Open ;
    end ;
    问题出在Str:='Select Count(*) From E01DT0002 Where 
 E01DT0002003=:E01DT0002003 and E01DT0002001<>:E01DT0002001 and 
(E01DT0002009 is null or E01DT0002009<:E01DT0002009)'这是为什么,为什么明明给参数附了值还没用呢

解决方案 »

  1.   

    还有谁能说说Prepared、ParamCheck、Parameters.ParseSQL分别是啥意思
      

  2.   

    with adoq do
        begin  
            Close ;
            Sql.Clear ;
            Sql.Add('Select Count(*) From E01DT0002 Where ') ;
            Sql.Add(' E01DT0002003=:E01DT0002003 and E01DT0002001<>:E01DT0002001 and ') ;
            Sql.Add('(E01DT0002009 is null or E01DT0002009<:E01DT0002009)') ;
            Parameters.ParamByName('E01DT0002003').Value :=1 ; //Parameters.ParamByName('E01DT0002003').AsInteger:=1;
            Parameters.ParamByName('E01DT0002001').Value :=2 ; //同上修改
            Parameters.ParamByName('E01DT0002009').Value :='2005-10-10' ; //Parameters.ParamByName('E01DT0002009').AsString:='2005-10-10'
            str:=sql.text ;
            Open ;
        end ;
      

  3.   

    cssubi(我就是我) 
    首先谢谢你回答我的问题,但
    Parameters.ParamByName('E01DT0002003').AsInteger:=1;
    这样的写法delphi不支持吧
      

  4.   

    你的'E01DT0002009'是一个日期类型么?
    Parameters.ParamByName('E01DT0002009').Value :=StrToDate('2005-10-10')
      

  5.   

    不推荐使用parambyname('').value这种格式;
    最好用显式转换parambyname('').asstring,asinteger...
    ---------------------------------------------
    with adoq do
        begin  
            Close ;
            Sql.Clear ;
            Sql.Add('Select Count(*) From E01DT0002 Where ') ;
            Sql.Add(' E01DT0002003=:E01DT0002003 and E01DT0002001<>:E01DT0002001 and ') ;
            Sql.Add('(E01DT0002009 is null or E01DT0002009<:E01DT0002009)') ;
            Parameters.ParamByName('E01DT0002003').asinteger :=1 ;
            Parameters.ParamByName('E01DT0002001').asinteger :=2 ;
            Parameters.ParamByName('E01DT0002009').asstring :='2005-10-10' ;
            str:=sql.text ;
            Open ;
        end ;
      

  6.   

    我晕,你们谁Parameters.ParamByName('E01DT0002009').AsString:='xx'
    写过,这么强啊,我怎么写不出来呢,我只能Parameters.ParamByName('E01DT0002009').Value:='xx'