如何移动纪录,不是光标移动而是真正的数据移动

星幻子 2011-07-22 01:26:16
比如如下3条纪录
a
b
c
把a移动到下面,变成
b
a
c
如何做,
排序我试过了不行,先谢谢了
...全文
135 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
dfasri 2011-08-02
  • 打赏
  • 举报
回复
ADO里面是有Sort这个属性, 可以写FIELDNAME ASC, FIELD DESC.....的格式直接排序的..
交换记录, 都得要自己按字段来循环交换, 可以写一个通用的过程的, 根据每种字段不同的类型来进行采用不同方式的交换方式.
银狼 2011-08-02
  • 打赏
  • 举报
回复
用SQL语句 后面加Order by 排序应该可以吧
babydog01 2011-08-01
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lyhoo163 的回复:]
建议使用TStringList,可以很好地排序。
[/Quote]
因为是对数据库中的记录进行排序。

用这种及类似的方法排序,无法保存,下次打开后,还是原来的顺序。
lyhoo163 2011-07-31
  • 打赏
  • 举报
回复
建议使用TStringList,可以很好地排序。
yh16008262 2011-07-29
  • 打赏
  • 举报
回复
cds随便你移
babydog01 2011-07-26
  • 打赏
  • 举报
回复
首先要有一个默认的顺序号,(记录号),最好不要用光标,光标的可控性不好,键盘可以影响,鼠标也可以影响,可设两个按纽,上移或下移就行了。
这个方案,仅限于相邻的两个记录的上下移动,移动完成好定位在当前记录

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;
sixgj 2011-07-24
  • 打赏
  • 举报
回复
同意三楼的方法
山东蓝鸟贵薪 2011-07-24
  • 打赏
  • 举报
回复
没试过帮你顶顶
星幻子 2011-07-24
  • 打赏
  • 举报
回复
没人知道吗?
星幻子 2011-07-22
  • 打赏
  • 举报
回复
先说说我目前的办法
用2个Record类型的变量保存相邻两行的数据
然后依次改变数据
比如说
表有3行
1
2
3

type data: Record
a: String;
end;

var
adata,bdata: data;
begin
adata := 1; //把第一行数据保存
ADOquery.Next; //光标移动到下一条
bdata := 2; // 把第二行保存

ADOquery.pioro//光标移动到上一条(pioro有错误,我不记得了)

1 := bdata; //把第一行数据改成2
2 := adata; //把第二行数据改成1

ADOquery.Post;
end;

这样等于是蛮干,就是想找个更好的办法
还望各位帮帮忙
babydog01 2011-07-22
  • 打赏
  • 举报
回复
对数据表来说,这种随意的、杂乱无章的排序要实现起来,没有什么好办法。加一个辅助字段,来记录每个记录的顺序,保存后,再打开时也能记住当前顺序。
序号 名称
1 a
2 b
3 c

下,上移光标时,改变当前记录和上或下一记录的序号即可。这个不详细说明了。
纯冰糖 2011-07-22
  • 打赏
  • 举报
回复

procedure TForm1.BitBtn61Click(Sender: TObject);
begin
ListBox1.Items.Exchange(0,1);
end;


ListBox1的Items
a
b
c

2,507

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧