Tri du champ de texte du jeu d'enregistrements ADO sous forme numérique
Question
À l’aide de VBA, j’ai un ensemble de fonctions qui renvoient un ADODB.Recordset
contenant toutes les colonnes sous la forme adVarChar
. Malheureusement, cela signifie que les valeurs numériques sont triées sous forme de texte. Alors 1,7,16,22 devient 1,16,22,7
Existe-t-il des méthodes permettant de trier les valeurs numériques sous forme de colonnes de texte sans avoir à changer le type de la colonne?
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
Remarque: j'utilise Project 2003 et Excel 2003 et référence à la bibliothèque Microsoft ActiveX DataObject 2.8
.La solution
Pavé gauche avec des zéros avec au moins autant que le nombre maximum de chiffres. par exemple
0001 0010 0022 1000
Vous pouvez utiliser Right $ () pour accomplir cela.
Autres conseils
Utilisez la fonction Val () pour trier numériquement une colonne de texte. Exemple:
SELECT ID, Field1
FROM tablename
ORDER BY Val(Field1);