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

نسخة كاملة : كود البحث طول جدا و بطى
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم شباب عندى سؤال و هو
كود البحث عندى طويل جدا و بطى فى التنفيذ فاهل يوجد حل لتصغير حجم الكود مع التنفيذ السريع
فى تحميل الفروم بشغل الكود التالى
كود :
textboxAutoCompte(TextBox1)
       textboxAutoComptee(TextBox2)

وهى دى الاكود لى بتشغل عطول
كود :
Sub textboxAutoCompte(ByVal tb As TextBox)
       Dim constr As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True"
       Dim con As New SqlConnection(constr)
       If con.State = ConnectionState.Open Then con.Close()
       con.Open()
       Dim dt As New DataTable
       Dim ret As Integer = New SqlDataAdapter("Select * From TheResourceDetails", con).Fill(dt)
       Dim MySource As New AutoCompleteStringCollection()
       For Each s In dt.AsEnumerable.Cast(Of DataRow).Select(Function(r) r("CompanyName")).ToArray()
           MySource.Add(s)
       Next
       With tb
           .AutoCompleteCustomSource = MySource
           .AutoCompleteMode = AutoCompleteMode.SuggestAppend
           .AutoCompleteSource = AutoCompleteSource.CustomSource
       End With
       If con.State = ConnectionState.Open Then con.Close()
   End Sub

   Sub textboxAutoComptee(ByVal tb As TextBox)
       Dim constr As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True"
       Dim con As New SqlConnection(constr)
       If con.State = ConnectionState.Open Then con.Close()
       con.Open()
       Dim dt As New DataTable
       Dim ret As Integer = New SqlDataAdapter("Select * From TheResourceDetails", con).Fill(dt)
       Dim MySource As New AutoCompleteStringCollection()
       For Each s In dt.AsEnumerable.Cast(Of DataRow).Select(Function(r) r("CompanyName")).ToArray()
           MySource.Add(s)
       Next
       With tb
           .AutoCompleteCustomSource = MySource
           .AutoCompleteMode = AutoCompleteMode.SuggestAppend
           .AutoCompleteSource = AutoCompleteSource.CustomSource
       End With
       If con.State = ConnectionState.Open Then con.Close()
   End Sub
تمام و بعد كده بعمل بحث تانى 
كود :
Private Sub TextBox2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.Click
       Dim constr As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True"
       Dim con As New SqlConnection(constr)
       If con.State = ConnectionState.Open Then con.Close()
       con.Open()
       Dim da As New SqlDataAdapter("select * from TheResourceDetails where CompanyName = N'" & TextBox1.Text & "'", con)
       Dim ds As New DataSet
       ds.Clear()
       TextBox2.DataBindings.Clear()
       TextBox2.Text = ""
       da.Fill(ds, "TheResourceDetails")
       Me.TextBox2.DataBindings.Add("text", ds, "TheResourceDetails.DirectorName")
       If con.State = ConnectionState.Open Then con.Close()
   End Sub

   Private Sub TextBox1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseClick
       Dim constr As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True"
       Dim con As New SqlConnection(constr)
       If con.State = ConnectionState.Open Then con.Close()
       con.Open()
       Dim da As New SqlDataAdapter("select * from TheResourceDetails where DirectorName = N'" & TextBox2.Text & "'", con)
       Dim ds As New DataSet
       ds.Clear()
       TextBox1.DataBindings.Clear()
       TextBox1.Text = ""
       da.Fill(ds, "TheResourceDetails")
       Me.TextBox1.DataBindings.Add("text", ds, "TheResourceDetails.CompanyName")
       If con.State = ConnectionState.Open Then con.Close()
   End Sub
 طريقة تشغل الكود كلو كالاتى
اول ما الفورم تفتح بكتب اول حرف من اشركة الشركة بيظهر الاسم كلو و بختار اسم الشركة و بعد كده بدوس عالتكست لى بعدو بيتم تشغل الكود التالى لوحد لى بيقوم بعمل بحث تانى علشان يجيب اسم مدير الشركة و العكس صحيح
يعنى لو كتبت اسم مدير الشركة و عند الضغط عالتكست اسم الشركة هيتم البحث عن اسم الشركة مع العرضو فى التكست
المشكلة هنا ان الكود حجمو كبير جدا و بيخدو وقت كبير فى التنفيذ
ايه حل المشكلة دى علشان حاولت لكن بدون جدوى Huh
السلام عليكم أخي العزيز ورحمة الله وبركاته
أخي الكريم أرسل مشروع مصغر عن الفكرة لنتمكن من مساعدتك
أتمنى لك التوفيق
اتفضل اخى
انا رفعت المشروع صغير انا كل لى حاول اعملو هو
اعندى اتنين تكست بوكس و هم اسم الشركة و المدير
انا عايز لما اكتر اسم الشركة يظهر اسم المدير لوحد او اسم المدير يظهر اشم الشركة لوحدو
مع جود نفس قائمة البحث لى عملها ازاى جوجل علشان لما اكتب ايه حرف يزهر كل البيانات و فى ايه تكست من الاتنين
و شكر ليك اخى
اخي الكريم :
وضعت لك تعديل على مثالك . ولكن قاعدة البيانات المرفقه لم تعمل معي . لذا في الـ Module قم بكتابة جملة الاتصال ..
Wink


الكود كالتالي :
في Module اضف
PHP كود :
Module Module1
    Public connDB 
As New SqlClient.SqlConnection
    Dim constring 
As String "جملة الاتصال Data Source ... ~~~"
 
   Public Function comDB() As SqlClient.SqlCommand
         Dim bb 
As New SqlClient.SqlCommand
        With bb
            connDB
.Close()
 
           If connDB.State <> ConnectionState.Open Then
                connDB
.ConnectionString constring
                Try
                    connDB
.Open()
 
               Catch ex As Exception
                    MsgBox
(ex.MessageMsgBoxStyle.Exclamation"")
 
                   Return bb
                    Exit 
Function
 
               End Try
 
           End If
 
           .Connection connDB
            
.CommandType CommandType.Text
            
.CommandTimeout 0
        End With
        Return bb
    End 
Function
 
   Public Sub closeDB()
 
       If connDB.State <> ConnectionState.Closed Then connDB.Close()
 
   End Sub

    Public Sub FillList
(Table As StringField As Stringtxt As TextBox)
 
       Dim col As New AutoCompleteStringCollection
        With comDB
()
 
           .CommandText "SELECT  DISTINCT " Field " FROM " Table
            Using rdDB 
= .ExecuteReader
                If rdDB
.HasRows True Then
                    While rdDB
.Read()
 
                       col.Add(rdDB.Item(Field).ToString.Trim)
 
                   End While
 
               End If
 
           End Using
        End With
        txt
.AutoCompleteSource AutoCompleteSource.CustomSource
        txt
.AutoCompleteCustomSource col
        txt
.AutoCompleteMode AutoCompleteMode.Append
    End Sub
End Module 

وفي Form1 اضف 
PHP كود :
Public Class Form1
    Private Sub TextBox2_TextChanged
(sender As ObjectAs EventArgsHandles TextBox2.TextChanged
        If TextBox2
.Focused False Then Exit Sub
        With comDB
()
 
           .CommandText "SELECT * FROM TheResourceDetails WHERE DIRECTORNAME = '" TextBox2.Text "'"
 
           Using RD = .ExecuteReader()
 
               If RD.HasRows True Then
                    RD
.Read()
 
                   TextBox1.Text RD!CompanyName
                Else
                    TextBox1
.Text ""
 
               End If
 
           End Using
        End With
    End Sub
    Private Sub TextBox1_TextChanged
(sender As ObjectAs EventArgsHandles TextBox1.TextChanged
        If TextBox1
.Focused False Then Exit Sub
        With comDB
()
 
           .CommandText "SELECT * FROM TheResourceDetails WHERE CompanyName= '" TextBox1.Text "'"
 
           Using RD = .ExecuteReader()
 
               If RD.HasRows True Then
                    RD
.Read()
 
                   TextBox2.Text RD!DIRECTORNAME
                Else
                    TextBox2
.Text ""
 
               End If
 
           End Using
        End With
    End Sub
    Private Sub Form1_Load
(sender As ObjectAs EventArgsHandles MyBase.Load
        FillList
("TheResourceDetails""CompanyName"TextBox1)
 
       FillList("TheResourceDetails""DIRECTORNAME"TextBox2)
 
   End Sub
End 
Class 
شكرا ليك اخى
بس للاسف ظهر مشكلة تانى و هى عندما كتب اسم الشركة و الانتقال للتكست المدير لا يظهر اسم تلقائى
و فى حالة كتب اسم المدير يتم احذف اسم الشركة
و المفروض انى لو كتب اسك الشركة يتكم اظهر اسم المدير تلقائى و العكس صحيح
يعنى لو كتبت اسم المدير يظهر اسم الشركة تلقائى
السلام عليكم أخي العزيز ورحمة الله وبركاته
أقدم لكم أخي العزيز نفس المثال أو المشروع ولكنه بقاعدة بيانات أكسس، أعتقد أنه سيفيدك،
المشروع :[attachment=9140]

أتمنى لك التوفيق
شكر ليك اخى