如下:
现在已经在dbgrid 中用shift 选择了连续的三条数据,用control 选择了五条不连续的数据,现在要把这八条数据插入到另外一个空的表中,怎么办?  
关键是怎样得到选择的每一条数据呢?????

解决方案 »

  1.   

    自己已经解决:如下:
    //以下基本思想:
    var 
      i : integer;
      bm : book; //pointer
    with dataset do
    begin
    disablecontrols;
    bm := getbook;
    try
      for i := 0 to booklist.count-1 do
      begin
        book := booklist[i];
        do sth;
      end;
    finally
      gotobook(bm);
      freebook(bm);
      enablecontrols;
    end;
    end;//以下具体点的实现:
    procedure TfmMainForm.PrintReClick(Sender: TObject);
    var
      i : Integer;
      bm : Pointer;
      CorpName : String;
      Manager : String;
      Address : String;
      Tel : String;
      Zip : String;
    begin
      if DM.QueryRe.CanModify = True then
      begin
        DM.QueryRe.First;
        DM.QueryRe.Edit;
        while not DM.QueryRe.Eof do
        begin
          DM.QueryRe.Delete;
          // DM.QueryRe.Next;
        end;
      end;  with DM.Query do   //important
      begin
        DM.Query.DisableControls;   //accelerate
        bm := DM.Query.GetBook;  //get book
        try
          for i := 0 to DataTable.SelectedRows.Count-1 do  //important
          begin
            DM.Query.Book := DataTable.SelectedRows[i]; //important        CorpName := vartostr(DM.Query.FieldValues['CorpName']);
            Manager := vartostr(DM.Query.FieldValues['Manager']);
            Address := vartostr(DM.Query.FieldValues['Address']);
            Zip := vartostr(DM.Query.FieldValues['MailNum']);
            Tel := vartostr(DM.Query.FieldValues['Tel']);        DM.QueryRe.Append;
            DM.QueryRe.FieldByName('CorpName').AsString := CorpName;
            DM.QueryRe.FieldByName('Manager').AsString := Manager;
            DM.QueryRe.FieldByName('Address').AsString := Address;
            DM.QueryRe.FieldByName('MailNum').AsString := Zip;
            DM.QueryRe.FieldByName('Tel').AsString := Tel;
            DM.QueryRe.Post;
          end;
        finally  //important
          DM.Query.GotoBook(bm);
          DM.Query.FreeBook(bm);
          DM.Query.EnableControls;
        end;
      end;  fmNorMalPrint.QuickRepN.DataSet := DM.QueryRe;
      fmNormalPrint.NCorpName.DataSet := DM.QueryRe;
      fmNormalPrint.NAddress.DataSet := DM.QueryRe;
      fmNormalPrint.NZip.DataSet := DM.QueryRe;
      fmNormalPrint.NTel.DataSet := DM.QueryRe;  fmMailPrint.QuickRepA.DataSet := DM.QueryRe;
      fmMailPrint.AZip.DataSet := DM.QueryRe;
      fmMailPrint.AAddress.DataSet := DM.QueryRe;
      fmMailPrint.ACorpName.DataSet := DM.QueryRe;
      fmMailPrint.AManager.DataSet := DM.QueryRe;
    end;