将ADO记录集文本字段排序为数字
时间:2020-03-06 14:57:34 来源:igfitidea点击:
使用VBA,我有一组函数返回一个" ADODB.Recordset",其中所有列均为" adVarChar"。不幸的是,这意味着数字将作为文本进行排序。所以1,7,16,22变成1,16,22,7
有没有什么方法可以将数字作为文本列进行排序而无需更改列的类型?
Sub TestSortVarChar()
Dim strBefore, strAfter As String
Dim r As ADODB.RecordSet
Set r = New ADODB.RecordSet
r.Fields.Append "ID", adVarChar, 100
r.Fields.Append "Field1", adVarChar, 100
r.Open
r.AddNew
r.Fields("ID") = "1"
r.Fields("Field1") = "A"
r.AddNew
r.Fields("ID") = "7"
r.Fields("Field1") = "B"
r.AddNew
r.Fields("ID") = "16"
r.Fields("Field1") = "C"
r.AddNew
r.Fields("ID") = "22"
r.Fields("Field1") = "D"
r.MoveFirst
Do Until r.EOF
strBefore = strBefore & r.Fields("ID") & " " & r.Fields("Field1") & vbCrLf
r.MoveNext
Loop
r.Sort = "[ID] ASC"
r.MoveFirst
Do Until r.EOF
strAfter = strAfter & r.Fields("ID") & " " & r.Fields("Field1") & vbCrLf
r.MoveNext
Loop
MsgBox strBefore & vbCrLf & vbCrLf & strAfter
End Sub
注意:我正在使用Project 2003和Excel 2003并引用Microsoft ActiveX DataObject 2.8库
解决方案
左键盘上的零至少与最大数字位数一样多。
例如
0001
0010
0022
1000
我们可以使用Right $()完成此操作。
使用Val()函数对文本列进行数字排序。例子:
SELECT ID, Field1 FROM tablename ORDER BY Val(Field1);

