PDA

View Full Version : index و جستجو در جدوال



Mohammad S
شنبه 12 اردیبهشت 1383, 13:22 عصر
با سلام خدمت تمامی دلفی کارای عزیز

می خواستم بدونم آیا از index می توان برای واکشی تک رکورد (جستجو بر روی چند فیلد آن یا همه فیلد های آن) یا مجموعه ای از رکوردها استفاده کرد؟ اگر جواب مثبت است لطفاً نحوه استفاده از آن و دستورات مورد نیاز را بفرمایید

با تشکر :)

rambod51
یک شنبه 13 اردیبهشت 1383, 09:08 صبح
دوست عزیز اگه درست فهمیده باشم می خوای چند فیلدو با هم جستجو کنی
برای این کار باید از دستور SetRangeStart استفاده کنی من یه نمون که از checkbox استفاده میکنه برات می فرستم شاید بدرت بخوره اگه کسی بهترشو بلد به ما هم بگه(البته می تونی بدون ایندکس هم جستجو انجام بدی بوسیله دستور لوکیت)Locate

Fr_menu.Tdaro_forosh.SetRangeStart;
if checkbox1.Checked=true then begin
Fr_menu.Tdaro_forosh.FieldByName('Date_kharid').as string:=maskedit1.Text;
Fr_menu.Tdaro_forosh.FieldByName('Name_darokh').as string:=dblookupcombobox1.text;
Fr_menu.Tdaro_forosh.FieldByName('Name_daro').asst ring:=dblookupcombobox2.text;
end;
if checkbox1.Checked=false then begin
Fr_menu.Tdaro_forosh.FieldByName('Name_darokh').as string:=dblookupcombobox1.text;
Fr_menu.Tdaro_forosh.FieldByName('Name_daro').asst ring:=dblookupcombobox2.text;
end;
Fr_menu.Tdaro_forosh.setrangeend;
if checkbox1.Checked=true then begin
Fr_menu.Tdaro_forosh.FieldByName('Date_kharid').as string:=maskedit2.Text;
Fr_menu.Tdaro_forosh.FieldByName('Name_darokh').as string:=dblookupcombobox1.text;
Fr_menu.Tdaro_forosh.FieldByName('Name_daro').asst ring:=dblookupcombobox2.text;
end;
if checkbox1.Checked=false then begin
Fr_menu.Tdaro_forosh.FieldByName('Name_darokh').as string:=dblookupcombobox1.text;
Fr_menu.Tdaro_forosh.FieldByName('Name_daro').asst ring:=dblookupcombobox2.text;
end;
Fr_menu.Tdaro_forosh . applyrange;
اینم یکی دیگه بدون ایندکس
if fr_menu.t_daro_list.Active= false then fr_menu.t_daro_list.Active:=true;
if fr_menu.t_daro_list.Locate('name_daro',edit1.text,[])then
begin
bitbtn2.Enabled:=true;
bitbtn3.Enabled:=true;
bitbtn1.Enabled:=false;
speedbutton3.Enabled:=true;
end

moradi_am
یک شنبه 13 اردیبهشت 1383, 10:39 صبح
برای جستجو با locate با چند فیلد میتوانید بصورت زیر عمل کنید :


if fr_menu.t_daro_list.Locate('name_daro;Name_darokh' ,vararrayof([edit1.text,Edit2.text]),[])then
.....

Mohammad S
یک شنبه 13 اردیبهشت 1383, 18:09 عصر
انگار منظورم را درست نفهمیدید دوستان
با تشکر از جوابتان ، می خواهم بدانم که آیا توسط دستور index جستجو انجام می شود یا خیر یا فقط برای سورت کردن است چون یکی از اساتید بنده می فرمود بهترین روش جستجو استفاده از index است. من خودم برای جستجو روی یک بانک (یک بانک توجه فرمایید نه چند فایل) از دستور filter استفاده می کنم به صورت زیر:


Table1.Filter:='Name = '+QuotedStr(Edit1.Text)+'Family = '+QuotedStr(Edit2.Text);
Table1.Filtered:=True;

توجه داشته باشید که در دستورات فوق اصلا احتیاجی به ایندکس نیست.
نظر شما دوستان در رابطه با روش من چیست؟ :wink:

rambod51
یک شنبه 13 اردیبهشت 1383, 21:23 عصر
با اجازه بزرگترا بگم
اولا سعی کن از ایندکس استفاده کنی نه فیلتر چون ایندکس سریعتره
بعد ایندکس فقط برای مرتب کردن و جستجو در بانک مرتب شده سریع تر است بخاظر همین موضوعه که می گن برای جستجو بهترین را ایندکس است پس نمی نوان از آن برای جستجو استفاده کرد

Mohammad S
یک شنبه 13 اردیبهشت 1383, 21:51 عصر
رامبود جان یک کمی در رابطه با بانک مرتب شده توضیح بده و اینکه چطوری می تونم رکوردهایی که فیلد نام = علی و فیلد شماره تلفن = 12345 است را پیدا کنم البته توسط دستورات index

با تشکر

rainstorm
پنج شنبه 26 اردیبهشت 1387, 11:31 صبح
اگه کسی در مورد استفاده از Index تو دلفی چیزی میدونه کامل توضیح بده، جستجو در سایت هم که خیلی بد شده اصلا چیزی رو که می خای پیدا نمیشه

vcldeveloper
پنج شنبه 26 اردیبهشت 1387, 14:15 عصر
اگه کسی در مورد استفاده از Index تو دلفی چیزی میدونه کامل توضیح بده
Index برای چه کاری؟! یکی فایل Index میکنه، یکی منظورش Index روی فیلدهای یک جدول هست، یکی منظورش المان های یک لیست هست، و...

سعی کنید سوال کامل و دقیق بپرسید، تا اگر کسی هم واقعا خواست که جواب کامل بده، بدونه به چی باید جواب بده.