الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

البحث بطيئ جدا

مغلق
بدأه VB786 في 20 يونيو 2004 · 7 رد · 518 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

الرجاء مساعدتي في تحسين هذا الكود لتصبح عملية البحث أسرع أو يوجد طريقة أو كود بديل يعطي نفس النتيجة وشكرا

Private Sub cmdFind_Click()
On Error GoTo ListError

Dim i As Integer
Dim itmName As Integer
        
      If txtSearch.Text = "" Then
         MsgBox "Enter a search string.", vbInformation, "Search String Needed."
         txtSearch.SetFocus
         Exit Sub
      End If
      
     
      lstResults.Clear
      datHaddith.Recordset.MoveFirst
      Do While Not datHaddith.Recordset.EOF
      For i = 1 To datHaddith.Recordset.RecordCount
         If InStr(1, txtTitle, txtSearch) <> 0 Then
            
            lstResults.AddItem Left$(txtID & Space$(30), 60) & _
            " " & Left$(txtTitle & Space$(30), 60) & _
            " " & Left$(dbcGenre, 60)
            End If
            
            datHaddith.Recordset.MoveNext
            Next
            Loop
            
            For itmName = lstResults.ListCount - 1 To 0 Step -1
            Next
                   
        datHaddith.Recordset.MoveFirst
        
txtSearch.Text = ""
txtSearch.SetFocus

ListError:
datHaddith.Recordset.MoveFirst
        
txtSearch.Text = ""
txtSearch.SetFocus
Exit Sub
End Sub
#3
مهند عبادي كتب:
يوجد حلقة فارغة :

          For itmName = lstResults.ListCount - 1 To 0 Step -1
           Next

أيضاً عند استعمال ADO يكون الأداء أفضل

نعم الحلقة تبطيء البرنامج حتى انها تستهلك من الذاكرة جزءا كبيرا ....

DoEvents ممكن تفيد في بعض الحلقات

راكان الحنيطي

Be Open Source

opensource-550x4752.gif

#4

جزاكما الله خيرا

لقد عطلت الحلقة الفارغة وما زال البحث بطيئا

فهل من فكرة لتسريعه وشكرا

#5

الأخ VB786

ماهي أداة البيانات التي تستخدمها ؟؟ DATA أم DAO أو ADO ??

الشيء الآخر هو أنه يفترض أن يكون البحث بطيء لأنك تبحث في كل الأعمدة ضمن الجدول وليس في عمود واحد

كما انك تستخدم INSTR وهي أبطئ بكثير من استخدام = مثلاً

#6

سؤال فقط

هل هناك فرق بين الدوارتين الأتيتين ؟؟

Do While Not datHaddith.Recordset.EOF

For i = 1 To datHaddith.Recordset.RecordCount

؟؟

#7

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

1- MoveFirst لا توجد فيه مشكة

2- MoveLast لا توجد فيه مشكلة

3- MoveNext

4- MovePrevious

والأثنان فيما مشكلة حيث أن الريكورد لا يتغير مع أني كتبت هذا الكود

Private Sub cmdNext_Click()
   SQL = "SELECT DISTINCTROW Quran.Code,  Quran.Category, Quran.VerseNo, Quran.PageNo, Quran.Number From Quran"
   Set Rs = gCurrentDB.OpenRecordset(SQL, dbOpenSnapshot)

Rs.MoveNext
      lblCode.Caption = Rs(0)
      cTitle.Text = Rs(1)
      cCategory.Text = Rs(2)
      cLevel.Text = Rs(3)
      cDes.Text = Rs(4)

End Sub

Private Sub cmdPrevious_Click()
   SQL = "SELECT DISTINCTROW Quran.Code,  Quran.Category, Quran.VerseNo, Quran.PageNo, Quran.Number From Quran"
   Set Rs = gCurrentDB.OpenRecordset(SQL, dbOpenSnapshot)

Rs.MovePrevious
      lblCode.Caption = Rs(0)
      cTitle.Text = Rs(1)
      cCategory.Text = Rs(2)
      cLevel.Text = Rs(3)
      cDes.Text = Rs(4)
End Sub
#8
أحمد عز كتب:
سؤال فقط

هل هناك فرق بين الدوارتين الأتيتين ؟؟

    Do While Not datHaddith.Recordset.EOF

    For i = 1 To datHaddith.Recordset.RecordCount

؟؟

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

اما عن سؤال الاخ Vb786 فلماذا تقوم بعمل الاستعلام في كل مرة ضغط فيها الزر؟ فاذا كانت خاصية ال DataSource في التكست مربوطة باداة Data

RS.MoveNext

او

RS.MovePrevious

تكفي!

تم تعديل هذه المشاركة بواسطة راكان الحنيطي في 21 يونيو 2004 في 00:36

راكان الحنيطي

Be Open Source

opensource-550x4752.gif

هذا الموضوع مغلق.

مواضيع مشابهة