Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 将ADO记录集文本字段排序为数字_Vba_Ado_Adodb - Fatal编程技术网

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

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

使用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库

带零的左键盘,其数字至少与最大数字位数相同。 e、 g

0001 0010 0022 一千

您可以使用Right$()来完成此操作。

使用Val()函数对文本列进行数字排序。例如:

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

谢谢你,克里斯。不幸的是,数据不是由RDBMS生成的,它只是在记录集中返回数据的一组函数。这些函数无法更改,因此我需要对死记录集进行排序。