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排序
//重新生成内容
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排序
解决方案 »
- 【CSDN开心辞典】谁是CSDN花花(红黄蓝)最多的马甲?
- 关于分发问题
- 100分求D7下可用的ABC控件
- 紧急求救!!!添加memo字段的SQL怎么写????救命啊.
- pos函数可以用widestring做参数吗?
- 求助,基础问题
- EXE、DLL相互之间如何传递消息?
- 告诉大家StringGrid复杂表头的画法
- --------- 江 湖 -----------
- 求www.delphifan.com账号下载Thread-Kassl-dOPC-2015-Full-Source-XE5-XE8-Win32-Win64-UnO
- 我要用CoCreateInstance()API函数,应如何用?要哪些单元?
- 我在用delphi建了一个数据库用了paradox表,我把所有文件全拷到了一软盘上可在复制到硬盘上时可复制不上老是说:bussinesspjt.dof,复制不
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;
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;
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;