请教大家,怎么实现将记录上移N条下移N条呢?原理?方法?例子?谢谢大家的指教!

Comexl 2005-04-21 12:29:51
比如有5条记录:按照ID排序的.
目前排序是:
1、AAA
2、CCC
3、DDD
4、EEE
5、BBB
客户说要将它们排列成
1、AAA
2、BBB
3、CCC
4、DDD
5、EEE

请教大家,怎么实现将记录上移N条下移N条呢?原理?方法?例子?谢谢大家的指教!

最后在问一个小小的问题,在线HTML编辑器中的,所见既所得的文本框,
是怎么插入的啊?

...全文
384 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhshtan 2005-04-22
  • 打赏
  • 举报
回复
Top

回复人: jyk(喜欢编程。和气生财。共同提高。共同进步) ( ) 信誉:100 2005-04-22 07:08:00 得分: 0


加一个int类型的字段,用它来排序就行了。

用这个方法吧,最简单有效任意控制!!




honghe1 2005-04-22
  • 打赏
  • 举报
回复
测试发现Access的自动编号不能更新,所以在确定要移动记录之前修改id类型为数字型,确认不修改好后在修改回来.不过建议还是重新有一个新的排序字段id2(数字型)
------------------------------------------------------------
测试后的新的算法:
-----------------------------------------------------------
<HTML>
<BODY>
<!-- #include file="adovbs.inc" -->
<%
'使用Connection对象打开Access数据库 <Grades.mdb>
Dim objConn
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Server.MapPath("Grades.mdb")
objConn.Open

'定义SQL语句

'strSQL = "UPDATE 成绩单 SET 姓名 = '张小毛', 自然 = '100' WHERE 学号 = 'A11'"

'执行SQL语句
'objConn.Execute(strSQL)


IF request.ServerVariables("REQUEST_METHOD")="POST" then
'id=9 '/需要移动的记录ID值
'offset=1 '/需要往上移动多少位 支持负数

recordID=request("recordID")
newRecordID=request("newRecordID")

offset=newRecordID-recordID

if offset<>0 then

sqlstr="update 成绩单 set id="& 0 & " where id=" & recordID '作临时处理,处理移动后修改到新位置就是了,否则会更新失败
objConn.Execute(sqlstr)

if offset >0 then '下移
sqlstr="update 成绩单 set id=id-1 where id > " & recordID & "and id<=" & newRecordID
else
sqlstr="update 成绩单 set id=id+1 where id <" & recordID & "and id>=" & newRecordID
end if

objConn.Execute(sqlstr)

sqlstr="update 成绩单 set id="& newRecordID & " where id=0" '把临时处理处理后的目标记录移到新位置
objConn.Execute(sqlstr)

end if
end if

sqlstr="select * from 成绩单 order by id asc"
set rs=objConn.execute(sqlstr)
%>
<table width="90%" border="1" cellpadding="2" cellspacing="1">
<tr bgcolor="#999999">
<th scope="col">1</th>
<th scope="col">2</th>
<th scope="col">3</th>
<th scope="col">4</th>
<th scope="col">5</th>
<th scope="col">6</th>
<th scope="col"> </th>
</tr>
<%

do while not (rs.eof or rs.bof)

%>
<tr align="center">
<td> <% Response.Write(rs(0)) %></td>
<td> <% Response.Write(rs(1)) %></td>
<td> <% Response.Write(rs(2)) %></td>
<td> <% Response.Write(rs(3)) %></td>
<td> <% Response.Write(rs(4)) %></td>
<td><% Response.Write(rs(5)) %></td>
<td><a href="#" onClick="recordMove(<% Response.Write(rs(0)) %>)">移动</a></td>
</tr>
<%
rs.moveNext
loop
rs.close:set rs=nothing
objConn.close:set objConn=nothing
%>
</table>

<form name="form1" method="post" action="sqlupdate.asp">
<input type="hidden" name="recordID">
<input type="hidden" name="newRecordID">
</form>
<script language="JavaScript" type="text/JavaScript">
function recordMove(id)
{
var newRecordID=prompt("请输入要移动到的新位置","1");
document.getElementById("recordID").value=id;
document.getElementById("newRecordID").value=newRecordID;
if(newRecordID.length>0 && ! isNaN(newRecordID))
{
document.form1.submit();
}
}
</script>
</BODY>
</HTML>
自然框架 2005-04-22
  • 打赏
  • 举报
回复
加一个int类型的字段,用它来排序就行了。

jarraytan 2005-04-22
  • 打赏
  • 举报
回复
呵呵。 to:baiyunfei(大虾们,可要记住:星星越多,责任越大!)
你说得挺有意思的哦。 ^_^ 小河是我的一个朋友。帮帮他好吗?代他谢你了!

各位进来的大哥,路过的兄弟,若是我的朋友,请停下来帮帮 小河,非我朋友的大虾们,也请指教,谢啦!

======
若不用自动ID的话,我想会比较好移动点。你应该知道的,自动编号不能修改也不能自己生成。是系统提供的。我不是给过你一个生成编号的函数麽?我想你可以用那个函数来生成非系统编号的自动编号啊。
在线编辑器我没用过,不过我想应该是用的脚本插入的吧。也就是 text1.value="aaaa" 这样。
yonghengdizhen 2005-04-21
  • 打赏
  • 举报
回复
把特定记录的id加上指定的数之后用于排序
jchong110 2005-04-21
  • 打赏
  • 举报
回复
呵呵.这也是很久以前在网上看到了.拿来凑个数
jchong110 2005-04-21
  • 打赏
  • 举报
回复
Dim theMsg( )
ReDim theMsg( 1500 ) ' 我随便定的一个大小
dim count2=-1
do where not rs.eof
count2=count2+1
If count2> UBound( theMsg) Then
ReDim Preserve theMsg( count2+ 99 )
End If
' 放到数组里
theMsg(count2) = Rs("AAA")
Rs.movenext
loop

ReDim Preserve theFiles(count2)
Count1=Ubound(theMsg)
For i = Count1 TO 0 Step -1
minmax = theMsg( 0 )
minmaxSlot = 0
For j = 1 To i
mark = (strComp( theFiles(j), minmax, vbTextCompare ) > 0)
If mark Then
minmax = theMsg( j )
minmaxSlot = j
End If
Next
Next
Msg=Join(theMsg,"@@@")
然后输出.
在这里关键是vbTextCompare 这个东西就是按字母排序了
link98091 2005-04-21
  • 打赏
  • 举报
回复
order by “aaa所在的列“得不到你所要的顺序吗?
  • 打赏
  • 举报
回复
有顺序就有 order by
chonboy 2005-04-21
  • 打赏
  • 举报
回复
你是说记录有顺序吗?那增加个字段排序用,数字越小越靠前或者靠后
调整现有记录的顺序,只要修改这条记录的排序字段的数字大小
pkcai 2005-04-21
  • 打赏
  • 举报
回复
本公司域名特价销售
.com50元,.cn55元
绝对新网域名
详细资料请查阅
http://www.dahai.net/4.txt
Comexl 2005-04-21
  • 打赏
  • 举报
回复

谢谢大家对我的问题再次关注!
大家讲的加个字段排序的,方法我早就想过了,可是我的显示页里面已经用了两个字段来序了.


而且现在数据库已经建立好了,大家讲的方法.加个字段的都是可行的.但是最好是不改变数据库文件的结构的情况下,那样会更好拉!~~~~

所没办法在加字段排序了.而且客户要求移动的不是一项两项,有时候需要上移很多项,比如从第324项移动到第9项,我还要一个个的指定字段的内容.来排序号,很麻烦的!我严重同意

回复人: honghe1(和良) ( ) 先生 说的方法!

我用了他写给我的答案,可是还是运行不成功,也许是我技术还不行,所以,我把我的原文件压缩成一个.rar的文件,大家看能不能下下来看下原代码,如果有时间帮我改一下,好吗?
改好了可以把原代码贴到我的贴子里,也可以发到我的邮件里面.谢谢大家和(和良)了!
http://cncomsoft.com/move.rar 这是附件地址!
winxl@163.com 我的邮件
86668884 我的QQ
http://community.csdn.net/Expert/topic/3954/3954868.xml?temp=.5429193
贴子的地址!
谢谢所以回贴的朋友们,说真的!我很感动这么多人给我回复!!

Macon8800 2005-04-21
  • 打赏
  • 举报
回复
刚写了一个 已经调试成功了
不过感觉比较麻烦
不知道楼主有没有兴趣~~~~
shuangren 2005-04-21
  • 打赏
  • 举报
回复
最终目的是什么?是为了给顾客看你的“mdb数据库”,还是给顾客看你“显示的结果”?

是啊,楼主要先搞清这个问题

数据导入后怎么排都不是困难的事情,按ID、添加时间、修改时间...不一样的排序方法就有不同的排列结果
scoutlin 2005-04-21
  • 打赏
  • 举报
回复
最终目的是什么?是为了给顾客看你的“mdb数据库”,还是给顾客看你“显示的结果”?

这句话太经典了
等楼主你明白了,就不会大费周折了
honghe1 2005-04-21
  • 打赏
  • 举报
回复
自动编号只是插入的时候,id会自动帮你生成而已.id是可以修改的,不过就是不能和现有的id重复就是了.
honghe1 2005-04-21
  • 打赏
  • 举报
回复
Access不支持between吧.
-------------------------------------------------------------------------
id=request("原来的位置id")
offset=request("后移步数")
if offset >0 then
sqlstr="update tableName set id=id+1 where id > " & id-1 & "and id<=" & id+offset
else
sqlstr="update tableName set id=id-1 where id <" & id-1 & "and id>=" & id+offset
end if
conn.execute(sqlstr)
sqlstr="update tableName set id="& id+offset & "where id=" &id
lindping 2005-04-21
  • 打赏
  • 举报
回复
在数据显示中增加一个列,就是说在每行记录都有一个对应的下拉菜单,下拉的内容就是排列位置(1,2,3...),客户想怎么排就让他自己安排,比如他想把原来第3条放到第2条的位置,他就可以在第3条记录的下拉菜单里选“2”,激发select onchange事件,把第3条和第2条交换一下。
jekexys2004 2005-04-21
  • 打赏
  • 举报
回复
自动排列呀,那肯定不行了,这样的话你就只能把数据取出来后再排列,或者修改数据库
Comexl 2005-04-21
  • 打赏
  • 举报
回复
http://wpa.qq.com/msgrd?V=1&Uin=86668884&Site=cncomsoft.com&Menu=yes

这个地址是我的QQ不加好友,方式的聊天,如果大家有什么方法的的话,可以这样和我交流,谢谢大家对我的问题的关注!

真心的感谢!

我想这个问题解决了,对大家也是一种帮助!
加载更多回复(16)

28,406

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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