PDA

View Full Version : سوال: جستجوی پیشرفته!



tik_tak
دوشنبه 08 مهر 1387, 00:03 صبح
سلام
یه فرم دارم که کاربر باید اطلاعاتی مثله :
نام
نام خانوادگی
زن /مرد
نام پدر
ت ت
ش ش
کدملی
محل تولد
و
.
.
.
.
اگه بخوام جستجوی پیشرفته برایه این فیلدا م داشته باشم
طوریکه کاربر اطلاعات مربوط به هر کدوم رو که دونست وارد کنه وجستجو برحسب اون اطلاعاتی که ما وارد کردیم صورت بگیره
مثلا یکی جنسیت و محل تولد رو وارد میکنه پس جستجو برحسب این دو صورت میگیره
ویا حالتهای زیاده دیگه
نمیدونم چه جوری دستورش رو بنویسم
اگرم بیام و واسه همه حالتهایی که کاربر اطلاعات وارد میکنه و ازاونجایی که این حالتها زیاد هم هست دستوراتی شبیه این کد بنویسم به نظرم راه معقولی نیست
آیا راه دیگه ای هست؟


if adotable1.locate('name';'family';vararrayof([edit1.text,edit2.text]),[]) then
showmessage('FIND');

SYNDROME
دوشنبه 08 مهر 1387, 06:29 صبح
یکی از روشها استفاده از کامپونت Ehlib است که بتوانید بر اساس هر کدام از ستونها جستجو کنید.
ولی اگر می خواهید در رویدادهای خود Edit بنویسید می توانید با استفاده از نام خود Edit به نام فیلدتان برسید.
مثلاً اگر نام فیلد جدولتان Name است نام Edit خود را Edit_Name بگذارید و برای نوع فیلد هم می توانید مثلا از Tag خود edit استفاده کنید.
موفق باشید

amin_alexi
دوشنبه 08 مهر 1387, 07:55 صبح
سلام
من معمولا از دستور SQL استفاده ميكنم به همراه AdoQuery
به ازاي هر TextBox بررسي ميكنم كه اگه خالي بود در شرط SQL مربوط به Query اضافه نشه بين شرطها هم بستگي به خودتون داره ميتونيد از Or يا And استفاده كنيد و همچنين در داخل شرط هم از Like استفاده كنيد تا اگه بخواين مشابه رو هم Search كنه ...
فقط اندكي يك مقدار كد نويسي داره

tik_tak
دوشنبه 08 مهر 1387, 17:33 عصر
به ازاي هر TextBox بررسي ميكنم كه اگه خالي بود در شرط SQL مربوط به Query اضافه نشه بين

من نمیدونم این دستور چه جوری نوشته میشه !

amin_alexi
دوشنبه 08 مهر 1387, 19:57 عصر
سلام

من نمیدونم این دستور چه جوری نوشته میشه !

If Trim(EdtName.Text)<>'' Then SQL:=SQL+' Name='''+EdtName.Text+''''
من معمولا از یه همچین چیزی استفاده میکنم در آخر هر چی تو SQL رو اجرا میکنم !

amin_alexi
دوشنبه 08 مهر 1387, 20:01 عصر
این هم نمونه کدم


Function GetStr;
Begin
Result:=#39+S+#39;
End;

Function SetPercent(Str:String):String;
Begin
Result:= '%'+Str+'%';
End;

Function Condition:String;
Begin
Result:= '';
If Trim(CoNameE.Text)<>'' Then Result:= Result+' And '+'CoName Like'+GetStr(SetPercent(CoNameE.Text));
If Trim(ManagerNameE.Text)<>'' Then Result:= Result+' And '+'ManagerName Like'+GetStr(SetPercent(ManagerNameE.Text));
If Trim(TmE.Text)<>'' Then Result:= Result+' And '+'Tm Like'+GetStr(SetPercent(TmE.Text));
If Trim(CityE.Text)<>'' Then Result:= Result+' And '+'City Like'+GetStr(SetPercent(CityE.Text));
If Trim(AddressE.Text)<>'' Then Result:= Result+' And '+'Address Like'+GetStr(SetPercent(AddressE.Text));
If Trim(EMailE.Text)<>'' Then Result:= Result+' And '+'EMail Like'+GetStr(SetPercent(EMailE.Text));
If Trim(ZipCodeE.Text)<>'' Then Result:= Result+' And '+'ZipCode Like'+GetStr(SetPercent(ZipCodeE.Text));
If Trim(TelE.Text)<>'' Then Result:= Result+' And '+'Tel Like'+GetStr(SetPercent(TelE.Text));
If Trim(FaxE.Text)<>'' Then Result:= Result+' And '+'Fax Like'+GetStr(SetPercent(FaxE.Text));
If Trim(OtherE.Text)<>'' Then Result:= Result+' And '+'Other Like'+GetStr(SetPercent(OtherE.Text));
End;

این رو ببین شاید ازش ایده گرفتی !