窗体里有一个button,一个adoconnection,一个adoquery,sql语句里加入变量的值,为什么不行呢?如何解决加变量这个问题?各位高手帮我看看
procedure TForm1.Button1Click(Sender: TObject);
var
   n,o :array of string;
   sql :string;
   i :integer;
begin
   setlength(n,10);
   setlength(o,10);
   for i :=0 to 5 do
   begin
      n[i] :=inttostr(2*i);
      o[i] :=inttostr(2*i+1);
   end;
   adoconnection1.Connected :=true;
   adoquery1.Connection :=adoconnection1;
   for i :=0 to 5 do
   begin
      sql :='insert into dbo.tmptable';
      sql :=sql +' values(';
      sql :=sql +'n[i]';---------------------赋变量值为什么不行?
      sql :=sql +',';
      sql :=sql +'o[i]';
      sql :=sql +')';
      sql :=sql ;
      adoquery1.Active :=false;
      adoquery1.SQL.Clear;
      adoquery1.SQL.Add(sql);
      adoquery1.ExecSQL;
   end;end;

解决方案 »

  1.   

    for i :=0 to 5 do
       begin
          sql :='insert into dbo.tmptable';
          sql :=sql +' values(';
          sql :=sql + n[i];---------------------赋变量值为什么不行?把单引号去掉
          sql :=sql +',';
          sql :=sql +o[i];       //把单引号去掉
          sql :=sql +')';
          sql :=sql ;
          adoquery1.Active :=false;
          adoquery1.SQL.Clear;
          adoquery1.SQL.Add(sql);
          adoquery1.ExecSQL;
       end;
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
       n,o :array of string;
       sql :string;
       i :integer;
    begin
       setlength(n,10);
       setlength(o,10);
       for i :=0 to 5 do
       begin
          n[i] :=inttostr(2*i);
          o[i] :=inttostr(2*i+1);
       end;
       adoconnection1.Connected :=true;
       adoquery1.Connection :=adoconnection1;
       for i :=0 to 5 do
       begin
          sql :='insert into dbo.tmptable';
          sql :=sql +' values(';
          sql :=sql +n[i];//////////////////把引号去了
          sql :=sql +',';
          sql :=sql +o[i];//////////////////把引号去了
          sql :=sql +')';
          sql :=sql ;
          adoquery1.Active :=false;
          adoquery1.SQL.Clear;
          adoquery1.SQL.Add(sql);
          adoquery1.ExecSQL;
       end;end;
    如果这两个字段是字符串类型的,写成这样
    procedure TForm1.Button1Click(Sender: TObject);
    var
       n,o :array of string;
       sql :string;
       i :integer;
    begin
       setlength(n,10);
       setlength(o,10);
       for i :=0 to 5 do
       begin
          n[i] :=inttostr(2*i);
          o[i] :=inttostr(2*i+1);
       end;
       adoconnection1.Connected :=true;
       adoquery1.Connection :=adoconnection1;
       for i :=0 to 5 do
       begin
          sql :='insert into dbo.tmptable';
          sql :=sql +' values(';
          sql :=sql +''''+n[i]+'''';//////////////////
          sql :=sql +',';
          sql :=sql +''''+o[i]+'''';////////
          sql :=sql +')';
          sql :=sql ;
          adoquery1.Active :=false;
          adoquery1.SQL.Clear;
          adoquery1.SQL.Add(sql);
          adoquery1.ExecSQL;
       end;end;
      

  3.   

    真遗憾 , adoquery 没有 parambyname
      

  4.   

    建议直接用ADOConn.Execute(sqlstr,i,[eoExecuteNoRecords]);这样语句
    速度和资源上比再建立一个adoquery快
      

  5.   

    两个单引号放到sql语句中是一个单引号
      

  6.   

    如果是字符型的,在SQL语句中要有'''+aa+''',这样执行时的SQL语句为'aa的值',
    如果是integer之类的,在SQL语句中是'+aa+',执行时就是直接是aa的值。
    注:aa是变量名称。