منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : البحث عن اي جزء من أي كلمة في مربع نص واحد
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم
الإخوة الكرام
وجدت المشاركة التالية في مكتبة الأكواد
والسؤال:
1/ كيف نعدل في الكود بحيث يكون البحث عن (أي جزء) من (أي كلمة) ولا يشترط البحث بالكلمة كاملة.
2/ تعديل آخر في الكود منفصل عن التعديل السابق، وهو كون البحث حسب ترتيب الكلمات المدخلة في خانة البحث.
وجزاكم الله خيرا
==========
وإليكم المشاركة:
==========
كاتب الموضوع : سعود


اضف مربع نص وزر امر واداة شبيكة البيانات
التعريفات العامة توضع بمنطقة التصريحات العامة

كود :
كود :
Dim str As String = "provider=microsoft.ace.oledb.12.0;data source=|datadirectory|\db.accdb"
Dim con As New OleDb.OleDbConnection(str)
Dim sql As String = "select * from tb"
Dim ds As New DataSet
Dim da As New OleDb.OleDbDataAdapter(sql, con)
في حدث تحميل الفورم اكتب:

كود :
كود :
ds.Clear()
DataGridView1.DataSource = Nothing
DataGridView1.DataMember = Nothing

da.Fill(ds, "tb")
DataGridView1.DataSource = ds
DataGridView1.DataMember = "tb"
اكتب عدة كلمات في مربع النص مثلا (السلام عليكم ورحمة الله وبركاته)
وضع بقاعدة البيانات مختارات من هذه الكلمات واضف كلمات اخرى وانظر ماذا يفعل الكود التالي تضعه بحدث النقر لزر الامر

كود :
كود :
Dim p() As String = TextBox1.Text.Split(" ")
Dim ds1 As New DataSet


For Each s In p
Dim sql1 As String = "select * from tb where tname='" & s & "'"
Dim da1 As New OleDb.OleDbDataAdapter(sql1, con)


da1.Fill(ds1, "tb")
Next
DataGridView1.DataSource = ds1
DataGridView1.DataMember = "tb"
ان كنت سوف تستخدم قواعد البيانات للإحتفاظ بكلمات معينة تستخدم كأساس لفكرة AutoSearch
حاول أن تربط بين فكرة الأخ سعود مع الكود الموجود في المرفقات

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

الجزء الثاني من سؤالك غير مفهوم حاول توضح أكثر
(21-07-17, 09:28 AM)silverlight كتب : [ -> ]ان كنت سوف تستخدم قواعد البيانات للإحتفاظ بكلمات معينة تستخدم كأساس لفكرة AutoSearch
حاول أن تربط بين فكرة الأخ سعود مع الكود الموجود في المرفقات

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

الجزء الثاني من سؤالك غير مفهوم حاول توضح أكثر

جزاك الله خيرا أخي الكريم على اهتمامك
لكني لا أقصد خاصية AutoSearch
إنما أقصد البحث في قاعدة البيانات كما في المكتبة الشاملة مثلا
وقد أرفقت مثالا طبقت فيه الكود الذي ذكره الأخ سعود جزاه الله خيرا
وهو يبحث عن أي كلمة كتبناها في التيكت بوكس الخاص بالبحث
فلو كتبنا مثلا:
السلام عليكم ورحمة الله وبركاته
فسيتم البحث في قاعدة البيانات عن كلمة "السلام" وكلمة "عليكم" وكلمة "ورحمة"... وهكذا
لكن يشترط لظهور نتائج كتابة الكلمة كاملة
فلو بحثت عن كلمة "سلام"
فلن تظهر لي في النتائج كلمة "السلام"
==========
والذي أريد تعديله على الكود هو جعل البحث بجزء من الكلمة
بمعني أنني لو كتبت في خانة البحث: سلام عليك
تظهر لي كل النتائج التي فيها: سلام السلام السلامة عليك عليكم عليكما
وهكذا
=========
حالة أخرى من حالات البحث
نشترط فيها وجود كل الكلمات المدخلة
فلو بحثت عن: سلام عليك
لا تظهر لنا نتائج إلا إذا كانت الخلية تحتوي على الكلمتين معا
=========
حالة أخرى من حالات البحث
نشترط فيها وجود كل الكلمات المدخلة كما في الحالة السابقة ونزيد عليها اشتراط الترتيب
فلو بحثت عن: سلام عليك
لا تظهر لنا الحقول التي تشتمل على نص فيه: عليك سلام الله
========
وجزاكم الله خيرا
جرب المثال التالي:
كود :
Public Class Form1
   Dim con As New OleDb.OleDbConnection("provider=microsoft.ace.oledb.12.0;data source=|datadirectory|\db.accdb")
   Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
       If con.State = ConnectionState.Closed Then con.Open()
       Dim dt As DataTable
       For Each h As String In TextBox1.Text.Split(" ")
           Using da = New OleDb.OleDbDataAdapter("select * from tb where tname like'%" & h & "%'", con)
               dt = New DataTable
               da.Fill(dt)
               ListBox1.DataSource = dt
               ListBox1.DisplayMember = "tname"
           End Using
       Next
   End Sub
End Class
انظر لجملة الاستعلام  وانظر قبلها لعبارة

كود :
 For each h in textbox1.text.split(" ")

جملة الاستعلام ونتيجة For في هذا الكود  هي التي تحدد النتيجة.

انظر للمثال بعد التعديل وهي فقط جزئية الاستعلام
انظر للمرفق ليست تماما  مثل الكود اعلاه.
(21-07-17, 08:55 PM)سعود كتب : [ -> ]جرب المثال التالي:
كود :
Public Class Form1
   Dim con As New OleDb.OleDbConnection("provider=microsoft.ace.oledb.12.0;data source=|datadirectory|\db.accdb")
   Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
       If con.State = ConnectionState.Closed Then con.Open()
       Dim dt As DataTable
       For Each h As String In TextBox1.Text.Split(" ")
           Using da = New OleDb.OleDbDataAdapter("select * from tb where tname like'%" & h & "%'", con)
               dt = New DataTable
               da.Fill(dt)
               ListBox1.DataSource = dt
               ListBox1.DisplayMember = "tname"
           End Using
       Next
   End Sub
End Class
انظر لجملة الاستعلام  وانظر قبلها لعبارة

كود :
 For each h in textbox1.text.split(" ")

جملة الاستعلام ونتيجة For في هذا الكود  هي التي تحدد النتيجة.


سلمت أخي سعود
هذا الكود يمكننا من البحث الجزئي عن بعض الكلمات
لكن فيه مشكلة يسيرة
وهي عندما أكتب كلمة يتم البحث عنها، وهذا جيد
فإذا عملت مسافة لأكتب كلمة أخرى يتم إعادة تحميل البيانات كلها في داتا جريد فيو، وهذا ما لا نريده


وجزاكم الله خيرا
إقتباس : يتم إعادة تحميل البيانات كلها في داتا جريد فيو، وهذا ما لا نريده
يمكنك فصل اداة الـDataGridView وتعبئتها بالكود ...مارايك؟
-------------
اقصد عدم ربطها عبر خاصية DataSource
هل جربت المثال بعد التعديل؟
كود :
Public Class Form1

   Dim str As String = "provider=microsoft.ace.oledb.12.0;data source=|datadirectory|\db.accdb"
   Dim con As New OleDb.OleDbConnection(Str)
   Dim sql As String = "select * from tb"
   Dim dt As New DataTable
   Dim da As New OleDb.OleDbDataAdapter(sql, con)

   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
       dt.Clear()
       DataGridView1.DataSource = Nothing
       da.Fill(dt)
       DataGridView1.DataSource = dt
       RadioButton1.Checked = True
       Label1.Text = " عدد الصفوف: " & dt.Rows.Count
   End Sub

   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
       If RadioButton1.Checked = True Then
           Dim dt1 As New DataTable
           For Each s In TextBox1.Text.Split("")
               Dim sql1 As String = "select * from tb where tname like'%" & s & "%'"
               Dim da1 As New OleDb.OleDbDataAdapter(sql1, con)
               da1.Fill(dt1)
           Next
           DataGridView1.DataSource = dt1
           Label1.Text = " عدد الصفوف: " & dt1.Rows.Count
       End If
   End Sub

   Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
       Button1.PerformClick()
   End Sub
End Class
(23-07-17, 09:06 PM)سعود كتب : [ -> ]هل جربت المثال بعد التعديل؟
كود :
Public Class Form1

   Dim str As String = "provider=microsoft.ace.oledb.12.0;data source=|datadirectory|\db.accdb"
   Dim con As New OleDb.OleDbConnection(Str)
   Dim sql As String = "select * from tb"
   Dim dt As New DataTable
   Dim da As New OleDb.OleDbDataAdapter(sql, con)

   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
       dt.Clear()
       DataGridView1.DataSource = Nothing
       da.Fill(dt)
       DataGridView1.DataSource = dt
       RadioButton1.Checked = True
       Label1.Text = " عدد الصفوف: " & dt.Rows.Count
   End Sub

   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
       If RadioButton1.Checked = True Then
           Dim dt1 As New DataTable
           For Each s In TextBox1.Text.Split("")
               Dim sql1 As String = "select * from tb where tname like'%" & s & "%'"
               Dim da1 As New OleDb.OleDbDataAdapter(sql1, con)
               da1.Fill(dt1)
           Next
           DataGridView1.DataSource = dt1
           Label1.Text = " عدد الصفوف: " & dt1.Rows.Count
       End If
   End Sub

   Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
       Button1.PerformClick()
   End Sub
End Class

بارك الله فيك أخي سعود
ونفع الله بعلمك
السلام عليكم اريد كود
للبحث عن نص في اكثر من ملف في فجول بيسك 6 اذا ممكن رد
(11-03-20, 01:31 AM)حسين فتحي كتب : [ -> ]السلام عليكم اريد كود
للبحث عن نص في اكثر من ملف في فجول بيسك 6 اذا ممكن رد

وعليكم السلام
يمكنك طرح السؤال في المكان المخصص له في فجول بيسك 6 
وإن شاء الله تجد من يجيبك