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

مشكلة في ترتيب الاسماء ابجدياً

بدأه vb6 في 31 مارس 2008 · 15 رد · 6,768 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

هذا كود استعلام وعرض الاسماء بشكل ابجدي

srcv1 = "select * from st1 where fl4 like '" & Combo2.Text & "''order by [st1.name]"

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

وجزكم الله خير

#2

عفواً هل السؤال غير واضح أو لا يمكن عمل ذلك عن طريق الفجول بيسك

#3

أفضل شيء أنك تتجاهل إدخال هذه الحروف من أساسة وذلك في حدث KeyPress كما يلي :

Private Sub Text1_KeyPress(KeyAscii As Integer)
	Dim strFind As String
	strFind = "أإ"
	If (InStr(strFind, Chr(KeyAscii)) > 0) Then KeyAscii = 0
End Sub

بحيث أن يرفض إدخال الحرفين ( أ إ )

لكن إذا كنت مصر علي ذلك فيمكنك البحث بالجملة المدخلة ، إذا كانت تحتوي علي حرف ( أ ) أو ( إ ) في هذه الحالة يتم عرض أي قيمة بها حرف ( أإ )

شكراً

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#4

اخي جزاك الله خير على الرد

لا اريد منع المستخدم من أدخال هذا الحرف

الذي أريده كيف يمكن ترتيب الاسماء دون أن يؤثر فيها وجود الهمزة على حرف الألف

مثلاً

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

#5
اقتباس
اخي جزاك الله خير على الرد

لا اريد منع المستخدم من أدخال هذا الحرف

الذي أريده كيف يمكن ترتيب الاسماء دون أن يؤثر فيها وجود الهمزة على حرف الألف

مثلاً

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

الأخ الكريم ، هذا شيء طبيعي ،

لأن الحرف ( أ ) يأخذ قيمة Ascii = 195 ، أما الحرف ( ا ) يأخذ قيمة Ascii = 199 ، وأنت ترغب في إجراء ترتيب تصاعدي ، فمن الطبيعي أن يتم عرض ( أحمد ) قبل ( ابراهيم ) !!!

هذا شيء طبيعي أخي الكريم

لكن أخي تسمح لي بمعرفة هدفك في هذا الموضوع !!!

لكن مبدئياً يمكنك إجراء ترتيب تنازلي كما يلي :

Order By ST1.Name Desc

بس المشكلة أنة سيتم عرض كافة الحروف تصاعدياً ، بمعني أن الحرف ( ب ) سيتم عرضة قبل الحرف ( أ ) !!!

لكن أخي ممكن طريقة أخري وهي أن تنشأ Replace علي البيانات قبل عرضها !!!

بمعني أدق ، لا تتعامل مع الجدول مباشرتاً ، وقم بإدراج View جديد ومن ثم قم بإجراء تغيير للحرف كما يلي :

Select Replace(ST1.Name,'أ','ا') As Name
From Table Name

وبعد ذلك قم بإستدعاء هذا الـ View من داخل الفيجوال كما يلي :

Select Name
From ViewName
Order By Name

وهذا علي ما أعتقد أنه حل جميل ، ولكن لا يجوز إجراء تعديل علية مباشرتاً !!!

شكراً

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#6

أخي جزاك الله خير على الوقت الذي تبذله في الرد على أسئلتي

بالنسبة هدفي من هذا الكود هو أني اتعامل مع قاعدة بيانات لبرنامج أخر وأريد أن أقوم بعرض ترتيب الاسماء في برنامج من تصميمي

بالنسبة للكود الذي ذكرته كيف يمكنني دمجه في الاستعلام الذي ذكرته في أول سؤالي

#7

نفرض أن لدينا جدول Emp ، هذا الجدول يحتوي علي حقل Emp_Name ، هذا الحقل يمثل إسم الموظف ، وبه العديد من السجلات ، حتي يتم عرض البيانات يمكننا كما يلي :

Select Replace(Emp.Emp_Name,'أ','ا') As Emp_Name
From Emp

حيث أن دالة Replace هي دالة تستخدم في إستبدال حروف من قيمة الي أخري

أنظر المرفق

شكراً

Simble.rar

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#8

أخي سامحني على كثرة الاسئلة

لقد حملت الملف وفكيته وجدت الكود مكتوب في قاعدة البيانات وحاولة أن اكتبه في الفجول ولكن لم استطع يقول لي Replace غير معرفة فما هو التعديل الذي يتم لكي يعمل الكود من VB6

وجزاك الله خير

#9
اقتباس
ممكن أحدهم يكتب أحمد بالهمزه ويكتب ابراهيم فعند عرض هذه الاسماء يكون أحمد قبل ابراهيم بسبب كتابة الهمزه

العيب في مدخل البيانات وهذه هي مشكلة اللغة العربية معقدة في احرفها وتوايخها

الافضل ان تنشىء حقل لتصنيف .... مثلا عندما يكتب مدخل البيانات (احمد) يضعه ضمن التصنيف (أ)

كما في دليل الهاتف ... وهكذا تستطيع ان تفرز البيانات بناءَ على الاحرف ...

تم تعديل هذه المشاركة بواسطة HnHn في 31 مارس 2008 في 23:07

سجل ايميلك هنا

googlejb5.gif ليصلك كل ما هو مفيد في عالم البرمجة
#10

هذا الكود الذي كتبته

srcv1 = "select * from st1 where fl4 like '" & Combo2.Text & "ORDER BY Replace(st1.name,'ا','أ')"

#11
HnHn كتب:
العيب في مدخل البيانات وهذه هي مشكلة اللغة العربية معقدة في احرفها وتوايخها

الافضل ان تنشىء حقل لتصنيف .... مثلا عندما يكتب مدخل البيانات (احمد) يضعه ضمن التصنيف (أ)

كما في دليل الهاتف ... وهكذا تستطيع ان تفرز البيانات بناءَ على الاحرف ...

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

#12

بصراحة أخي أنا شايف أن الأخ المشرف ( هاني الشايب ) كلامة صحيح 100% !!!

يجب إدخال البيانات صحيحة حتي ترتجع لك البيانات صحيحة ( وهذا هو أفضل شيء ) .

لكن رأيي الشخصي هو الرأي الأول بأن ألغي إدخال ( أ إ آ ) وأكتفي بالحرف ( ا ) .

صحيح هذه الحروف أوضح ، لكن ليس كل المستخدمين يتعاملون معها لذلك تجد مستخدم يدخل الأسماء مثلاً تحت إسم ( أحمد محمود ) وعميل آخر تحت إسم ( احمد محمد ) مع العلم أن الأولي هي الأصح ( لغوياً ) ، وكذلك كلمة ( إبراهيم ) و ( ابراهيم ) ، مع العلم أيضاً أن الأولي الأصح .

علي العموم كما ذكرت لك ، إذا كنت ترغب في إستخدام هذه الميزة فما عليك إلا إجراء إستبدال للحروف نفسها بالدالة Replace ، فإذا إحتوي القيمة النصية علي ( أ ) يتم إستبدالها الي ( ا ) ومن ثم قم بإجراء ترتيب تصاعدي أو تناذلي بعد التعديل ، ولكن هذه العملية تنفذ فقط أثناء إجراء Order By ، أما بالنسبة للحقل نفسة فمن الصحيح أن يتم عرضة للمستخدم طبيعي .

أما بالنسبة للكود التالي :

srcv1 = "select * from st1 where fl4 like '" & Combo2.Text & "' ORDER BY Replace(st1.name,'ا','أ')"

فهو صحيح ، ما المشكلة إذاً ؟؟؟

شكراً

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#13

أخي الرسالة التي تظهر تقول الدالة Replace غير معرفة هل هناك تعريف لها يتم وضعه في الفورم

#14
اقتباس
أخي الرسالة التي تظهر تقول الدالة Replace غير معرفة هل هناك تعريف لها يتم وضعه في الفورم

ما هذا أخي ، انا أعطيت لك مثال علي الأكسيس ، ويمكنك أيضاً إستخدامها بنفس التركيبة من داخل الفيجوال 6.0

فما الأمر إذاً !!!!

غريبة

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#15

الامر سهل يا اخي الكريم

ليس عليك الا انت تضع في نهاية الاستعلام ordere by [record name] asc

الساحر

#16

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

من غير الممكن استخدام اوامر vb او vba في جمل الاستعلام في الفيجوال بيسك لان JET engine لا يدعمها .

فالامر replace او iif او MID وغيرها من الاوامر هي خاصة بالفيجوال بيسك .

فالحل المطلوب غير سهل الا بطرق صعبة وقد تكون غير مجدية . من هذا الطرق استعمال مصفوفات لتعبئة البيانات واجراء استبدال الهمزات ثم الترتيب من خلال المصفوفات باحدى طرق الترتيب .

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