客户端的表增添了如下数
id   name   xh   grade  
1    tony   12     5   
2     jim   15     4
.......比如新增记录有n条,我想用n个insert语句比如insert table values(1,tony,12,5) 等逐个描述出来,放到服务端来执行,进行数据更新,怎么才能做到这一点.现在我把所有的数据都加到tstringlist里面了,然后怎么办?我想用一个循环
while not eof do
       begin
           for i:=0 to fieldcount-1 do
             .....中间的这段是逐个推出insert语句   
          next;
          end;
谢谢各位

解决方案 »

  1.   

    insert table values(1,tony,12,5),insert table values(1,tony,12,5),insert table values(1,tony,12,5)......
    在insert table values(1,tony,12,5)后加","就可以一次执行。只适用于ms SQL
      

  2.   

    我上面仅仅是举个例子,1,tony,12,5 这些数据在程序中是根本不知道的,你如果想获得他,就要用变量一个一个去获得并保存,如果字段n多的话,这样做的效率就狠低,而且不同表的字段不同,通用性不强
      

  3.   

    用 UNION 连接所有的INSERT语句后用QUERY一起执行。
    EX:
      insert table values(1,tony,12,5)
    UNION  
      insert table values(1,tony,12,5)
    UNION
      
      

  4.   

    你可以把需要插入的字段分开来存在Stringlist里,比如aaa,bbb,ccc,ddd这四个字段,那么可以用aaaSL,bbbSL,cccSL,dddSL这四个Stringlist分别保存这4个字段的值,那么可以这样
    var
      SqlStr: String;
      SqlStr := 'insert table values(aaaSL[0],bbbSL[0],cccSL[0],dddSL[0])';
    for i:=1 to Fieldcount-1 do  <----你的循环条件
    begin
      SqlStr := SqlStr+'insert table values(aaaSL[i],bbbSL[i],cccSL[i],dddSL[i])';
    end;
    with adoquery do
    begin
      sql.clear;
      sql.add(SqlStr);
      Execute;
    end;给你一个刚写的字符串叠加的例子
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Str: String;
      i: Integer;
      a,b: TStringList;
    begin
      Try
        a := TStringList.Create;
        b := TStringList.Create;
        For i:=0 to 10 do
        begin
          a.Add(inttostr(i));
          b.Add(inttostr(i+1));
        end;
        Str := 'insert into aaa values('''+a[0]+''','''+b[0]+'''),';
        for i:=1 to 10 do
        begin
          Str := Str+'insert into aaa values( '''+a[i]+''','''+b[i]+'''),';
        end;
        Showmessage(str);
      Finally
        FreeAndNil(a);
        FreeAndNil(b);
      End;
    end;
      

  5.   

    SqlStr := SqlStr+'insert table values(aaaSL[i],bbbSL[i],cccSL[i],dddSL[i])';
    ------------------------------------------------------------------------------
    这个没有调试,语法应该不对,你参考后面的代码
      

  6.   

    谢谢楼上的,你的方法让我想到了另一个方法,帮我看看行不行
       while not eof do
              begin
              str:='';
                for i:=0 to fieldcount-1 do
                   begin
                     if i=fieldcount-1 then
                        str :=str+''''+trim(Fields[i].AsString)+''''
                     else
                        str :=str+''''+trim(Fields[i].AsString)+''''+',';
                 sql :='insert'+#32+tablename+#32+'values'+'('+str+')';
                 end;
              F_list.Add(sql);
              next;
              end;
      

  7.   

    用 UNION 连接所有的INSERT语句后用QUERY一起执行。
    EX:
      insert table values(1,tony,12,5)
    UNION  all
      insert table values(1,tony,12,5)
    UNION  all
      

  8.   

    在循环中取出所有自己值组合为Values,我就用这种方法,能通用。你的例子帮你整理了一下
    while not eof do
    begin
      str:='';
      for i:=0 to fieldcount-1 do
      begin
        if length(str)=0 then
          str :=''''+trim(Fields[i].AsString)+''''
        else
          str :=str+','+''''+trim(Fields[i].AsString)+'''';
      end;
      sql :='insert into'+#32+tablename+#32+'values'+'('+str+')';
      F_list.Add(sql);
      next;
    end;