تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
سؤال حول البحث المتقدم
#1
Big Grin 
بسم الله الرحمن الرحيم 
السلام عليكم ورحمة الله وبركاته
اخوتي / اخواتي الاعزاء اشكركم على ما تبذلونه من مجهود لمساعدة الاخرين في هذا المنتدى 
لدي سؤال حول البحث في حال لو اردت ان يتم تجاهل الفاصلة "," من البحث في حال البحث المتعدد في الكود التالي استخدم تكست بوكس عدد واحد 

كود :
Dim s As String = TextBox1.Text
           Dim Str() As String = TextBox1.Text.Split((",").ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
           If s.Substring(s.Length - 1) = "," Then
               Try
                   For i As Integer = 0 To Str.Length - 1
                       searchDT.Clear()
                       searchDA = New OleDbDataAdapter("select * from Employees where الاسم  like '" & Str(i) & "' or   الرقم الوطني like '" & Str(i) & "'or رقم الهاتف like '" & Str(i) & "'  or مكان الميلاد like '" & Str(i) & "'  or عنوان السكن like '" & Str(i) & "' or الجنس like '" & Str(i) & "'", con)
                       searchDA.Fill(searchDT)
                       DataGridView1.DataSource = searchDT
                       calcu_gradview()
                   Next
               Catch ex As Exception
               End Try

انا استخدم هذا الكود ولكن اريد ان استخدم اكثر من تكست بوكس بحيث يمكنني ان اجعل الاسم في تكست لوحدها والجنس في تكست لوحدها ...الخ
وشكرا لكم وبارك الله فيكم
الرد }}}
تم الشكر بواسطة:
#2
الكود لن يعمل معك لان فيه اخطاء

اولها لم تحدد طول الsubstring بحيث يكون مثل
If s.Substring(s.Length - 1,1) = "," Then

ثانيها انت وضعت try بدون ما تضع كود اظهار رساله الخطا في catch

ثالثها انت تستخدم اسماء اعمده فيها مسافه
الرد }}}
تم الشكر بواسطة: elgokr , elgokr , ahmadpal
#3
(01-04-19, 08:09 PM)بدري كتب : الكود لن يعمل معك لان فيه اخطاء

اولها لم تحدد طول الsubstring بحيث يكون مثل
If s.Substring(s.Length - 1,1) = "," Then

ثانيها انت وضعت try بدون ما تضع كود اظهار رساله الخطا في catch

ثالثها انت تستخدم اسماء اعمده فيها مسافه

اخي العزيز الكود يعمل ولا توجد به اي مشاكل بخصوص Length  - 1 فهي تعني اخر حرف في النص بغض النظر عن طوله 
وشكرا على المداخلة
الرد }}}
تم الشكر بواسطة: بدري
#4
لقد استفدت بمعلومه منك فجزاك الله خير
وشكرا على الافاده
الرد }}}
تم الشكر بواسطة: elgokr , ahmadpal , ahmadpal
#5
وعليكم السلام ورحمة الله وبركاته

قم باستخدام الكود بهذا الشكل
كود :
       Try
           Dim s As String = TextBox1.Text
           If s.Contains(",") Then
               Dim Str As String() = TextBox1.Text.Split(",")
               For Each aa In Str.ToList
                   searchDT.Clear()
                   searchDA = New OleDbDataAdapter("select * from Employees where `الاسم`  like '" & aa & "' or `الرقم الوطني` like '" & aa & "' or `رقم الهاتف` like '" & aa & "'  or `مكان الميلاد` like '" & aa & "'  or `عنوان السكن` like '" & aa & "' or `الجنس` like '" & aa & "'", con)
                   searchDA.Fill(searchDT)
                   If searchDT.Rows.Count <> 0 Then
                       DataGridView1.DataSource = searchDT Then
                       calcu_gradview()
                       Exit For
                   End If
               Next
           Else
               searchDT.Clear()
               searchDA = New OleDbDataAdapter("select * from Employees where `الاسم`  like '" & s & "' or `الرقم الوطني` like '" & s & "' or `رقم الهاتف` like '" & s & "'  or `مكان الميلاد` like '" & s & "'  or `عنوان السكن` like '" & s & "' or `الجنس` like '" & s & "'", con)
               searchDA.Fill(searchDT)
               DataGridView1.DataSource = searchDT
               calcu_gradview()
           End If
       Catch ex As Exception
           MsgBox(ex.Message)
       End Try


تذكر انا قمت بوضع كود تحقق اذا تم ايجاد نتائج البحث
يقوم بانهاء اجراء For كونه حصل على نتائج دون الحاجة لاستككمال اعادة البحث على باقي القيم

فمثلاً لديك عدد 3 قيم تقوم بالبحث بها
ووجد نتيجة من اول قيم سيتجاهل القيمة 2 و 3 من البحث

لان بدون هذا الامر
ستجد اذا وجد نتائج من القيمة الاول وراح وجد فى القيمة الثالثة
ستجد انه يعرض فقط القيمة الثالثة لذلك لتقليل الحمل والوقت عند وجود اول نتائج يعرضها مباشراً

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

ساهم دائماً فى    لكل من يقوم بالمساهمة
فى حل المشكلة او الاستفسار لديك فالجميع هنا يعمل 
على مساعدة الاخرين لوجه الله وان تحتسب له اجر عند الله


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد }}}
تم الشكر بواسطة: بدري , ahmadpal
#6
(01-04-19, 09:17 PM)elgokr كتب :
وعليكم السلام ورحمة الله وبركاته

قم باستخدام الكود بهذا الشكل
كود :
       Try
           Dim s As String = TextBox1.Text
           If s.Contains(",") Then
               Dim Str As String() = TextBox1.Text.Split(",")
               For Each aa In Str.ToList
                   searchDT.Clear()
                   searchDA = New OleDbDataAdapter("select * from Employees where `الاسم`  like '" & aa & "' or `الرقم الوطني` like '" & aa & "' or `رقم الهاتف` like '" & aa & "'  or `مكان الميلاد` like '" & aa & "'  or `عنوان السكن` like '" & aa & "' or `الجنس` like '" & aa & "'", con)
                   searchDA.Fill(searchDT)
                   If searchDT.Rows.Count <> 0 Then
                       DataGridView1.DataSource = searchDT Then
                       calcu_gradview()
                       Exit For
                   End If
               Next
           Else
               searchDT.Clear()
               searchDA = New OleDbDataAdapter("select * from Employees where `الاسم`  like '" & s & "' or `الرقم الوطني` like '" & s & "' or `رقم الهاتف` like '" & s & "'  or `مكان الميلاد` like '" & s & "'  or `عنوان السكن` like '" & s & "' or `الجنس` like '" & s & "'", con)
               searchDA.Fill(searchDT)
               DataGridView1.DataSource = searchDT
               calcu_gradview()
           End If
       Catch ex As Exception
           MsgBox(ex.Message)
       End Try


تذكر انا قمت بوضع كود تحقق اذا تم ايجاد نتائج البحث
يقوم بانهاء اجراء For كونه حصل على نتائج دون الحاجة لاستككمال اعادة البحث على باقي القيم

فمثلاً لديك عدد 3 قيم تقوم بالبحث بها
ووجد نتيجة من اول قيم سيتجاهل القيمة 2 و 3 من البحث

لان بدون هذا الامر
ستجد اذا وجد نتائج من القيمة الاول وراح وجد فى القيمة الثالثة
ستجد انه يعرض فقط القيمة الثالثة لذلك لتقليل الحمل والوقت عند وجود اول نتائج يعرضها مباشراً

تحياتى لك
وتمنياتى لك التوفيق
اخي الكريم اشكرك جزيل الشكر على الرد ولكن يبدو انني لم اوضح السؤال جيداً اريد ان استخدم مجموعه من التكست بوكس 
الاول الاسم.text
الثاني الرقم_الوطني.text
الثالث الجنس.text
الرابع عنوان السكن.text
الخامس مكان الميلاد.text
السادس رقم الهاتف.text
وهذه التكست بوكس تقبل البحث عن اكثر من قيمة في نفس الوقت بمعنى بعد اضافة الفاصله في اي تكست سيجلب كل القيم فمثلا رقم الهاتف لو كتبت 
55666666,55544455,666699988,4447788899 ونطابقت هذه الارقام مع ارقام موجودة في قاعدة البيانات يجب ان تظهر جميعها في الداتا جريد فيو وفي حال اضفت عنوان يتم تصفية النتائج بناءً على العنوان لارقام الهواتف وكذلك باقي الخانات ويبدو انني سوف استخدم and بدلا من or ليكون البحث شامل لجميع الخانات

وهذا هو الكود بعد اضافة تعديل بسيط حيث انه يعمل بشكل جيد ولكن لتكست بوكس واحد انا اريد اللوب ان يشمل جميع التكست بوكس
كود :
im s As String = TextBox1.Text
           Dim Str() As String = TextBox1.Text.Split((",").ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
           If s.Substring(s.Length - 1) = "," Then
               Try
                   For i As Integer = 0 To Str.Length - 1
                       searchDT.Clear()
                       searchDA = New OleDbDataAdapter("select * from Employees where الاسم  like '" & Str(i) & "' and   الرقم_الوطني like '" & Str(i) & "' and رقم_الهاتف like '" & Str(i) & "'  and مكان_الميلاد like '" & Str(i) & "'  and عنوان_السكن like '" & Str(i) & "' and الجنس like '" & Str(i) & "'", con)
                       searchDA.Fill(searchDT)
                       DataGridView1.DataSource = searchDT
                       calcu_gradview()
                   Next
               Catch ex As Exception
               End Try
الرد }}}
تم الشكر بواسطة:
#7
ظننت من ردك لي ان المشكله انتهت

عموما ربما هذا ما تريد
sql="select * from Employees where true "
if الاسم.text.trim<>"" then sql &= " and الاسم  like '" & الاسم.text.trim & "'"
if الرقم_الوطني.text.trim<>"" then sql &= " and الرقم_الوطني like '" & الرقم_الوطني.text.trim & "'"
if الجنس.text.trim<>"" then sql &= " and الجنس like '" & الجنس.text.trim & "' "
if عنوان السكن.text.trim<>"" then sql &= " and عنوان_السكن like '" & عنوان السكن.text.trim & "'"
if مكان الميلاد.text.trim<>"" then sql &= " and مكان_الميلاد like '" & مكان الميلاد.text.trim & "'"
if رقم الهاتف.text.trim<>"" then sql &= " and رقم_الهاتف like '" & رقم الهاتف.text.trim & "'"

searchDA = New OleDbDataAdapter(sql, con)

فهو يبحث بحسب مربعات النص المدخل بها بيانات

مثلا لو ادخلت الاسم فقط سيبحث بالاسم فقط ولو اضفت معه رقم هاتف سيبحث بالاسم ورقم الهاتف فقطوهكذا

واعتذر اليك
الرد }}}
تم الشكر بواسطة: ahmadpal
#8
(01-04-19, 10:59 PM)بدري كتب : ظننت من ردك لي ان المشكله انتهت

عموما ربما هذا ما تريد
sql="select * from Employees where true "
if الاسم.text.trim<>"" then sql &= " and الاسم  like '" & الاسم.text.trim & "'"
if الرقم_الوطني.text.trim<>"" then sql &= " and الرقم_الوطني like '" & الرقم_الوطني.text.trim & "'"
if الجنس.text.trim<>"" then sql &= " and الجنس like '" & الجنس.text.trim & "' "
if عنوان السكن.text.trim<>"" then sql &= " and عنوان_السكن like '" & عنوان السكن.text.trim & "'"
if مكان الميلاد.text.trim<>"" then sql &= " and مكان_الميلاد like '" & مكان الميلاد.text.trim & "'"
if رقم الهاتف.text.trim<>"" then sql &= " and رقم_الهاتف like '" & رقم الهاتف.text.trim & "'"

searchDA = New OleDbDataAdapter(sql, con)

فهو يبحث بحسب مربعات النص المدخل بها بيانات

مثلا لو ادخلت الاسم فقط سيبحث بالاسم فقط ولو اضفت معه رقم هاتف سيبحث بالاسم ورقم الهاتف فقطوهكذا

واعتذر اليك


اشكرك اخي الكريم وهذا لطف منك ان تجيب عن اسالتي لكن بالاضافة الى ما قدمته لي اريد ايضا ان تكون الفاصلة (,) عبارة عن بحث جديد اي بعدما يتم اضافة الفاصلة في textbox يتم تجاهل هذه الفاصلة والبحث ايضا بالكلمات التي تلي الفاصلة واعتبار انك تقوم بادخال قيمة جديدة وناتج البحث يشمل جميع الكلمات بين الفواصل 
فمثلا ابحث عن احمد ومحمد وخالد ومحمود اكتب في خانة البحث بحسب الاسم احمد,محمد,خالد,محمود ويجب ان تظهرلي جميع هذه الاسماء وفي حال لو اضفت في خانة العنوان اي عنوان ايضاً بنفس الفكرة مع قبول التعدد في العنوان مثلا العراق,مصر,السعودية يجب ان يحتوي البحث على كل هذه الكلمات وباقي الtextbox بنفس الطريقة علما ان جميع الخانات ستحتوي على بيانات وفواصل اثناء عملية البحث 
وتقبل مني شكر وتقديري
الرد }}}
تم الشكر بواسطة: بدري
#9
احذر اخي من استخدام try بدون ما تضع رساله خطا في catch الخاص بها
فهذه ستسبب لك مشكله في عدم ظهور اخطاء في الكود وتظن انك ماشي صح والواقع يكون العكس

بالنسبه للبحث في جميع الاسماء احمد,محمد,خالد,محمود فهذه تحتاج محترف sql

هل من الممكن تضع مشروع فيه بيانات لاجرب عليها حتى اصل للحل؟
الرد }}}
تم الشكر بواسطة: ahmadpal
#10
بكل تاكيد لم يعرض لك اى نتائج الا قيمة واحدة فقط
والسبب يرجع بان كلما تم تعبئة الـ DT وارسال القيم التى بها الى DataGridView
يتم اعادة تعبئتها من جديد ومن ثم اعادة ارسالها الى DataGridView

وبهذه الطريقة سيعرض فقط اجر نتائج البحث فقط من تعدد البحث

ولكي لا اقوم بكتابة كود كبير هنا
ولعدم شرح كيفية تصحيح طريقة الكود الذى لديك

احببت ان اعمل سورس كود مرفق + برنامج للاختبار
لطريقة التعامل مع تعدد البحث من خلال الفاصلة بين كل جملة واخري

وكيفية التعامل مع اى عمود بالجدول فى طريقة البحث
وايضاً حتى لا يذهب مجهود الاخر الفاضل بدري 
احببت ان اشارك الكود بمشاركته بعد التعديل عليه ليناسب طريق الاستعلام
حتى تعم الفائدة وكذلك يمكن الاستفادة منه الاخرين

السورس المرفق اصدار 2015

صورة لشكل البرنامج

صورة لطريقة البحث الفردي

صورة لطريقة البحث المتعدد

تحياتى لك
وتمنياتى لك التوفيق


الملفات المرفقة
.zip   Pro.zip (الحجم : 31.67 ك ب / التحميلات : 31)
.zip   MultiSearch.zip (الحجم : 36.99 ك ب / التحميلات : 45)
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

ساهم دائماً فى    لكل من يقوم بالمساهمة
فى حل المشكلة او الاستفسار لديك فالجميع هنا يعمل 
على مساعدة الاخرين لوجه الله وان تحتسب له اجر عند الله


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد }}}
تم الشكر بواسطة: بدري , DK-x



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم