开始加一行:
adoquery3.Parameters.Clear;
否则第一次是给第一到四个参数赋值(正确),第二次是给第五到八个参数赋值(错误),第三次...
     ____     ____
     \ p \   / g /
      \ l \_/ n /
       \ a   o /
        \ i s /
         \ n /
          \_/

解决方案 »

  1.   

    我们之所以使用参数,是为了用同一条SQL语句不同的数据作多次操作,这样可以使DBMS对SQL语句的编译只作一次。你每一次都重新设置SQL语句,并没有体现出参数的好处。
    我觉得这样写更好:
    procedure InitQuery//这个函数调用一次
    begin
      adoquery3.Active := false;
      adoquery3.SQL.Clear;
      adoquery3.SQL.Add(' INSERT INTO kaoDianTale'+
          '  (考点所在章序号,考点所在节序号,考点内容,考点级别)'
          +'  values(:考点所在章序号,:考点所在节序号,:考点内容,:考点级别)');
      adoquery3.Parameters.Clear;0D
      adoquery3.Parameters.ParseSQL(adoquery3.SQL.Text,True);
      try//可能会有些DBMS不支持Prepare
        adoquery3.Prepared := True;
      except
      end;
    end;procedure ExecQuery//这个函数重复调用
    begin  adoquery3.Parameters.ParamByName('考点所在章序号').Value := 3;
      adoquery3.Parameters.ParamByName('考点所在节序号').Value := 5;
      adoquery3.Parameters.ParamByName('考点内容').Value := '美丽的小山村';
      adoquery3.Parameters.ParamByName('考点级别').Value := 4;
      adoquery3.ExecSQL ;
    end;
         ____     ____
         \ p \   / g /
          \ l \_/ n /
           \ a   o /
            \ i s /
             \ n /
              \_/
      

  2.   

    agree with plainsong(轻风) 
    but i think the better way is:
    adoquery3.close;
    adoquery3.sql.clear;
    adoquery3.sql.add('INSERT INTO kaoDianTale 考点所在章序号,考点所在节序号,考点内容,考点级别  values(:考点所在章序号,:考点所在节序号,:考点内容,:考点级别)');
    adoquery3.parameters.parambyname('考点所在章序号').value:=3;
    adoquery3.parameters.parambyname('考点所在节序号').value:=5;
    adoquery3.parameters.parambyname('考点内容').value:='美丽的小山村';
    adoquery3.parameters.parambyname('考点级别').value:=4;
    adoquery3.execsql;
      

  3.   

    得考虑参数的类型!
    用 CreateParameter 方法就行了。
    每次调用前先把参数清除,然后创建。
      

  4.   

    我的意思是说,为了享受参数的好处,不要每次都设置SQL属性。否则我把数值写到SQL中去就行了,为什么还要使用参数呢?
    用我的方法,如果用的是支持SQL预编译的DBMS,当循环次数很多时,能够提高很多运行效率。     ____     ____
         \ p \   / g /
          \ l \_/ n /
           \ a   o /
            \ i s /
             \ n /
              \_/
      

  5.   

    建议使用阿AdoQuery之前关闭以下:
    AdoQuery1.close
    AdoQuery1.sql.clear
    AdoQuery1.Sql.add
    AdoQuery1.Prepared
    AdoQuery1.ExecSql
      

  6.   

    我认为楼上兄弟的代码应该把AdoQuery1.Prepared去掉,因为每一次SQL都被重新赋值了,结果每一次都会重新编译,设置AdoQuery1.Prepared导致编译和执行被分成两步,结果反而降低了效率.只有在一条SQL被多次执行时,设置AdoQuery1.Prepared才有意义.
         ____     ____
         \ p \   / g /
          \ l \_/ n /
           \ a   o /
            \ i s /
             \ n /
              \_/