Table2.EmptyTable; //删除所有记录
//重新生成内容
Table1.First;
i:=Table1.Fields[0].AsInteger;
i2:=i;
while not Table1.Eof do
begin
  Table1.Next;
  if Table1.Fields[0].AsInteger>i2+1 then
  begin
    Table2.AddRecord(i,i2)
    i:=Table1.Fields[0].AsInteger;
  end;
  i2:=Table1.Fields[0].AsInteger;
end;
//当然要先对Table1排序

解决方案 »

  1.   

    procedure TForm1.InsertId(t1,t2:TTable);
    var
     IdArray:array of integer;
     i:integer;
    begin
      if t1.RecordCount=0 then exit;
      SetLength(IdArray,t1.RecordCount-1);
      t1.First;
      i:=0;
      while not t1.eof do
      begin
        IdArray[i]:=t1.FieldbyName('id').asinteger;
        i:=i+1;
        t1.Next;
      end;
      t1.Close;
      //对数组进行查找
      FindArray(IdArray,t2);
    end;procedure TForm1.FindArray(IdArray:array of integer;t:TTable);
    var
      StartId,EndId,PostId:integer;
      i,j:integer;
    begin
      StartId:=IdArray[0];
      j:=High(IdArray);
      for i:=1 to j do
      begin
        EndId:=IdArray[i-1];
        PostId:=IdArray[i];
        if (PostID-EndId)>1 then
        begin
          //处理临界值
          if (i=j) then
          begin
            StartId:=PostId;
            EndId:=PostId;
          end;
          t.Append;
          t.FieldbyName('StartId').asinteger:=StartId;
          t.FieldbyName('EndId').asinteger:=EndId;
          t.Post;
          if (i<>j) then
             StartId:=PostId;
        end;
      end;
    end;
      

  2.   

    procedure TForm1.InsertId(t1,t2:TTable);
    var
     IdArray:array of integer;
     i:integer;
    begin
      if t1.RecordCount=0 then exit;
      SetLength(IdArray,t1.RecordCount-1);
      t1.First;
      i:=0;
      while not t1.eof do
      begin
        IdArray[i]:=t1.FieldbyName('id').asinteger;
        i:=i+1;
        t1.Next;
      end;
      t1.Close;
      //对数组进行查找
      FindArray(IdArray,t2);
    end;procedure TForm1.FindArray(IdArray:array of integer;t:TTable);
    var
      StartId,EndId,PostId:integer;
      i,j:integer;
    begin
      StartId:=IdArray[0];
      j:=High(IdArray);
      for i:=1 to j do
      begin
        EndId:=IdArray[i-1];
        PostId:=IdArray[i];
        if (PostID-EndId)>1 then
        begin
          //判断临界值
          if (i=j) then
          begin
            StartId:=PostId;
            EndId:=PostId;
          end;
          t.Append;
          t.FieldbyName('StartId').asinteger:=StartId;
          t.FieldbyName('EndId').asinteger:=EndId;
          t.Post;
          if (i<>j) then
             StartId:=PostId;
        end;
      end;
    end;
      

  3.   

    是否要确保table2的数据不重复,比如没有两个相同的startid有不同的endid或两个相同的endid有不同的startid
    var
      startid,endid,tmpid: Integer;
    begin
      with query1 do
      begin
        Close;
        SQL.Clear;
        SQL.Add(' SELECT 字段 FROM table1');
        SQL.Add('  ORDER BY 字段         ');
        Open;
        startid := FieldByName(字段).AsInteger;
        endid   := startid;
        while not Eof do
        begin
          tmpid := FieldByName(字段).AsInteger;
          if tmpid > endid+1 then
          begin
            with query2 do
            begin
              Close;
              SQL.Clear;
              SQL.Add('SELECT endid FROM table2            ');
              SQL.Add(' WHERE startid = '+IntToStr(startid) );
              Open
              if RecordCount>0 then
              begin
                if FieldByName('endid').AsInteger <> endid then
                begin
                  Close;
                  SQL.Clear; 
                  SQL.Add('UPDATE table2                      '); 
                  SQL.Add(' SET endid ='+IntToStr(endid)       );
                  SQL.Add(' WHERE startid ='+IntToStr(startid) );
                  prepare;
                  ExecSQL;
                end;
              end else
              begin
                Close;
                SQL.Clear;
                SQL.Add('SELECT startid FROM table2      ');
                SQL.Add(' WHERE endid = '+IntToStr(endid) );
                Open
                if RecordCount>0 then
                begin
                  if FieldByName('startid').AsInteger <> startid then
                  begin
                    Close;
                    SQL.Clear;
                    SQL.Add('UPDATE table2                    ');
                    SQL.Add(' SET Startid ='+IntToStr(startid) );
                    SQL.Add(' WHERE endid ='+IntToStr(endid)   );
                    prepare;
                    ExecSQL;
                  end else
                  begin
                    Close;
                    SQL.Clear;
                    SQL.Add(INSERT table2(startid,endid) ');
                    SQL.Add(' VALUES('+IntToStr(startid)  );
                    SQL.Add(           IntToStr(endid)+')');
                    prepare;
                    ExecSQL;
                  end;
                end;
              end;
            end;
          startid := tmpid;
          end;
          endid := tmpid;
          next;
        end;
      end;
    end;