visual vba ado adodb

visual - adodb.recordset vba excel



Ordenando el campo de texto del conjunto de registros de ADO como numérico (2)

Almohadilla izquierda con Ceros con al menos tantos como el número máximo de dígitos. p.ej

0001 0010 0022 1000

Puede usar Right $ () para lograr esto.

Utilizando VBA tengo un conjunto de funciones que devuelven un ADODB.Recordset donde todas las columnas son adVarChar . Desafortunadamente, esto significa que los números se ordenan como texto. Entonces 1,7,16,22 se convierte en 1,16,22,7

¿Hay algún método que pueda ordenar los números como columnas de texto sin recurrir a cambiar el tipo de columna?

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

NB: Estoy usando Project 2003 y Excel 2003 y haciendo referencia a Microsoft ActiveX DataObject 2.8 Library


Use la función Val () para ordenar numéricamente en una columna de texto. Ejemplo:

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