adoquery1.Close;
      adoquery1.SQL.Clear;
      adoquery1.SQL.Add('select * from :id2 where 内部编号=:id1');
      adoquery1.Parameters.ParamByName('id1').Value:=trim(edit1.Text);
      if tr=1 then
        adoquery1.Parameters.ParamByName('id2').Value:='exsellview'
      else if tr=2 then
        adoquery1.Parameters.ParamByName('id2').Value:='avsellview'
      else if tr=3 then
        adoquery1.Parameters.ParamByName('id2').Value:='sellview'
      else
        adoquery1.Parameters.ParamByName('id2').Value:='sellview';
       adoquery1.Open;
弹出的错误是:必须声明变量'@P1'。
这是什么意思?我的参数id2根据if分别指向一个不同的sql server2000里的视图,视图相当于一个表是吧?

解决方案 »

  1.   

    呵呵。变量var没有声名啊。你要把代码放全点好看清楚啊。
      

  2.   

    你还是先生成sql语句再赋给tquery.sql吧不要用Parameters
      

  3.   

    表名/字段名 不能用参数传递,只能动态生成SQL字符串
      

  4.   

    我没有使用变量@P1,变量tr是我定义的全局变量。
        请问在adoquery里的sql语言中from后面的表名是不是不能用参数?要是能用参数的话,应该怎么用?
      

  5.   

    定义一个
    var temp,tpsql:string;
          if tr=1 then
            temp:='exsellview'
          else if tr=2 then
            temp:=:='avsellview'
          else if tr=3 then
            temp:=:='sellview'
          else
            temp:=:='sellview';      
    tpsql:='select * from ' +temp+' where 内部编号=:id1';
    adoquery1.Close;
          adoquery1.SQL.Clear;
          adoquery1.SQL.Add(tpsql);
          adoquery1.Parameters.ParamByName('id1').Value:=trim(edit1.Text);
    qdoquery1.open;
    这样你试试