首先要有一个默认的顺序号,(记录号),最好不要用光标,光标的可控性不好,键盘可以影响,鼠标也可以影响,可设两个按纽,上移或下移就行了。 这个方案,仅限于相邻的两个记录的上下移动,移动完成好定位在当前记录adoquery.sql:='select * from aa order by 序号'begin if 下移记录 and not eof() then begin adoquery1.fieldbyname('序号').asinteger:= adoquery1.fieldbyname('序号').asinteger+1; ADOquery.Next; //光标移动到下一条 adoquery.fieldbyname('序号').asinteger:= adoquery.fieldbyname('序号').asinteger-1; // 把第二行保存 recnols:=adoquery.recno();//记录当前记录调整后的顺序 end; if 上移记录 and not bof() then begin adoquery1.fieldbyname('序号').asinteger:= adoquery1.fieldbyname('序号').asinteger-1; ADOquery.pioro//光标移动到上一条(pioro有错误,我不记得了) adoquery1.fieldbyname('序号').asinteger:= adoquery1.fieldbyname('序号').asinteger+1; recnols:=adoquery.recno();//记录当前记录调整后的顺序号 end; ADOquery.Post; adoquery.requery; adoquery.recno:=recnols;//定位至当前记录 end;
建议使用TStringList,可以很好地排序。
用SQL语句 后面加Order by 排序应该可以吧
ADO里面是有Sort这个属性, 可以写FIELDNAME ASC, FIELD DESC.....的格式直接排序的.. 交换记录, 都得要自己按字段来循环交换, 可以写一个通用的过程的, 根据每种字段不同的类型来进行采用不同方式的交换方式.
procedure TForm1.BitBtn61Click(Sender: TObject);
begin
ListBox1.Items.Exchange(0,1);
end;
ListBox1的Items
a
b
c
序号 名称
1 a
2 b
3 c下,上移光标时,改变当前记录和上或下一记录的序号即可。这个不详细说明了。
用2个Record类型的变量保存相邻两行的数据
然后依次改变数据
比如说
表有3行
1
2
3type data: Record
a: String;
end;var
adata,bdata: data;
begin
adata := 1; //把第一行数据保存
ADOquery.Next; //光标移动到下一条
bdata := 2; // 把第二行保存 ADOquery.pioro//光标移动到上一条(pioro有错误,我不记得了)
1 := bdata; //把第一行数据改成2
2 := adata; //把第二行数据改成1ADOquery.Post;
end;这样等于是蛮干,就是想找个更好的办法
还望各位帮帮忙
这个方案,仅限于相邻的两个记录的上下移动,移动完成好定位在当前记录adoquery.sql:='select * from aa order by 序号'begin
if 下移记录 and not eof() then begin
adoquery1.fieldbyname('序号').asinteger:= adoquery1.fieldbyname('序号').asinteger+1;
ADOquery.Next; //光标移动到下一条
adoquery.fieldbyname('序号').asinteger:= adoquery.fieldbyname('序号').asinteger-1; // 把第二行保存
recnols:=adoquery.recno();//记录当前记录调整后的顺序
end;
if 上移记录 and not bof() then begin
adoquery1.fieldbyname('序号').asinteger:= adoquery1.fieldbyname('序号').asinteger-1;
ADOquery.pioro//光标移动到上一条(pioro有错误,我不记得了)
adoquery1.fieldbyname('序号').asinteger:= adoquery1.fieldbyname('序号').asinteger+1;
recnols:=adoquery.recno();//记录当前记录调整后的顺序号
end;
ADOquery.Post;
adoquery.requery;
adoquery.recno:=recnols;//定位至当前记录
end;
交换记录, 都得要自己按字段来循环交换, 可以写一个通用的过程的, 根据每种字段不同的类型来进行采用不同方式的交换方式.