如题,查询语句参数应该怎么写啊?
给参数赋值 怎么弄啊?with Query do begin
  tempParam=parameters.addparameter;
  tempParam.name='@begindate';
  tempParam.DataType:=ftDateTime;
      tempParam.Direction:=pdInput;      tempParam.Value:=st;
  strcondition=strcondition+' and begindate=@begindate';
endstrsql=strSelect+strConditon+strGroup+strOder;query.sql=strsql;query.open;//此处出错

解决方案 »

  1.   

      with bjqry do
      begin
        bjqry.Close;
        bjqry.SQL.Clear;
        bjqry.SQL.Add('select user_id,user_name,user_flag from hs_user where user_id=:uname);
        bjqry.Parameters.ParamByName('uname').Value:='李四';
        bjqry.Open;
      end;
      

  2.   

    :附近有语法错误
    数据库是ms sql server
    另外,在给sql属性赋值时,原先的参数就清空了,有办法不清空这些参数吗?
    谢谢!
      

  3.   

    可以试试去掉bjqry.SQL.Clear,sql server支持多sql 语句语法错误,修改为
    bjqry.Parameters.ParamByName('uname').Value:=QuotedStr('李四'); 
      

  4.   


      GetDateParams;//得到时间条件  DMForm.aq4.SQL.Clear;
    //  DMForm.aq4.ParamCheck:=false;
      DMForm.aq4.Parameters.Clear;
     FillSqlParams; //此处根据条件添加了一些参数,方法和下面相同//  DMForm.aq4.SQL.Add(strCondition);
    //  DMForm.aq4.SQL.Add(strGroup);  strRowNum:='select row_number() over('+strOrder+') as id,';
      
      if requireHis then begin  //如果报表可能要查询历史数据
        if IsSearHis(st) then  begin  //需要查询历史数据
          s_sql:=strRowNum+'* from ('+strSql+' '+strCondition+' '+strGroup +' union '+ strSqlHis
                  +' '+strCondition+' '+strGroup+') as tab';
        end else begin   //不需要查询历史数据
          strsql:=StuffString(strsql,0,7,strRowNum);
          s_sql:=strSql+' '+strCondition+' '+strGroup;
        end;
      end else begin   //报表不查询历史数据 ,和需要查询历史数据时,条件不需要到历史数据中查找一样的语句和处理
          strsql:=StuffString(strsql,0,7,strRowNum);
          s_sql:=strSql+' '+strCondition+' '+strGroup;
      end ;  try    DMForm.aq4.ParamCheck:=false;
        DMForm.aq4.SQL.Add(s_sql);
         with DMForm.aq4.Parameters do begin
          tempParam:=AddParameter;
          tempParam.Name:='startdate';
          tempParam.DataType:=ftDateTime;
          tempParam.Direction:=pdInput;      tempParam.Value:=st;
          tempParam:=AddParameter;
          tempParam.Name:='enddate';
          tempParam.DataType:= ftDateTime;
          tempParam.Direction:=pdInput;
          tempParam.Value:=ed;  end;
        if not DMForm.aq4.Connection.Connected then
          DMForm.aq4.Connection.Connected:=true; //     DMForm.aq4.Prepared:=true;
        DMForm.aq4.Open
      

  5.   


    把你的代码贴出来~~可以不清空,
    with bjqry do 
      begin 
        bjqry.Close; 
        bjqry.SQL.Add('select user_id,user_name,user_flag from hs_user where user_id=:uname);
        bjqry.SQL.Add(' and user_id=:u_id');
        bjqry.Parameters.ParamByName('uname').Value:='李四'; 
        bjqry.Parameters.ParamByName('u_id').Value:=01; 
        bjqry.Open; 
      end; 
      

  6.   

    请问,能实现上面的功能吗?先加参数,然后再给tadoquery的sql属性赋值。?
      

  7.   

    通过写语句的形式,然后赋值的方法可以了。但不知道为什么置ParamCheck为false的时候,根据名称添加不行。
    在用@和?及:上试了半天,郁闷!
      

  8.   

    在后面加上:Query.Refresh试试;
      

  9.   

    明显SQL语句组装有问题 在你的这句前面加一个
    showmessage(strsql);
    query.open;//此处出错 看看你的SQL语句是什么地方出问题了 
      

  10.   

    SQL语句没问题,先在查询分析器中试过,然后在调用。用了楼上的方法,可以了。 但只能自动生成,不能显式给参数命名,不知道其中道理。
    知道怎么用就好了,结帖。