فرز سجلات ADO حقل النص كما الرقمية
سؤال
باستخدام 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 المكتبة
المحلول
ترك الوسادة مع الأصفار مع على الأقل ما يصل الحد الأقصى لعدد الأرقام.على سبيل المثال
0001 0010 0022 1000
يمكنك استخدام الحق$() لإنجاز هذا.
نصائح أخرى
استخدام الدالة Val() لفرز عدديا على عمود نص.على سبيل المثال:
SELECT ID, Field1
FROM tablename
ORDER BY Val(Field1);
لا تنتمي إلى StackOverflow