PDA

View Full Version : سوال: یک ایراد در جستجو با استفاده از دستور Locate



khorsandreza
چهارشنبه 07 تیر 1391, 18:11 عصر
سلام بر همه دوستان
من یک مشکل در جستجو با Locate دارم باید عرض کنم می دانم روش درست استفاده از دستورات Query است ولی نسبت به نیماز در یک قسمت کار مجبورم جدول را که حدود 100000 رکورد هست Selcet کنم و با دستور Locate جستجو انجام بدم اولین جستجو زمانی زیادی طول می کشد حدود 12 الی 15 ثانیه ولی در جستجوهای بعدی زمان کمتر از ثانیه (حدود 14 میلی ثانیه) کارهائی که انجام دادم بشکل زیر است
1 - بر روی ستونی که باید جستجو انجام دهم اندیکس گذاشته شده
2 - دستور باز کردن نیز به این شکل است Select code From mytb order by code
که شکل کلی دستورات

MainQ.SQL.Clear;
MainQ.SQL.Add('SELECT CODE,CODM FROM MyTB Order By CODE);
MainQ.Open;
.
.
.
.
IF MainQ.Locate('CODE',CodeEdit.Text,[]) Then
Begin
.
.
.
.
End;

mohsen24000
چهارشنبه 07 تیر 1391, 21:22 عصر
مشکل و کندی سرعت از دستور Locate نیست چون که خودتون گفتید که فیلد مورد جستجو رو ایندکس کردید که قاعدتا خیلی سریع به رکورد مورد نظر خواهید رسید.
تمام زمانی رو که به اون اشاره کردید صرف کوئری میشه و نه Locate.

khorsandreza
چهارشنبه 07 تیر 1391, 22:10 عصر
من موقع باز کردن فرم کوئری را open می کنم در بالا بیشتر منظورم شرح دستورات بود والا این دو در دو بخش جدا اتفاق می افته در واقع وقتی باز هست جستجو می کنم اگه کوئری باز نباشه خطا Close Dataset می دهد
قبلا در BDE با یک دستور اگه اشتباه نکنم SetIndex بود می توانستیم مستقیم به اندیکس اشاره بکنیم ولی در کوئری روشی اگه باشه نمی دونم

khorsandreza
پنج شنبه 08 تیر 1391, 09:32 صبح
دوستان مجددا سلام
مشکل را پیدا کردم جهت بهره برداری احتمالی دوستان
دستور زیر را بعد باز کردن کوئری نوشته میشود که باعث میشه سرعت جستجو با Locate فوق العاده بالا بره

MainQ.SortRecords(['CODE'], [True], []);

:تشویق: