如何从一个表向另一个表"成批拷贝记录",用的是ACCESS!
而不用循环语句,是否可以弄个存储过程?我现在用的是这样的:
Sum:=0;
           with ADOTable1 do
           begin
                First;
                while not eof do
                begin
                  Sum:=Sum+{ADOTable1.FieldByName('GoodsSum').AsFloat+} FieldByName('UnitPrice').AsFloat*FieldByName('Quantity').AsInteger;
                  //将明细表的金额累加到主表的金额字段
                   Str:='Insert into BillsDetail (BillNo,CreateDate,'+
                        'EmployeeID,ClientID,GoodsID,GoodsName,GoodsUnit,Quantity,UnitPrice,GoodsSum,delFlag) Values(';
                        Str:=Str+'"'+ ls_tkdh+'",' ;   //单号
                        Str:=Str+'"'+ datee+'",' ;     //日期
                        Str:=Str+'"'+ '01'+'",' ;     //操作员
                        Str:=Str+'"'+ 'Client'+'",' ;      //所属客户编号
                        Str:=Str+'"'+ ADOTable1.FieldByName('GoodsID').AsString+'",' ;      //货物编号
                        Str:=Str+'"'+ VartoStr(ADOTable1.FieldByName('GoodsName1').AsString)+'",' ;      //商品名
                        Str:=Str+'"'+ VartoStr(ADOTable1.FieldByName('GoodsUnit').AsString)+'",' ;      //单位
                        Str:=Str+ VartoStr(ADOTable1.FieldByName('Quantity').AsInteger)+',' ;      //数量
                        Str:=Str+ VarToStr(ADOTable1.FieldByName('UnitPrice').AsFloat)+',' ;      //单价
                        Str:=Str+ VarToStr(FieldByName('GoodsSum').AsFloat)+',';  //本行的金额
                        Str:=Str+'"'+ ADOTable1.FieldByName('delFlag').AsString+'")' ;      //标志
                        ShowMessage(str);
                        try
                          with ADOCommand1 do
                          begin
                             Connection :=ADOConnection1;
                             CommandText := Str;
                             CommandType := cmdText;
                             //ADODataSet1.Recordset :=
                             Execute;
                          end;
                          //ls_tkdh:=ADODataSet1.Recordset.Fields[0].Value;   //取RecordSet中记录的方法
                        except
                          on E: Exception do
                           begin
                             ShowMessage(E.Message);
                           end;
                        end;                        Next;
                end;
            end;

解决方案 »

  1.   

    不同的數據庫用. TBatchMove
    同一個Access用SQL就好了.
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      ssql1,insertsql:string;
    begin
      ssql1 := 'Select * from ssinf';
      with Adoquery1 do
      begin
        Close;
        SQL.Text := ssql1;
        Open;
        first;
        while not Eof do
        begin
          ADOQuery2.Append;
          ADOQuery2.FieldByName('Name').AsString := FieldByName('Name').AsString;
          ADOQuery2.Post;
        end;
      end;
    end;
      

  3.   

    INSERT INTO target [(field1[, field2[, ...]])] [IN externaldatabase] 
        SELECT [source.]field1[, field2[, ...]
        FROM tableexpression看看ACCESS中的幫助信息
      

  4.   

    一句就够了阿 insert into table1(zd1,zd2....)(select zd1,zd2.... from table2 where XX=XX)