PDA

View Full Version : راه جستجو



saleh_fartash
دوشنبه 29 تیر 1388, 17:46 عصر
سلام
دوستان،من نياز دارم كه در بانكي كه اسامي قرار دارند جستجو كنم به طوري كه اگر على را جستجو مي كنم على را پيدا كند اما اگر على در بانك وجود نداشت عليرضا را پيدا كند و رضا را به من بدهد. يا در محمدعلى ، محمد را به من بدهد.
من روي اين فكر كردم ولى به جواب نرسيدم.

Hsimple11
دوشنبه 29 تیر 1388, 17:59 عصر
دیتابیس شما چیه؟ SQL؟

یه Select در فیلد اسامی. با کلمه کلیدی LIKE و % در دو طرف SearchEdit.Text که Quoted اش کردید.

Hsimple11
دوشنبه 29 تیر 1388, 20:07 عصر
برای اینکه کلمه مورد نظرتون رو هم حذف کنه میتونید یک پروسیجر بنویسید که اگه نتیجه رکورد مساوی با اسم جستجو نبود (مثلا علیرضا) ، با توابعی مثل Pos و Delete موقعیت علی رو پیدا کنید و اون رو حذف کنید. این کار رو میتونید در یک SP بنویسید.

saleh_fartash
دوشنبه 29 تیر 1388, 20:22 عصر
اكسس
مثل اينكه شما منظور سؤال من رو متوجه نشديد.
حتما اشكال از توضيح من است پس:

من مدت هاست كه از اين روش ها استفاده مي كنم.
اما كاري كه من مي خواهم چيز ديگري است.
من مي خوام جستجو اولويت رو به خود اسم أصلي سپس در نبود اون به اسامي كه اون اسم رو در خودشون دارن رو به من بده و اسم اصلي رو از اون كم واسم فرعي رو بده.

Hsimple11
دوشنبه 29 تیر 1388, 21:40 عصر
من هم برای همین پست 3 رو نوشتم.

saleh_fartash
دوشنبه 29 تیر 1388, 22:42 عصر
دوست من مشكل اينجاست كه با % و quotedstr با هم ارور مي دهد.
اگر بتوانيد يك مثال براي من بگذاريد خيلي متشكر مي شم.

Hsimple11
سه شنبه 30 تیر 1388, 01:17 صبح
'SELECT * From MyTable_Tbl '+
'WHERE Name LIKE '+QuotedStr('%'+Trim(Edit_Name.Text)+'%')+


برای حذف رشته جستجو شده هم از Pos و Delete میتونید استفاده کنید. توی همین سایت و خود دلفی هم مثالاش هست.

ghasem_satt
سه شنبه 30 تیر 1388, 09:04 صبح
من هم دنبال این مطلب بودم اما بانکی که دارم با اکسس نوشتم
میشه منو کمک کنید.
که اگر چند کلمه اول اسم رو بنویسم اسامی رو که با این حروف شروع میشه رو نشون بده.
دمتون گرم

Hsimple11
سه شنبه 30 تیر 1388, 11:43 صبح
من هم دنبال این مطلب بودم اما بانکی که دارم با اکسس نوشتم
میشه منو کمک کنید.
که اگر چند کلمه اول اسم رو بنویسم اسامی رو که با این حروف شروع میشه رو نشون بده.


مشابه همون کوئری که بالا نوشتم. فقط % اوش رو بردارید تا رکوردهایی که با متن جستجوی شما شروع می شوند نمایش داده شوند.

saleh_fartash
سه شنبه 30 تیر 1388, 13:13 عصر
دوست من بانک من اکسس است و نمی دانم چگونه از کد شما استفاده کنم.
من از روش های جستجویی که گفتم در adotable استفاده می کردم،اما نحوهی استفاده از کد شما را نمی دانم.
لطفا بیشتر توضیح دهید.

_abiriamir
سه شنبه 30 تیر 1388, 13:23 عصر
به جای استفاده از Ado Table از Ado Query استفاده کنید و در خاصیت sql آن کدی که اشاره شد را وارد کنید

saleh_fartash
سه شنبه 30 تیر 1388, 13:43 عصر
من این کار رو کردم اما ارور می ده که دستورات مورد قبول SELECT , ... است که من تعجب کردم

_abiriamir
سه شنبه 30 تیر 1388, 13:50 عصر
with adoquery1 do
begin
close;
sql.text:= 'Select * from [tablename] where [fieldname] =:p1';
parameters.parambyname('p1').value := quotedstr('%'+[editname]+'%');
open;
end;

_abiriamir
سه شنبه 30 تیر 1388, 13:58 عصر
مشکلتون حل شد؟

saleh_fartash
سه شنبه 30 تیر 1388, 14:01 عصر
دوست من با کمال شرمندگی من هر کاری می کنم به نتیجه نمی رسم.
اگر لطف کنید و یک سورس کوچک بگذارید شما را حتما دعای خیر خواهم کرد!

_abiriamir
سه شنبه 30 تیر 1388, 15:04 عصر
سلام
ان شا< الله به دردتون بخوره
اگه مشکلی بود هم بگین

saleh_fartash
سه شنبه 30 تیر 1388, 16:32 عصر
واقعا متشكرم.من به قولم عمل خواهم كرد.
ولى دوست من مشكل اصلي اين جاست كه من در حال حاضر اگر على را در بانك جستجو كنم و اگر محمد على بالاتر از على باشد محمد على را پيدا مي كند. در صورتي كه من مي خواهم كه اگر على وجود داشت على و اگر نداشت اسم ديگري كه داراى على است پيدا كند.
در واقع من مي خواهم نتيجه هاي جستجو به ترتيب شباهت بيشتر مرتب شوند.مثل:
على:شباهت 100 درصد
علىرضا: شباهت 50 درصد
محمد على شباهت 35 درصد

Hsimple11
سه شنبه 30 تیر 1388, 17:25 عصر
من در حال حاضر اگر على را در بانك جستجو كنم و اگر محمد على بالاتر از على باشد محمد على را پيدا مي كند. در صورتي كه من مي خواهم كه اگر على وجود داشت على و اگر نداشت اسم ديگري كه داراى على است پيدا كند.
در واقع من مي خواهم نتيجه هاي جستجو به ترتيب شباهت بيشتر مرتب شوند.مثل:
على:شباهت 100 درصد
علىرضا: شباهت 50 درصد
محمد على شباهت 35 درصد

یک کوئری بدون LIKE و با = برای متن جستجو بنویسید. اگر نتیجه ای در بر نداشت، اونوقت کوئری دوم که با LIKE بود و دیدید اجرا بشه.

saleh_fartash
سه شنبه 30 تیر 1388, 20:35 عصر
اين راه حل را من قبلا استفاده كردم اما فقط مي شود 2 حالت را در آورد اما من به دنبال ترتيب بر أساس شباهت هستم

_abiriamir
سه شنبه 30 تیر 1388, 20:44 عصر
میدونم و منظورتون رو میفهمم ولی من هم در این باره چیزی نمیدونم
این رو گذاشتم تا با ado query آشنا بشین تا بتونین از پست های اساتید استفاده کنید.

Hsimple11
چهارشنبه 31 تیر 1388, 00:26 صبح
ترتیب بر اساس شباهت یعنی چی؟ یعنی همین 3 حالت که علی ، علیرضا و محمد علی. یعنی چسبیدن کلمه ای دیگه به علی اولویت دوم و کلمه جدا اولویت سوم؟ خب میشه سه حالت. اسم 3 کلمه ای که علی توش باشه نداریم که!...

saleh_fartash
شنبه 03 مرداد 1388, 14:00 عصر
نه منظور من نسبت حروف درست به کل حروف است