بطى وتعليق عند البحث في قاعده بيانات
#1
بسم الله الرحمن الرحيم

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

مشكلتي بعد ان وجدت داله pos
التي تقوم بالبحث عن كلمه داخل حقل واجهتني مشكله
فقط للتعريف لدي قاعده بيانات اكسس
ربطتها بالدلفي باستخدام اداه adotable
استخدمت زر للبحث عن حقل الاسماء
بحيث لو بحثت مثلاً عن كلمه محمد تظهر الاسماء المتعلقه به سواء كان اسم الشخص او ابيه اوجده
يوجد فيقاعده البيانات 600000 سجل
باستخدام هذا الكود
PHP كود :
while not Table1.Eof do
  
begin
    
if Pos(Edit1.Text, Table1.FieldByName('CodeField').AsString) > 0 then
    begin
      ListBox1
.Items.Add(Table1.FieldByName('CodeNo').AsString);
    
end;
    
Table1.Next;
  
end; 
النتائج جيده لكن بعد فتره يصاب البرنامج بالشلل التام ويتوقف عن الاستجابه
وايضاً يكون البحث بطيى جداً مقارنه ببعض البرامج الذي تستخدم نفس قواعد البيانات
السؤال كيف يمكنني ان اجعل البحث سريع وبنفس فعاليه الداله pos
وكيف اجعل النتائج تظهر في listbox بدون ان يعلق البرنامج
ولكم جزيل الشكر
الرد
#2
السلام عليكم

أعتقد أن البطء ناتج عن عمليات الادخال في ListBox

قم بتعطيل العرض في listbox قبل عملية البحث ثم فعلها من جديد

كود :
ListBox1.Items.BeginUpdate; while not Table1.Eof do begin if Pos(Edit1.Text, Table1.FieldByName('CodeField').AsString) > 0 then begin ListBox1.Items.Add(Table1.FieldByName('CodeNo').AsString); end; Table1.Next; end; ListBox1.Items.EndUpdate;
الرد
#3
أيضا فيما يخص السرعة:
- استخدام ADOQuery أفضل من AdoTable
- استخدام AdoDataSet أفضل من ADOQuery
- إذا كنت تستخدم قاعدة بيانات اكسيس قم بتحديد خاصية CursorLocation إلى clServer
-- حاول استكشاف تأثيرات الخواص: CursorType بقيمة ctOpenForwardOnly ، و الخواص LockType و ReadOnly
الرد
#4
السلام عليكم

كود :
النتائج جيده لكن بعد فتره يصاب البرنامج بالشلل التام ويتوقف عن الاستجابه

اذا كانت الوحدة DB معرفة فى برنامجك من جراء استعمال مكونات الاتصال جرب استعمال الدالة ProcessMessages

كود :
[color=Red]DB[/color].[color=Red]DB[/color]Application.ProcessMessages;
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم