if (length(temp)<20) and (length(stemp)<20)  then
    begin
     with ADOQuery1 do
      begin
      close;
      SQL.Clear;
      SqL.Add('insert into mytable values(:k,:m,:n);');
      Parameters.ParamByName('k').Value  :=temp;
      Parameters.ParamByName('m').Value  :=stemp;
      Parameters.ParamByName('n').Value  :=name;
      execSQL;
      end;
     end;为什么 最后一个字段的值全部是adoquery1呢。 name 是动态获取,值是没有问题的哦,而且也没有超过字段的长度。

解决方案 »

  1.   

    我是说执行完这段代码以后 为什么数据库mytable 里 所写入的第三个字段的值是adoquery1呢?
    name是被动态赋值的啊 。
      

  2.   

    sql语句有问题,你要写出插入的字段
    不然程序会随机把你的值插入字段里面
      

  3.   


     if (length(temp) <20) and (length(stemp) <20)  then 
        begin 
        with ADOQuery1 do 
          begin 
          close; 
          SQL.Clear; 
          SqL.Add('insert into mytable values(:k,:m,:n);'); 
          Parameters.ParamByName('k').Value  :=temp; 
          Parameters.ParamByName('m').Value  :=stemp; 
          Parameters.ParamByName('n').Value  :=name; //编译器会认为是ADOQuery1.name,故结果肯定为'ADOQuery',写成Name1即可
          execSQL; 
          end; 
        end; 
      

  4.   

    楼上说的极对。好好看下with..begin..end;的意思。
    把with 去掉或者在name加上所属单元即可解决问题。f (length(temp) <20) and (length(stemp) <20)  then 
    begin 
     adoquery1.close; 
     adoquery1.SQL.Clear; 
     adoquery1.SqL.Add('insert into mytable values(:k,:m,:n);'); 
     adoquery1.Parameters.ParamByName('k').Value  :=temp; 
     adoquery1.Parameters.ParamByName('m').Value  :=stemp; 
     adoquery1.Parameters.ParamByName('n').Value  :=name;
     adoquery1.execSQL;  
    end; 
    //或Parameters.ParamByName('n').Value  :=name替换成
    Parameters.ParamByName('n').Value  :=unit1.name
      

  5.   

      with adoquery1 do
      begin
        showmessage(Name);
      end;这样就明白了,因为你利用了with方式