你可以用BatchMove,Delphi本身有例子的

解决方案 »

  1.   

    to: yicw(无奈)
    能不能煩你給個例子。
      

  2.   

    fBM := TBatchMove.Create(Self);
    try
      fBM.Sorce := AAA;
      fBm.Destination  := bbb;
      fBm.Mode := batCopy;
      fBm.Execute;
    finally
      fBm.Free
    end;
      

  3.   

    to: armadawang(wjq)
    以上程序運行時有如下錯誤:
    [Error] w_paib.pas(1231): Undeclared identifier: 'Sorce'
      

  4.   

    ObjectsThe example demonstrates using TBatchMove, TBevel, TComboBox, TPageControl, TDatabase, and TOpenDialog objects. RunningTo run this example, load the project file from the Help\Examples\Batchmv directory. A second, similar example is also provided in the folder Help\Examples\Batchmv2.DescriptionThis example demonstrates using TBatchMove to manipulate the records in a database table. unit Batmove;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, ExtCtrls, Db, DBTables, ComCtrls;type
      TForm1 = class(TForm)
        BatchMove1: TBatchMove;
        tblSource: TTable;
        tblDest: TTable;
        Bevel1: TBevel ;
        Label6: TLabel;
        cmbxDestAlias: TComboBox;
        Label7: TLabel;
        cmbxDestTable: TComboBox;
        Label8: TLabel;
        cmbxDestIndex: TComboBox;    Bevel2: TBevel;
        cmbxSourceAlias: TComboBox;
        cmbxSourceTable: TComboBox;
        cmbxSourceIndex: TComboBox;
        Label5: TLabel;
        Label4: TLabel;
        Label3: TLabel;
        cmbxMode: TComboBox;
        Button1: TButton;
        Bevel3: TBevel;
        chkbxAbortKey: TCheckBox;
        chkbxAbortProblem: TCheckBox;
        chkbxTrans: TCheckBox;
        Label1: TLabel;
        Label2: TLabel;
        Label10: TLabel;
        Label9: TLabel;
        Label12: TLabel;
        edtChangedTable: TEdit;    Label13: TLabel;
        edtKeyVioTbl: TEdit;
        Label14: TLabel;
        edtProbTbl: TEdit;
        Label11: TLabel;
        edtRecCount: TEdit;
        procedure FormCreate(Sender: TObject);
        procedure cmbxSourceAliasChange(Sender: TObject);
        procedure cmbxDestAliasChange(Sender: TObject);
        procedure cmbxSourceTableChange(Sender: TObject);
        procedure cmbxDestTableChange(Sender: TObject);
        procedure cmbxSourceIndexChange(Sender: TObject);    procedure cmbxDestIndexChange(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure chkbxAbortKeyClick(Sender: TObject);
        procedure chkbxAbortProblemClick(Sender: TObject);
        procedure chkbxTransClick(Sender: TObject);
        procedure cmbxModeChange(Sender: TObject);
        procedure edtRecCountKeyPress(Sender: TObject; var Key: Char);
        procedure FormShow(Sender: TObject);  private
        { Private declarations }
        function IsStringsEqual(const s1,s2 : string): boolean;
    //    simple utility function
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject); // Get alias names
    begin
      if Session.Active = false then
        Session.Open;
      Session.GetAliasNames(CmbxSourceAlias.Items);  cmbxDestAlias.Items := cmbxSourceAlias.Items;
    end;procedure TForm1.cmbxSourceAliasChange(Sender: TObject);
    begin
      if cmbxSourceAlias.ItemIndex <> -1 then
      begin
         tblSource.DatabaseName := cmbxSourceAlias.Items[cmbxSourceAlias.ItemIndex];
         Session.GetTableNames(tblSource.DatabaseName,'',true,false,cmbxSourceTable.Items);
      end
      else
      begin
        tblSource.DatabaseName := '';
        cmbxSourceTable.Items.Clear;  end;
    end;procedure TForm1.cmbxDestAliasChange(Sender: TObject);
    begin
      if cmbxDestAlias.ItemIndex <> -1 then
      begin
         tblDest.DatabaseName := cmbxDestAlias.Items[cmbxDestAlias.ItemIndex];
         Session.GetTableNames(tblDest.DatabaseName,'',true,false,cmbxDestTable.Items);
      end
      else
      begin
        tblDest.DatabaseName := '';
        cmbxDestTable.Items.Clear;
      end;
    end;procedure TForm1.cmbxSourceTableChange(Sender: TObject);
    begin
      if cmbxSourceTable.ItemIndex <> -1 then
      begin
         tblSource.TableName := cmbxSourceTable.Items[cmbxSourceTable.ItemIndex];
         tblSource.GetIndexNames(cmbxSourceIndex.Items);
      end
      else
      begin
        tblSource.TableName := '';
        cmbxSourceIndex.Items.Clear;
      end;end;procedure TForm1.cmbxDestTableChange(Sender: TObject);begin
      if cmbxDestTable.ItemIndex <> -1 then
      begin
         tblDest.TableName := cmbxDestTable.Items[cmbxDestTable.ItemIndex];
         tblDest.GetIndexNames(cmbxDestIndex.Items);
      end
      else
      begin
        tblDest.TableName := '';
        cmbxDestIndex.Items.Clear;
      end;
    end;procedure TForm1.cmbxSourceIndexChange(Sender: TObject);
    begin
      if cmbxSourceIndex.ItemIndex <> -1 then  begin
        tblSource.IndexName := cmbxSourceIndex.Items[cmbxSourceIndex.ItemIndex];
      end
      else
      begin
         tblSource.IndexName := '';
      end;
    end;procedure TForm1.cmbxDestIndexChange(Sender: TObject);
    begin
      if cmbxDestIndex.ItemIndex <> -1 then
      begin
        tblDest.IndexName := cmbxDestIndex.Items[cmbxDestIndex.ItemIndex];
      end
      else
      begin     tblDest.IndexName := '';
      end;end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      if tblDest.TableName = '' then
        tblDest.TableName := cmbxDestTable.Text;
      if ((tblSource.DatabaseName <> '') and // test for enough input
         (tblSource.TableName <> '') and
         (tblDest.DatabaseName <> '') and
         (tblDest.TableName <> '') and
         (cmbxMode.items[cmbxMode.ItemIndex] <> '')) then  begin
        BatchMove1.ChangedTableName := edtChangedTable.Text;  // more batchmove setup
        BatchMove1.KeyViolTableName := edtKeyVioTbl.Text;
        BatchMove1.ProblemTableName := edtProbTbl.Text;
        BatchMove1.RecordCount := StrToInt(edtRecCount.Text);
      end
      else
      begin
        MessageDlg('Incomplete input.',mtError,[mbOK],0);
        exit;
      end;
      BatchMove1.Execute;  // run the batchmove
      MessageDlg('BatchMove complete. Number of records applied: '+IntToStr(BatchMove1.MovedCount),mtInformation,[mbOK],0);end;procedure TForm1.chkbxAbortKeyClick(Sender: TObject);
    begin
      BatchMove1.AbortOnKeyViol := chkbxAbortKey.Checked;
    end;procedure TForm1.chkbxAbortProblemClick(Sender: TObject);
    begin
      BatchMove1.AbortOnProblem := chkbxAbortProblem.Checked;
    end;procedure TForm1.chkbxTransClick(Sender: TObject);
    begin
      BatchMove1.Transliterate := chkbxTrans.Checked;
    end;function TForm1.IsStringsEqual(const s1,s2 : string): boolean;begin
       Result := UpperCase(s1) = UpperCase(s2);
    end;
    // set the batch mode
    procedure TForm1.cmbxModeChange(Sender: TObject);
    begin
      if cmbxMode.ItemIndex <> -1 then
      begin
        if IsStringsEqual(cmbxMode.Items[cmbxMode.ItemIndex],'Append') then
          BatchMove1.Mode := batAppend
        else if IsStringsEqual(cmbxMode.Items[cmbxMode.ItemIndex],'Copy') then
          BatchMove1.Mode := batCopy    else if IsStringsEqual(cmbxMode.Items[cmbxMode.ItemIndex],'Append 
    Update') then
          BatchMove1.Mode := batAppendUpdate
        else if IsStringsEqual(cmbxMode.Items[cmbxMode.ItemIndex],'Delete') then
          BatchMove1.Mode := batDelete
        else if IsStringsEqual(cmbxMode.Items[cmbxMode.ItemIndex],'Update') then
          BatchMove1.Mode := batUpdate
        else
          MessageDlg('Batch mode not found',mtError,[mbOK],0);  end;
    end;
    // only allow numbers to be typed in
    procedure TForm1.edtRecCountKeyPress(Sender: TObject; var Key: Char);
    begin
      if ((key in ['0'..'9'] = false) and (word(key) <> VK_BACK)) then
        key := #0;
    end;procedure TForm1.FormShow(Sender: TObject);
    begin
        cmbxSourceAlias.SetFocus;
    end;end.
      

  5.   

    TO: cobi(我是小新,我只有5岁) 請問把BBB中的一條當前記錄轉入AAA又該如何做。
      

  6.   

    to: bubble()
    老兄,這點我知道,但代碼會寫一大堆,執行速度也慢的能急死人。armadawang(wjq)的方法很好!只要把fBm.Mode := batCopy改為batAppend就可以把AAA中的值加入到BBB中。但反過來: 請問如何把BBB中的一條當前記錄轉入AAA中呢?
     
     
      

  7.   

    同意cobi(我是小新,我只有5岁)的答案.
      

  8.   

    請問如何把BBB中的一條當前記錄轉入AAA中呢?