高分求救,如果用一个字段保存当前记录的行号?

HelpMeNow 2010-06-21 03:30:49
ado+sql SERVER 2000
我用一个字段"hh" 用来保存所有记录的顺序号。

如字段
hh test
记录如下
1 aaa
2 bbb
3 ccc

焦点在2 bbb这一记录
使用Insert 插入一条记录test的内容为:ddd

这时候表记录就自动变成

1 aaa
2 ddd
3 bbb
4 ccc



...全文
118 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
奔雷手 2010-06-22
  • 打赏
  • 举报
回复
insert 是插入当前行
APPEND是插入最后一行
默认是这样
HelpMeNow 2010-06-22
  • 打赏
  • 举报
回复
都没有我需要的答案,
我的目的,就是在前后不管是删除或是增加或是插入记录,都必须能自动排序的。
iamduo 2010-06-22
  • 打赏
  • 举报
回复
保存前,遍历你的 RecordSet,把顺序调整一下。很简单。
notebook800 2010-06-22
  • 打赏
  • 举报
回复
思路是不用实际字段存放行号,而采用分析函数计算它。有点类似数据结构中的链表结构。

当你需要新增元素至链表的尾部时,只需要增加一条记录。
当你需要插入元素至链表的中间时,只需要增加一条记录并修改一条记录即可。

这样做可以避免大量的记录修改。

上面的有些笔误


HH FCHILDREN FCF1
---------- --------- ----
1 A aaaa
2 B bbbb
3 C cccc

HH FCHILDREN FCF1
---------- --------- ----
1 A aaaa
2 D dddd
3 B bbbb
4 C cccc


notebook800 2010-06-22
  • 打赏
  • 举报
回复
Connected to Oracle9i Enterprise Edition Release 9.2.0.7.0 
Connected as cvbom


SQL>
SQL> create table tb_dat as select * from (select '/' fparents,'A' fchildren,'aaaa' fcf1 from dual union
2 select 'A' fparents,'B' fchildren,'aaaa' fcf1 from dual union
3 select 'B' fparents,'C' fchildren,'aaaa' fcf1 from dual);

Table created

SQL> --类似链表 A - B - C
SQL> select * from tb_dat;

FPARENTS FCHILDREN FCF1
-------- --------- ----
/ A aaaa
A B aaaa
B C aaaa

SQL>
SQL> select level hh, fchildren, fcf1
2 from tb_dat
3 start with fparents = '/'
4 connect by fparents = prior fchildren;

HH FCHILDREN FCF1
---------- --------- ----
1 A aaaa
2 B aaaa
3 C aaaa

SQL> --查询出用户想要的顺序结果
SQL>
SQL> insert into tb_dat (fparents,fchildren,fcf1) values ('A','D','dddd');--增加A的子女D

1 row inserted

SQL> update tb_dat set fparents = 'D' where fchildren = 'B';--将B的双亲改为A

1 row updated

SQL> --以上2步操作类似,链表中增加元素D,并将D链接到A,断开A与B链接,重行将B链接到D
SQL> --形成 A - D - B - C
SQL> select * from tb_dat;

FPARENTS FCHILDREN FCF1
-------- --------- ----
/ A aaaa
D B aaaa
B C aaaa
A D dddd

SQL>
SQL> select level hh, fchildren, fcf1
2 from tb_dat
3 start with fparents = '/'
4 connect by fparents = prior fchildren;

HH FCHILDREN FCF1
---------- --------- ----
1 A aaaa
2 D dddd
3 B aaaa
4 C aaaa

SQL> --查询出用户想要的顺序结果
SQL>
zouyx317 2010-06-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 caibirdy 的回复:]
等于全部更新,如果不做更新就想实现“自动变成”是不可能。
其实行号就行了,没必要加字段。
[/Quote]

赞同,应该放在前台界面处理,不应加字段了。
若你硬是想加字段,可以把界面上处理好的值更新到相应字段中。
HelpMeNow 2010-06-21
  • 打赏
  • 举报
回复
问题,我不知道,应该在什么时候怎么更新。
CaiBirdy 2010-06-21
  • 打赏
  • 举报
回复
等于全部更新,如果不做更新就想实现“自动变成”是不可能。
其实行号就行了,没必要加字段。
HelpMeNow 2010-06-21
  • 打赏
  • 举报
回复
我想要的就是这种效果,也就是会自动对“hh”这个字段内容更新。

表记录需要自动变成

1 aaa
2 ddd
3 bbb
4 ccc
HelpMeNow 2010-06-21
  • 打赏
  • 举报
回复
不明白,楼上的意思。
dinoalex 2010-06-21
  • 打赏
  • 举报
回复
建一个排序表吧
siwuge 2010-06-21
  • 打赏
  • 举报
回复
如果你想做到4 ddd,你在用insert 前要将指针定位到最后一行。
adoquery1.last;
insert .......

2,497

社区成员

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

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