Vba 将ADO记录集文本字段排序为数字
使用VBA,我有一组函数返回一个Vba 将ADO记录集文本字段排序为数字,vba,ado,adodb,Vba,Ado,Adodb,使用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.A
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库带零的左键盘,其数字至少与最大数字位数相同。 e、 g 0001 0010 0022 一千 您可以使用Right$()来完成此操作。使用Val()函数对文本列进行数字排序。例如:
SELECT ID, Field1
FROM tablename
ORDER BY Val(Field1);
谢谢你,克里斯。不幸的是,数据不是由RDBMS生成的,它只是在记录集中返回数据的一组函数。这些函数无法更改,因此我需要对死记录集进行排序。