如何物理排序表?

电脑王杨扬 2008-10-26 01:40:16
我目前遇到这样的问题:
有一张表,有OrderID字段,用于记录row number(自己维护,非identity)。
现在需要按表中其他字段(例如:姓名)排序,并按排序好的顺序对应地更新OrderID。请问有没有这样的好方法?
另外,如果不用OrderID,是不是不可能实现?

请各位注意,我用的是Access MDB,ADO.NET。


多谢了!
...全文
166 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
y397526029 2009-04-21
  • 打赏
  • 举报
回复
大家好!如果用delphi来实现物理排序,数据库用access,如何编程,多谢高手帮忙和指点!
wwwwb 2008-10-27
  • 打赏
  • 举报
回复
不用循环,建立比工作表多一个自增字段的临时表,用INSERT INTO 临时表
SELECT * FROM 工作表,用自增字段的UPDATE 相应字段即可
电脑王杨扬 2008-10-26
  • 打赏
  • 举报
回复
changechange:
我去拜访过你的网站access911.net,里面有一篇讲如何插入记录而不是追加,用了OrderID。但我如果想做物理排序,目前是按ewang11的方法用ADO.NET写的(DataAdapter+DataSet的方法),但DataAdapter.Update时非常慢,我想原因可能是由于排序操作修改了几乎全部行的OrderID,导致全部行的RowState都发生了改变,因此性能非常差。但是,如果直接用OleDbCommand来执行,又不知道Update [table] Set这个Sql语句如何去写。

你有什么好的方法吗?谢谢
changechange 2008-10-26
  • 打赏
  • 举报
回复
其他字段(例如:姓名)排序
---------select * from table order by 姓名

不用去更新ID了,除非你一定要派其他用处,那么无论 MDB 还是 SQL SERVER 都没办法,都是要去更新 ORDERID 的
changechange 2008-10-26
  • 打赏
  • 举报
回复
strSql = "select * into temp1 from 表1 order by name desc"
strSql = "alter table temp1 add COLUMN NewOrderId AUTOINCREMENT
strSql = "update 表1,temp1 set 表1.OrderId = temp1.NewOrderId where 表1.serialid = temp1.serialid"



注意上述3句SQL语句,需要增加某个临时表,用完了手动删除掉。不用临时表也能做,不过性能比较差




Function asfs()

Dim strSql As String
DropTable "temp1"

strSql = "select * into temp1 from 表1 order by name desc"
CurrentProject.Connection.Execute strSql
strSql = "alter table temp1 add COLUMN NewOrderId AUTOINCREMENT(1,1)"
CurrentProject.Connection.Execute strSql
strSql = "update 表1,temp1 set 表1.OrderId = temp1.NewOrderId where 表1.serialid = temp1.serialid"
CurrentProject.Connection.Execute strSql

End Function
Function DropTable(ByVal table As String)
Dim strSql As String
On Error Resume Next

strSql = "drop table " & table
CurrentProject.Connection.Execute strSql

End Function





ewang11 2008-10-26
  • 打赏
  • 举报
回复
不懂ADO.NET

下面是用ADO写的,思路应该差不多的

Dim Rs As New ADODB.Recordset
Dim Conn As New ADODB.Connection
Dim I As Integer

Set Conn = CurrentProject.Connection

Rs.Open "select * from 表1 order by f1", Conn, adOpenDynamic, adLockOptimistic
I = 0
Do While Not Rs.EOF
I = I + 1
Rs.Fields("OrderID") = I
Rs.Update
Rs.MoveNext
Loop


Set Rs = Nothing
Set Conn = Nothing

7,732

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
社区管理员
  • Access
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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