PDA

View Full Version : جستجوی دقیق



solook
سه شنبه 22 اسفند 1385, 11:11 صبح
با سلام به دوستان
برای اینکه بتوان در دیتابیس یک جستجوی دقیق داشته باشیم باید چکنیم
در کدهای که معمولا برای جستجو در دیتابیس استفاده می شود اگر مثلا کلمه ((روج)) جستجو شود کلماتی مانند ((عروج ، خروج ، خروجی )) را هم در نتایج جستجو نشان می دهد.اما من خواهم بصورتی باشید که فقط عین کلمه را پیدا کند
لطفا راهنمایی کنید

nasr
سه شنبه 22 اسفند 1385, 11:45 صبح
از چه دیتابیسی استفاده می کنید؟

آیا برای اینکار Query می نویسید یا جدول را فیلتر می کنید؟

ولی در کل اگه در حالت فیلتر یا کوری از * یا % استفاده نکنید همینکاری که می خواهید را انجام میده.

یا احتمالا شما به جای = از Like استفاده می کنید.

solook
سه شنبه 22 اسفند 1385, 12:32 عصر
ولی در کل اگه در حالت فیلتر یا کوری از * یا % استفاده نکنید همینکاری که می خواهید را انجام میده.

یا احتمالا شما به جای = از Like استفاده می کنید.همه اینها را آزمایش کردم .اما نتیجه نداد تنها در این حالت جواب می دهد:

('WHERE ( English like ''%'+ Edit1.TEXT+'%'') ');
که جستجوی این حالت دقیق نیست

zman123456
سه شنبه 22 اسفند 1385, 13:22 عصر
سلام
یعنی می خواهید بگید که کد :

'where field = '+edit1.text
کار نمی کنه؟

nasr
سه شنبه 22 اسفند 1385, 13:49 عصر
('WHERE ( English =''' + Edit1.TEXT + ''') ');

solook
سه شنبه 22 اسفند 1385, 14:22 عصر
این مورد هم جواب نداد

nasr
سه شنبه 22 اسفند 1385, 14:31 عصر
این مورد هم جواب نداد

نوع فیلد English چیه؟

عدد است یا رشته؟

خیلی عجیبه http://qsmile.com/qsimages/73.gif

MNosouhi
سه شنبه 22 اسفند 1385, 15:42 عصر
عزیزم برای اینکه هنگام جستجو کلمه ((روج)) ، کلماتی مانند ((عروج ، خروج ، خروجی )) پیدا نشوند از "فاصله" استفاده کن :

('WHERE ( English like ''%'+' '+ Edit1.TEXT+'%'') ');

solook
سه شنبه 22 اسفند 1385, 16:42 عصر
با تشکر این هم کار نکرد
در ضمن اون فیلد از نوع رشته هست

zman123456
چهارشنبه 23 اسفند 1385, 08:49 صبح
سلام
میشه بعد از query‌ یک savetofile بزنید و متن query رو بفرستید.خیلی جالبه.:متفکر:

arshia_
چهارشنبه 23 اسفند 1385, 08:53 صبح
شرط رو به این صورت در ادامه کوئری بنویس
اگر این هم کار نکنه مطمئن باش مشکل از کوئری نیست و نحوه ذخیره سازی شما درست نیست



qry.sql.add(' where english = :prm');
qry.parameters.parambyname('prm').value:=trim(edit 1.text);

solook
چهارشنبه 23 اسفند 1385, 14:05 عصر
اینهم فایلش هست می تونید ببینید
خواهید دید که جستجوی نسبی اون خوب کار میکنه اما جستجوی دقیق اون کار نمی کنه
لطفا اگه میشه اصلاحش کنید

solook
پنج شنبه 24 اسفند 1385, 16:56 عصر
چی شد آخرش؟

MNosouhi
پنج شنبه 24 اسفند 1385, 21:45 عصر
دوست عزیز
جواب همون چیزی بود که در پست قبلی ذکر کردم ، به هر حال پروسیجر جستجوی برنامت رو اصلاح کردم :

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if edit1.text = '' then
showmessage('áØÝÇ ˜áãå Çí ÈÑÇí ÌÓÊÌæ ÈäæíÓíÏ ')
else if j2.Checked then
begin
DataModule2.adoQuery1.Active:=FALSE;
DataModule2.adoQuery1.SQL.Clear;
DataModule2.adoQuery1.SQL.Add('SELECT * ');
DataModule2.adoQuery1.SQL.Add('FROM table1');
DataModule2.adoQuery1.SQL.Add('WHERE farsi like '+QuotedStr('%'+Trim(edit1.TEXT)+'%'));
DataModule2.adoQuery1.ExecSQL;
DataModule2.adoQuery1.Active:=TRUE;
end
else if j1.Checked then
begin
DataModule2.adoQuery1.Active:=FALSE;
DataModule2.adoQuery1.SQL.Clear;
DataModule2.adoQuery1.SQL.Add('SELECT * ');
DataModule2.adoQuery1.SQL.Add('FROM table1');
DataModule2.adoQuery1.SQL.Add('WHERE farsi like '+QuotedStr('%'+' '+Trim(edit1.TEXT)+' '+'%'));
DataModule2.adoQuery1.ExecSQL;
DataModule2.adoQuery1.Active:=TRUE;
end
else
ShowMessage('äæÚ ÌÓÊÌæ ÑÇ ãÔÎÕ äãÇííÏ');
end;

technic
جمعه 25 اسفند 1385, 01:57 صبح
کافی است که کد را به صورت زیر تغییردهید یا به جای LIKE از مساوی استفاده کنید

WHERE ( English = ''%'+ Edit1.TEXT+'%'') ');
هرمقداری که درEdit بنویسی همان مقدار را پیدامیکند

solook
جمعه 25 اسفند 1385, 06:08 صبح
بسیار عالی محمد جان
اما یه سؤال دیگه دارم
می خوام این جستجو توانایی جسجوی دو کلمه ای یا بیشتر رو داشته باشه.ر این نوع کد فقط یک کلمه یا یک جمله با همون ترتیب اصلی می توان پیدا کنه اما می خوام به گونه ای باشد که اگر دو کلمه دریک جمله بود رو پیدا کنه

محمد دادودنیا
جمعه 25 اسفند 1385, 11:03 صبح
کافیست درصد اول را بردارید تا فقط آنهای را که با کلمه مورد نظرتان شروع می شود را پیدا کند

MNosouhi
جمعه 25 اسفند 1385, 11:09 صبح
می خوام این جستجو توانایی جسجوی دو کلمه ای یا بیشتر رو داشته باشه.ر این نوع کد فقط یک کلمه یا یک جمله با همون ترتیب اصلی می توان پیدا کنه اما می خوام به گونه ای باشد که اگر دو کلمه دریک جمله بود رو پیدا کنه
برای اینکار اول باید کلمات رو از هم جدا کنی ، یعنی باید مشخص بشه که چند تا کلمه داری (مثلا با شمردن فاصله بین کلمات)، بعد در جستجو برای هر کلمه مثل کدی که در بالا گذاشتم عمل کنی و بینشون از and استفاده کن.

bigmag
سه شنبه 21 فروردین 1386, 19:16 عصر
Table1.Locate ('Name' ,Edit1.Text,[lopartialkey, locaseinsensitive])
البته این کد برای پروژه های دلفی هست

SYNDROME
سه شنبه 21 فروردین 1386, 21:28 عصر
با سلام
به این شکل استفاده کن.
Name =N'''+Value+''''
در بعضی از مواقع نیاز به استفاده از N است.

solook
چهارشنبه 22 فروردین 1386, 06:58 صبح
اگه میشه بیشتر توضیح بدین ؟

SYNDROME
چهارشنبه 22 فروردین 1386, 21:51 عصر
با سلام
منظور از قرار دادن N این است که در بعضی از مواقع فیلد شما که از نوع NvarChar می باشد نیاز به این دارد که مقدار ورودی شما به فیلد مورد نظر تبدیل شود و این یکسان سازی با N انجام می شود.
البته در بعضی از موارد هم بدون این کاراکتر برنامه درست کار می کند.