Сортировка текстового поля набора записей ADO как числового - PullRequest
3 голосов
/ 01 октября 2008

Используя 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 Library

Ответы [ 2 ]

3 голосов
/ 01 октября 2008

Левая панель с нулями, по крайней мере, с максимальным количеством цифр. например,

0001 0010 0022 1000

Вы можете использовать Right $ () для этого.

2 голосов
/ 01 октября 2008

Используйте функцию Val () для числовой сортировки по текстовому столбцу. Пример:

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