بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
اخوتي / اخواتي الاعزاء اشكركم على ما تبذلونه من مجهود لمساعدة الاخرين في هذا المنتدى
لدي سؤال حول البحث في حال لو اردت ان يتم تجاهل الفاصلة "," من البحث في حال البحث المتعدد في الكود التالي استخدم تكست بوكس عدد واحد
كود :
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
انا استخدم هذا الكود ولكن اريد ان استخدم اكثر من تكست بوكس بحيث يمكنني ان اجعل الاسم في تكست لوحدها والجنس في تكست لوحدها ...الخ
وشكرا لكم وبارك الله فيكم
الكود لن يعمل معك لان فيه اخطاء
اولها لم تحدد طول الsubstring بحيث يكون مثل
If s.Substring(s.Length - 1,1) = "," Then
ثانيها انت وضعت try بدون ما تضع كود اظهار رساله الخطا في catch
ثالثها انت تستخدم اسماء اعمده فيها مسافه
(01-04-19, 08:09 PM)بدري كتب : [ -> ]الكود لن يعمل معك لان فيه اخطاء
اولها لم تحدد طول الsubstring بحيث يكون مثل
If s.Substring(s.Length - 1,1) = "," Then
ثانيها انت وضعت try بدون ما تضع كود اظهار رساله الخطا في catch
ثالثها انت تستخدم اسماء اعمده فيها مسافه
اخي العزيز الكود يعمل ولا توجد به اي مشاكل بخصوص Length - 1 فهي تعني اخر حرف في النص بغض النظر عن طوله
وشكرا على المداخلة
لقد استفدت بمعلومه منك فجزاك الله خير
وشكرا على الافاده
وعليكم السلام ورحمة الله وبركاته
قم باستخدام الكود بهذا الشكل
كود :
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 من البحث
لان بدون هذا الامر
ستجد اذا وجد نتائج من القيمة الاول وراح وجد فى القيمة الثالثة
ستجد انه يعرض فقط القيمة الثالثة لذلك لتقليل الحمل والوقت عند وجود اول نتائج يعرضها مباشراً
تحياتى لك
وتمنياتى لك التوفيق
(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
ظننت من ردك لي ان المشكله انتهت
عموما ربما هذا ما تريد
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)
فهو يبحث بحسب مربعات النص المدخل بها بيانات
مثلا لو ادخلت الاسم فقط سيبحث بالاسم فقط ولو اضفت معه رقم هاتف سيبحث بالاسم ورقم الهاتف فقطوهكذا
واعتذر اليك
(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 بنفس الطريقة علما ان جميع الخانات ستحتوي على بيانات وفواصل اثناء عملية البحث
وتقبل مني شكر وتقديري
احذر اخي من استخدام try بدون ما تضع رساله خطا في catch الخاص بها
فهذه ستسبب لك مشكله في عدم ظهور اخطاء في الكود وتظن انك ماشي صح والواقع يكون العكس
بالنسبه للبحث في جميع الاسماء احمد,محمد,خالد,محمود فهذه تحتاج محترف sql
هل من الممكن تضع مشروع فيه بيانات لاجرب عليها حتى اصل للحل؟
بكل تاكيد لم يعرض لك اى نتائج الا قيمة واحدة فقط
والسبب يرجع بان كلما تم تعبئة الـ DT وارسال القيم التى بها الى DataGridView
يتم اعادة تعبئتها من جديد ومن ثم اعادة ارسالها الى DataGridView
وبهذه الطريقة سيعرض فقط اجر نتائج البحث فقط من تعدد البحث
ولكي لا اقوم بكتابة كود كبير هنا
ولعدم شرح كيفية تصحيح طريقة الكود الذى لديك
احببت ان اعمل سورس كود مرفق + برنامج للاختبار
لطريقة التعامل مع تعدد البحث من خلال الفاصلة بين كل جملة واخري
وكيفية التعامل مع اى عمود بالجدول فى طريقة البحث
وايضاً حتى لا يذهب مجهود الاخر الفاضل بدري
احببت ان اشارك الكود بمشاركته بعد التعديل عليه ليناسب طريق الاستعلام
حتى تعم الفائدة وكذلك يمكن الاستفادة منه الاخرين
السورس المرفق اصدار 2015
صورة لشكل البرنامج
صورة لطريقة البحث الفردي
صورة لطريقة البحث المتعدد
تحياتى لك
وتمنياتى لك التوفيق