سؤال

باستخدام 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);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top