منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
تعديل على كود بحث فى database - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : تعديل على كود بحث فى database (/showthread.php?tid=3571)



تعديل على كود بحث فى database - xebrahimx - 30-07-14

السلام عليكم
هل ممكن التعديل على هذا الكود
كود :
Dim word As String = encrypt(TextBox5.Text.Trim)
        Dim a As String = Format(DateTimePicker1.Text, "dd/mm/yyyy")
        '   Using databch As New OleDbDataAdapter("SELECT * FROM low6 where a6 like '%" & word & "%' and a3= '" & TextEdit6.Text.Trim & "' and a4= '" & TextEdit5.Text.Trim & "'", ConStr)
        Dim sql As String = String.Format("SELECT distinct a2 FROM low6 where a6 like '%{0}%'", word)

        If String.IsNullOrEmpty(TextBox6.Text.Trim) Then
            sql = sql
        Else
            sql = String.Format("{0} and a3= '{1}'", sql, TextBox6.Text.Trim)
        End If

        If String.IsNullOrEmpty(TextBox7.Text.Trim) Then
            sql = sql
        Else
            sql = String.Format("{0} and a4= '{1}'", sql, TextBox7.Text.Trim)
        End If

        If String.IsNullOrEmpty(DateTimePicker1.Text.Trim) Or String.IsNullOrEmpty(DateTimePicker2.Text.Trim) Then
            sql = sql
        Else
            sql = String.Format("{0}and a5 >= #{1}# and a5 <= #{2}#", sql, DateTimePicker1.Text.Trim, DateTimePicker2.Text.Trim)
        End If
         Dim datasrech As New DataSet
        Dim datasrech2 As New DataSet
        Label9.Text = "0"

        Using databch As New OleDbDataAdapter(sql, ConStr1)
            datasrech.Clear()
            databch.Fill(datasrech, "treserch")

            If Me.BindingContext(datasrech, "treserch").Count = 0 Then
                TreeView5.Nodes.Clear()
                MsgBox("لم يتم العثور على شيء", 48 + 524288, "البحث")
                Exit Sub
            End If
            Label9.Visible = True
            Label9.Text = Me.BindingContext(datasrech, "treserch").Count
        End Using
        ProgressBar1.Visible = True
        ProgressBar1.Minimum = 0
        ProgressBar1.Maximum = Val(Label9.Text) + 1
        ProgressBar1.Value = 0
        Dim dv1 As DataView = datasrech.Tables("treserch").DefaultView

        TreeView5.Nodes.Clear()
        For Each drLine As DataRowView In dv1

            Dim id_sharh As Integer = drLine("a2").ToString
            Using datab4 As New OleDbDataAdapter("SELECT * FROM low5 where id = " & id_sharh & "", ConStr1)

                datasrech2.Clear()
                datab4.Fill(datasrech2, "low5")
                Dim dv12 As DataView = datasrech2.Tables("low5").DefaultView
                For Each drLine2 As DataRowView In dv12
                    Dim MainHeader As New TreeNode(drLine2("a6").ToString())
                    MainHeader.Tag = drLine2("key").ToString
                    MainHeader.Name = drLine2("key").ToString
                    '  MainHeader.ForeColor = Color.Red
                    TreeView5.Nodes.Add(MainHeader)

                    Application.DoEvents()
                Next
            End Using

        Next
        TreeView5.EndUpdate()
هذا الكود وظيفته عرض البيانات من الدتا بيز فى treeview
لاكن الكود يأخذ وقت طويل فى اظهار البيانات فيظهر البيانات متتابعة بسبب استخدام جملة for
هل ممكن تعديل الكود ليتم عرض جميع البيانات مباشرة دون انتظار ؟


RE: تعديل على كود بحث فى database - kslawy - 30-07-14

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

بدل Dataset أحسن تستخدم DataReader في قراءة البيانات لأنه أسرع شويه

عند إسناد القيم مثل هذه :
كود :
Dim MainHeader As New TreeNode(drLine2("a6").ToString())
تستخدم في الـ DataReader فهرس الحقل وليس اسمه كالتالي:
كود :
While dr.Read

Dim MainHeader As New TreeNode(dr.GetInt32(0))
MainHeader.Name = dr.GetString(1)
.
.
.

End While



RE: تعديل على كود بحث فى database - xebrahimx - 30-07-14

السلام عليكم
شكرا للاجابة , لكن فى مشكلة فى الكود
عدلت كما قلت وأسندت رقم الحقل بدل اسمه فأصبح الكود
كود :
Dim dr As SqlDataReader
                    While dr.Read
                        Dim MainHeader As New TreeNode(dr.GetInt32(7))
                        MainHeader.Tag = dr.GetString(4)
                        MainHeader.Name = dr.GetString(1)
                        TreeView5.Nodes.Add(MainHeader)
                        TreeView5.EndUpdate()
                        dr.Close()
                    End While

لاكن يعطينى خطأ !
Object reference not set to an instance of an object.


RE: تعديل على كود بحث فى database - kslawy - 30-07-14

لأنك عرفت ال DataReader بدون ما تسند له الكائن الذي سيتعطيه البيانات بعد تعديل الكود سيصبح كالتالي:
كود :
Dim dr As SqlDataReader = databch.SelectCommand.ExecuteReader



RE: تعديل على كود بحث فى database - xebrahimx - 31-07-14

شكرا جزيلا تم عمل الكود بشكل سليم
========================

لاكن لم يحدث تغير نفس شىء يأخذ وقت فى عرض البيانات

هل يمكن تغير هذا الكود لاخر
كود :
For Each drLine2 As DataRowView In dv12
القصد تغير جملة فور !