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
[解决办法]
谢谢各位热心的回答
