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);