الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الترتيب التصاعدي في حقل نصي

مغلق
بدأه alhaithm في 29 سبتمبر 2005 · 13 رد · 2,127 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

في حقل نصي يحتوي على أرقام وأحرف على النحو التالي:

A1

A2

A3

A4

A5

A6

A7

A8

A9

A10

A11

A12

ولكن بعد إغلاق الجدول

أو الاستعلام أو النموذج المنتمي إلى الجدول

تظهر النتائج على النحو التالي

A1

A10

A11

A2

A3

A4

A5

A6

A7

A8

A9

فهل من حل لجعل الترتيب يبدو تصاعديا بغض عن الترتيب أثنا الإدخال بحيث أدخل

A4

A9

B2

A1

A13

ثم بعد إغلاق الجدول وفتحة تترتب بشكل تصاعدي تلقائيا

أرجو أن يكون المطلب واضحا

تحياتي

وما نيل المطالب بالتمني

ولكن تؤخذ الدنيا غلابا

#2

الترتيب الذي يظهر امامك هو بالفعل الترتيب التصاعدي للارقام المعرفة كنص اذا اردت الترتيب بالشكل المذكور فعليك الادخال كما يلي:

ِA01

A02

.

.

.

A99

أو هكذا

A001

A002

.

.

.

A999

طبتم واهتديتم :)

===================================

إقرأ معي

رابط متجدد لكتاب أقرؤه فشاركني فيه

======

فضائح الرافضة ومخازيهم حين يكتب عنها أحد خصومهم فهذا شيء متوقع ،فإن كتب عنها أحدهم فهو شيء غير مألوف ، وإن كان الكاتب أحد مراجعهم وأخص خواصهم فهذا شيء متناهي الغرابة ، وإن علمت أن الكاتب قد قتل بعد نشر الكتاب فقد حان وقت قراءة الكتاب

الكتاب :

حسين الموسوي - لله تم للتاريخ ، كشف الأسرار وتبرئة الأئمة الأطهار

اضغط على الصورة لتحميل الكتاب

%E1%E1%E5%20%CB%E3%20%E1%E1%CA%C7%D1%ED%CE.jpg

-----------

كتب سابقة

سعد الدين الشاذلي - مذكرات حرب أكنتوبر

#3

بعد إضافة الصفر بين النص والرقم كانت النتائج كالتالي:

Txt

A01

A010

A011

A012

A013

A014

A015

A016

A017

A018

A019

A02

A020

A03

A04

A05

A06

A07

A08

A09

يعني لم يترتب شئ

فهل من حلول أخرى

وما نيل المطالب بالتمني

ولكن تؤخذ الدنيا غلابا

#4

بعد التحية

هذه المشكلة لها حل وهي استخدام الدالة val

انشأ استعلام وعين الحقل الذي تريده بالاستعلام وليكن item_no ثم بخانة الحقل الذي يليه اكتب كالتالي EE:val(item_no) ثم رتبه حسب ما تريد وسوف تلاحظ ان المشكلة حلت ـ واذا لم تستطع حل هذا يرجى اعلامي سأرفق لك مثالا

تحياتي

#5

السلام عليكم ورحمة الله

الاخ الكريم

على حد معلوماتى, فان ما قصده اخونا الفاضل ايهاب عثمان أعزه الله وجزاه خير الجزاء على مجهوداته بالمنتدى, ان تحدد مسبقا عدد الخانات التى سوف تخصصها للرقم ثم تجعل جميع ارقامك بنفس الفورمات وعندها سوف تترتب كما تريد.

وعلى سبيل المثال لو انى اعلم ان عدد سجلاتى لن يزيد عن 99 سجل فعندها يكون الرقم المطلوب مكون كحد اقصى من خانتين ونكتب الترقيم عندها كالتالى

A01, A02, A03, ..., A10, A11, ..., A98, A99

اما لو كان عدد السجلات سيصل حتى 999 فعندها سنحتاج الى فورمات ارقام من ثلاث خانات وسيكون الترقيم كالتالى

A001, A002, A003, ..., A010, A011, ..., A099, A100, A101, ..., A998, A999

وهكذا اخى الكريم يجب تثبيت نفس الفورمات لخانات الارقام والارقام الاقل من عدد خانات الفورمات تضع اصفار على يسارها حتى تنتظم الفورمات وعندها سوف يتم ترتيب السجلات كما تريد,

وبالتوفيق بعون الله,,,

أشهد أن لا إله إلا الله وأشهد أن محمدا رسول الله

bnr025.gif

مـــوقـــعـــى

#6

الأخ/غازي عثمان ghaziothman

تحياتي

عملت الاستعلام حسب وصفك ولم يحدث أي ترتيب أو تغيير أما الحقل

EE:Var([TXT])

فكانت القيمة فيه صفر في جميع النتائج

نرجو التوضيح

أما التوضيح الذي أشار إليه الأخ/عماد حمدي احمد

فنتائجه صحيحة كما أشار إليه ولكن ليس هو المطلوب فلا أريد أن أحدد حجم الحقل بل يبقى مفتوحا

تحياتي

وما نيل المطالب بالتمني

ولكن تؤخذ الدنيا غلابا

#7

شرح الاخ الكريم - عماد حمدي احمد - ما اعنيه بالضبط

جزاه الله خيرا وجعل له نصيبا من دعواته الصالحات

طبتم واهتديتم :)

===================================

إقرأ معي

رابط متجدد لكتاب أقرؤه فشاركني فيه

======

فضائح الرافضة ومخازيهم حين يكتب عنها أحد خصومهم فهذا شيء متوقع ،فإن كتب عنها أحدهم فهو شيء غير مألوف ، وإن كان الكاتب أحد مراجعهم وأخص خواصهم فهذا شيء متناهي الغرابة ، وإن علمت أن الكاتب قد قتل بعد نشر الكتاب فقد حان وقت قراءة الكتاب

الكتاب :

حسين الموسوي - لله تم للتاريخ ، كشف الأسرار وتبرئة الأئمة الأطهار

اضغط على الصورة لتحميل الكتاب

%E1%E1%E5%20%CB%E3%20%E1%E1%CA%C7%D1%ED%CE.jpg

-----------

كتب سابقة

سعد الدين الشاذلي - مذكرات حرب أكنتوبر

#8

الأخوة الكرام الأستاذ عماد والأستاذ إيهاب مطلوب مثال على المشاركة بحيث يكون كما طلب الأخ أن تكون خاصية حقل الترقيم ( نص ) وأن يتم الترقيم بطريقة آلية فقد تكون الطريقة هى ما أبحث عنه ولم أجد لها حل حتى الآن مع تمنياتى لكم بالتوفيق

#9

أخي الكريم

كما ذكر الأخ ghaziothman

أنشيء استعلام في حقل فارغ أكتب التعبير التالي :

 MyOrder: CInt(Mid$([Num];2;10))

شرح التعبير:

  1. CInt تقوم بتحويل مخرجات الدالة $MID إلى رقم ليتم ترتيبه
  2. بواسطة الدالة $MSD نستخرج الأرقام بدون الحروف وتلاحظ بأمما بدأنا من الرقم 2 لأن A هو رقم 1 ولا نريده.
  3. الرقم 10 هو عدد الخانات التي نريد أن تعيدها لنا الدالة فلو لدينا حقل بهذا الشكل A65487546871 فأن الدالة ستهمل الرقم 1 من جهة اليمين لأن الأرقام قبله =10 خانات ويمكن أن زيد الرقم 10 بما تراه مناسباً

ملاحظة :

يجب أن تستبدل كلمة Num الموجودة بين القوسين المربعين باسم الحقل الموجود لديك واختر في صف " فرز " الفرز الذي تريد تصاعدي أو تنازلي

تم تعديل هذه المشاركة بواسطة مصلح الحريصي في 16 أكتوبر 2006 في 08:55

#10

الأخ الفاضل ...

Alpha2NumSorting.zip

ممكن أستعمال طريقة التالية، وهى تعتمد على أنى قمت بتحويل الحروف لأرقام، وحيث أن الارقام العشرية تتكون من (10) رموز (من 0 إلى 9) ، والحروف الإنجليزية تتكون من (26) حرف (من A إلى Z) وبالتالى يكون المجموع 36 رمز، دون التميز بين الحروف الكبيرة والصغيرة، وحيث أن الفرق فى جدول الأسكى بين الـ"0" وحرف "A" هو (7) لذا إذا ضهر فى الجملة حروف يجب طرح 7 من الحرف، وبالتالى يكون لدينا نظام عدد جديد مكون من (36) رمز (من 0 إلى Z ) مثال "0 1 2 3 .... Z Y X ... M L K ... C B A"، لذلك سنرفع للأس 36، والترتيب بأستخدام الرقم الناتج: مرفق مثال لتوضيح الفكرة

Public Function Alpha2NumConvert(var As String) As Double
	Dim v As Double
	Dim l As Integer
	Dim n As Integer
	Dim c As Byte

	v = 0
	l = Len(var)
	For n = 1 To l
		c = Asc(UCase(Mid(var, n, 1))) - Asc("0")
		If c > 9 Then c = c - 7
		v = v + (c * (36 ^ (l - n)))
	Next

	Alpha2NumConvert = v
End Function

شكراً

Eng. Usama El-Mokadem

Nothing is impossible, the word impossible itself says that: I M - Possible

#11

السلام عليكم

أخي Eng. Usama El-Mokadem طريقة جميلة ولكن هذه العملية ستأخذ وقتا طويلا في حالة ان هناك بيانات كثيرة في الجدول

لا أعرف هل الأخ alhaithm يريد ان يعتبر B1 اكبر من A10 ام ان العكس

باستخدام الفنكشن Alpha2NumConvert فانه يعتبر B1 اصغر من A10 (طبعا يعتمد على الأخ alhaithm)

على اية حال في حالة ان B1 اكبر من A10 اي ان الترتيب يعتمد على الحرف ثم الرق فان جملة لاستعلام ستكون

select * from txtTable order by left(Txt,1), val(mid(txt,2))

ام اذا كان الترتيب يعتمد على الحرف والرقم بنفس الوقت مالجملة التالية تنفع

select * from txtTable order by  len(mid(txt,2)), left(Txt,1), val(mid(txt,2))

هذه الطريقة اسرع من استخدام user function داخل جملة لاستعلام

والله أعلم

سبحانك اللهم وبحمدك أشهد ان لا اله الا أنت

أستغفرك وأتوب اليك

الهم صلي وسلم وبارك على سيدنا وحبيبنا محمد

#12

الأخ الفاضل ... Mo7eb_Alrasool

شكراً لك وبارك الله فيك،

اقتباس
MyOrder: CInt(Mid$([Num];2;10))

شرح التعبير:

CInt تقوم بتحويل مخرجات الدالة $MID إلى رقم ليتم ترتيبه

بواسطة الدالة $MSD نستخرج الأرقام بدون الحروف وتلاحظ بأمما بدأنا من الرقم 2 لأن A هو رقم 1 ولا نريده.

الرقم 10 هو عدد الخانات التي نريد أن تعيدها لنا الدالة فلو لدينا حقل بهذا الشكل A65487546871 فأن الدالة ستهمل الرقم 1 من جهة اليمين لأن الأرقام قبله =10 خانات ويمكن أن زيد الرقم 10 بما تراه مناسباً

لقد قرائة الطريقة الرائعة التى أشار إليها الأخ (مصلح الحريصي) فى المشاركة السابقة، وهى نفس الفكرة التى أستخدمها (Mo7eb_Alrasool)، ولكن ما جعلنى أستخدم دالة Alpha2NumConvert هو:

1) سأحتاج للتغير فى كل الإستعلامات إذا ما قررت تخصيص حرفين ثابتين بدلاً من حرف واحد بمعنى (AA1, AA2 ...etc) بدلاً من (A1, A2, ... etc) وسيكون الموضوع أصعب لو كان هذا الـ(Query) داخل كود وليس مجرد أستعلام.

2) لن تفلح فى حلة أستخدام مزيج بين حرف وحرفين مثال (A1, A3, A11, A241, AA10, AA30) وهكذا

3) إذا أردت الأوليه فى الترتيب على أول حرف يمكن أستخدام

SELECT * FROM txtTable ORDER BY Left(Txt, 1), Alpha2NumConvert(txt)

بدلاً من:

SELECT * FROM txtTable ORDER BY Alpha2NumConvert(txt)

شكراً

Eng. Usama El-Mokadem

Nothing is impossible, the word impossible itself says that: I M - Possible

#13

السلام عليكم

حياك الله أخي Eng. Usama El-Mokadem وبارك الله فيك

انا كنت اتحدث عن السرعة فقط فعند استخدام built in function يكون اسرع من استخدام user defined function

اقتباس
1) سأحتاج للتغير فى كل الإستعلامات إذا ما قررت تخصيص حرفين ثابتين بدلاً من حرف واحد بمعنى (AA1, AA2 ...etc) بدلاً من (A1, A2, ... etc) وسيكون الموضوع أصعب لو كان هذا الـ(Query) داخل كود وليس مجرد أستعلام.

2) لن تفلح فى حلة أستخدام مزيج بين حرف وحرفين مثال (A1, A3, A11, A241, AA10, AA30) وهكذا

بالنسبة في حال استخدام أكثر من حرف فتستطيع استخدام التالي
select * from txtTable
order by mid(txt,1,instr(txt,strreverse(val(strreverse(txt))))-1),
		 val(mid(txt,InStr(txt,strreverse(val(strreverse(txt))))))

لتجريبها استخدم

select id,txt,mid(txt,1,instr(txt,strreverse(val(strreverse(txt))))-1)as Letters,
mid(txt,InStr(txt,strreverse(val(strreverse(txt))))) as Numbers
 from txtTable
order by mid(txt,1,instr(txt,strreverse(val(strreverse(txt))))-1),
		 val(mid(txt,InStr(txt,strreverse(val(strreverse(txt))))))

فهي تفصل الحروف من الأرقام

والله أعلم طبعا

سبحانك اللهم وبحمدك أشهد ان لا اله الا أنت

أستغفرك وأتوب اليك

الهم صلي وسلم وبارك على سيدنا وحبيبنا محمد

#14
Mo7eb_Alrasool كتب:
السلام عليكم

انا كنت اتحدث عن السرعة فقط

لتجريبها استخدم

select id,txt,mid(txt,1,instr(txt,strreverse(val(strreverse(txt))))-1)as Letters,
mid(txt,InStr(txt,strreverse(val(strreverse(txt))))) as Numbers
from txtTable
order by mid(txt,1,instr(txt,strreverse(val(strreverse(txt))))-1),
		 val(mid(txt,InStr(txt,strreverse(val(strreverse(txt))))))

الأخ الفاضل ...

بارك الله فبك ... هل تعلم أن الإستعلام السابق يستخدم 17 دالة built in function ؟؟؟؟؟؟؟

قم بإنشاء جدول كبير جداً ، وقارن السرعة !!!

تم تعديل هذه المشاركة بواسطة Eng. Usama El-Mokadem في 8 فبراير 2007 في 05:27

Eng. Usama El-Mokadem

Nothing is impossible, the word impossible itself says that: I M - Possible

هذا الموضوع مغلق.

مواضيع مشابهة