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排序
解决方案 »
- [求助]导师给的题目我不能完全理解
- 报表问题
- 有深圳的DELPHI程序员吗?
- 关于父子窗体问题!
- DbGrid中我想点那个列,显示的数据就按那个列排序,(后面是ClientDataSet)怎么办?
- 如何调试isapi程序?
- 送分
- 在unit单元使用inifile的问题?
- 如果让你去招delphi程序员(数据库)你会对前来面试者提什么问题?(来者有分)
- 请问我在本机用delphi6+sql server2000写的程序,如何在win98下没有SQL SERVER的环境中运行啊.
- 我要用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;