منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[سؤال] كيف أستخدم دالة معرفة مسبقاً ضمن الاستعلام؟ - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : [سؤال] كيف أستخدم دالة معرفة مسبقاً ضمن الاستعلام؟ (/showthread.php?tid=36833)

الصفحات: 1 2


RE: كيف أستخدم دالة معرفة مسبقاً ضمن الاستعلام؟ - السندبااد - 03-11-20

(03-11-20, 02:31 AM)Anas Mahmoud كتب :
(02-11-20, 07:51 PM)السندبااد كتب :
للأسف لم تنجح هذه الطريقة

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

ولك بمثله

غريبة ، على العموم المبدأ واحد اذا كنت تريد ترتيب العناصر بناءا على دالة معرفة في مستوى الفيجوال بيسك يجب ان تقوم بترتيبهم في نفس المستوى ، اذ لا يمكن لل SQL معرفة الدوال المعرفة بمستوى اعلى منه 

لو تشاركني بالجزء الخاص بملىء الداتا تيبل لديك مثلا ربما نصل الى شيء وصدقني مرادك يتحقق ان شاء الله باستخدام LINQ

أخي الحبيب أنا مقتنع بهذا الكلام، ولكن لاحظت أنه لا يقوم بالعملية على أكمل وجه؛ مثلاً في دالة ReplaceString أضفت معياراً لتجاهل (ابن) عند الترتيب، ولكن هذا لا يتم، فمثلاً عندي (ابن ماجه) المفروض يكون ترتيب في حرف الميم وليس الألف.

على كل وضعت لك مثالاً في المرفقات مع قاعدة البيانات، وقمت بتطبيق فكرتك عليه، وستلاحظ في الليستا أنه لا يتجاهل بعض العبارات في الترتيب مثل: أبو، ابن.
أرجو التكرم بالاطلاع على المرفق وتطبيق الفكرة عليها، وأسأل الله تعالى أن تنجح فكرتك، وألف شكر لك Smile



RE: كيف أستخدم دالة معرفة مسبقاً ضمن الاستعلام؟ - Anas Mahmoud - 03-11-20

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

المشكلة استاذي في منطق الدالة ReplaceString نفسه ، 

strChar هو حرف وحيد ولا يمكن استخدامه داخل Select Case لاختبار اكثر من حرف مثل "ال" او "ابن"

جربت نفس الطريقة ولكني عدلت الدالة لتبحث عن البادئات اولا وتمسحها ومن ثم تبحث عن الحروف الغريبة  :
كود :
   Public Function ReplaceString(In_Text As String) As String
       Dim X As Long
       Dim strChar As String
       Dim strReturn As String
       strReturn = ""



       If In_Text.StartsWith("ابن") Then
           In_Text = In_Text.Substring(3, In_Text.Length - 3)
       End If
       If In_Text.StartsWith("أبو") Then
           In_Text = In_Text.Substring(3, In_Text.Length - 3)
       End If
       If In_Text.StartsWith("ال") Then
           In_Text = In_Text.Substring(2, In_Text.Length - 2)
       End If
       For X = 1 To Len(In_Text)
           strChar = Mid(In_Text, X, 1)
           Select Case strChar
               'Case "ال"
               '    strChar = ""
               'Case "ابن "
               '    strChar = ""
               'Case "أبو "
               '    strChar = ""
               Case Chr(243), Chr(240), Chr(245), Chr(246), Chr(242), Chr(241), Chr(248), Chr(250)
                   strChar = ""
           End Select
           strReturn = strReturn & strChar
       Next
       ReplaceString = strReturn
   End Function

والنتيجة :

[attachment=25942]

اتمنى ان هذا ما كنت تريده


RE: كيف أستخدم دالة معرفة مسبقاً ضمن الاستعلام؟ - السندبااد - 03-11-20

(03-11-20, 01:20 PM)Anas Mahmoud كتب : السلام عليكم ورحة الله وبركاته

المشكلة استاذي في منطق الدالة ReplaceString نفسه ، 

strChar هو حرف وحيد ولا يمكن استخدامه داخل Select Case لاختبار اكثر من حرف مثل "ال" او "ابن"

جربت نفس الطريقة ولكني عدلت الدالة لتبحث عن البادئات اولا وتمسحها ومن ثم تبحث عن الحروف الغريبة  :
كود :
   Public Function ReplaceString(In_Text As String) As String
       Dim X As Long
       Dim strChar As String
       Dim strReturn As String
       strReturn = ""



       If In_Text.StartsWith("ابن") Then
           In_Text = In_Text.Substring(3, In_Text.Length - 3)
       End If
       If In_Text.StartsWith("أبو") Then
           In_Text = In_Text.Substring(3, In_Text.Length - 3)
       End If
       If In_Text.StartsWith("ال") Then
           In_Text = In_Text.Substring(2, In_Text.Length - 2)
       End If
       For X = 1 To Len(In_Text)
           strChar = Mid(In_Text, X, 1)
           Select Case strChar
               'Case "ال"
               '    strChar = ""
               'Case "ابن "
               '    strChar = ""
               'Case "أبو "
               '    strChar = ""
               Case Chr(243), Chr(240), Chr(245), Chr(246), Chr(242), Chr(241), Chr(248), Chr(250)
                   strChar = ""
           End Select
           strReturn = strReturn & strChar
       Next
       ReplaceString = strReturn
   End Function

والنتيجة :



اتمنى ان هذا ما كنت تريده

أشكرك جداً على اهتمامك، وأرجو أن نصل في النهاية للحل.

للأسف هذا الحل خطأ كما يظهر في صورتك:
ابن ماجه: بعد تجاهل (ابن) يصبح (ماجه)؛ إذن يجب أن يأتي ترتيبه في الميم؛ أي بعد (كتبي) وقبل (مختار).

مثال آخر:
أبو جيب: بعد تجاهل (أبو) يصبح (جيب)؛ إذن يجب أن يأتي ترتيبه في الجيم؛ أي بعد (الجرجاني) وقبل (الحاكم).

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

عدَّلت في كودك فوصلت للحل، والتعديل هنا:
كود :
In_Text = In_Text.Substring(3, In_Text.Length - 3)

إلى:
كود :
In_Text = In_Text.Substring(4, In_Text.Length - 4)

وذلك من أجل حذف المسافة بعد (ابن) و(أبو).

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



RE: كيف أستخدم دالة معرفة مسبقاً ضمن الاستعلام؟ - Anas Mahmoud - 03-11-20

اللهم امين واياك اخي الكريم