你把两个field改称field1和field2试试.

解决方案 »

  1.   

    我那两个本来就不同的
    一个是field,一个是fields呀?这好像不是问题的关键
      

  2.   

    他的意思是field可能是系统保留字
      

  3.   

    var
      TmpStr:String;
    begin
      with Adoquery1 do
      begin
        Close;
        SQL.Clear;
        TmpStr := 'First';
        SQL.Add(' select count('+TmpStr+') as total from number where :field = :number');
        Parameters.ParamByName('number').Value:=StrToInt(Edit1.Text);
        Parameters.ParamByName('field').Value := 'first';
        Open;
      end;
    end;
      

  4.   

    我喜欢用拼串:
    var
      sqlstr:string;
    begin
      sqlstr:='select count(' + 'first'+ ') as total from number '
              +'where '+'first'+'='+edit1.text;
      adoquery.sql.clear;
      adoquery.sql.text:=sqlstr;
      adoquery.open;
      

  5.   

    如果按照你的写法~~
    那么SQL语句就是
    select count('First') as total from number where First = 20'当然不行了~~
      

  6.   

    我将sql改成select count(:field) as total from number where first= :number
    然后给field,number赋值就可以了,但是最后的first为什么就不能用变量了?
      

  7.   

    tikkypeng(千两狂死郎) ,按照你的写法照样还是查不出来值啊?
      

  8.   

    字段名称不能用param,所以你的SQL写法是错的。
    错误:
    SQL := 'select count(:field) as total from number where :field = :number'正确:
    SQL := 'select count('+ FieldName +') as total from number where '+ FieldName +'= :number'字段名称不能用参数去表示。还有在MS SQL server中,top关键字后边紧跟的数字也不能用参数,比如'select top :topcount * from table'这样的写法是错的。在Oracle中是怎么一个情况我就不太清楚。