将ADO记录集文本字段排序为数字

时间:2008-10-01 03:11:41

标签: 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.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库

2 个答案:

答案 0 :(得分:3)

左边的零填充零至少与最大数字一样多。 e.g。

0001 0010 0022 1000

您可以使用Right $()来完成此任务。

答案 1 :(得分:2)

使用Val()函数在文本列上以数字方式排序。例如:

SELECT ID, Field1
FROM tablename
ORDER BY Val(Field1);