首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

VB 数据库排序有关问题-越排越乱

2012-12-24 
VB 数据库排序问题--越排越乱问题1:做了一个数据库,addnew时为什么不是在末尾增加?如结果一中第115条记录

VB 数据库排序问题--越排越乱
问题1:做了一个数据库,addnew时为什么不是在末尾增加?如结果一中第115条记录一样,有没有办法解决?结果一是由代码一导出excel的

代码一:(部分)
cn.Open "provider=microsoft.jet.oledb.4.0;data source= " & App.Path & "\date.mdb;persist security info=false"

sql = "select * from [moto] "
 
rs.Source = sql

Set rs.ActiveConnection = cn
rs.LockType = adLockOptimistic
rs.CursorLocation = adUseClient
rs.Open sql, cn
结果一:(部分)

编号     车牌
19闽E92355
20闽E97500
21闽E91568
22闽E91091
23闽E19796
115闽A54214
24闽E95717
25闽E91720
26闽E9A969
27闽E99591

问题2:在代码中加入排序后,导出EXCEL结果如结果二,越排越乱,这是怎么回事??
代码二:(部分)
cn.Open "provider=microsoft.jet.oledb.4.0;data source= " & App.Path & "\date.mdb;persist security info=false"

sql = "select * from [moto] order by '编号' asc"
 
rs.Source = sql

Set rs.ActiveConnection = cn
rs.LockType = adLockOptimistic
rs.CursorLocation = adUseClient
rs.Open sql, cn

结果二:(部分)

编号     车牌
52闽E29927
53闽ED0731
1闽E93923
40闽E18337
15闽E91447


有没高手指点一下,想了试,试了又想,两天了,就是想不出原因。
[解决办法]
select * from [moto] order by cast('编号' as varchar(20))
或者
select * from [moto] order by cast('编号' as int)


[解决办法]
AddNew之前将记录位置设置为最后一个记录

[解决办法]
谢谢两位
照2楼所说,试了下,在rs.open sql,cn这句出现实时错误,对象OPEN的方法_RECORDSET失败
3楼的说法,前些天我就试过了,没有效果。
[解决办法]
真是服了,字符串排序的结果有什么越排越乱的

直接使用Cint或Clong转换后再排序

如字符串9与字符串1000,比较时,首先比较9与1的大小,9比1要大,那结果也就是字符串9比字符串1000要大
[解决办法]
该回复于2010-06-21 13:49:30被版主删除
[解决办法]

sql = "select * from [moto] order by 编号"

[解决办法]
回复4楼
   数据库中“编号”字段定义为long,不是字符串
回复5楼
   你说的方法我试过了,和我说的问题二一样的结果
[解决办法]
一般我定义编号都是固定6位或8位char型
然后写入数据库时format(num,"000000")
这样编号都变成'000001','000045'等等了,排序就不会错了
[解决办法]
SQL保存的结果肯定不是按录入顺序的,需要排序必须在SQL语句中进行!
[解决办法]
按编码排序就可以啦
[解决办法]
问题1: 本来就没规定说新纪录就是添加在末尾的, 就和磁盘碎片一样, 数据库文件中间有碎片空间, 新记录就会添加那个地方

 问题2: 如果"编号"是数值型的话, 直接在SQL语句最后order by 就可以了
[解决办法]
...没看明白...
[解决办法]
sql = "select * from [moto] "
没加order by ???? (desc)时,好像系统会自动排的.

如果编号是long类型,
order by 编号 desc时则会自动从大到小列出编号值.



[解决办法]
还有一招,比较笨,而且只要MSSQL测试通过.ACCESS不知道可不可行.

order by 
CASE  

  WHEN 编号=1 THEN 1
  WHEN 编号=2 THEN 2
  WHEN 编号=3 THEN 3
  WHEN 编号=4 THEN 4
....................
  WHEN 编号=90 THEN 90


   ELSE 100
  END
[解决办法]
谢谢各位热心的回答

热点排行