PDA

View Full Version : جستجو در بانک اطلاعاتی SQL



GeneralLeang
پنج شنبه 15 مرداد 1394, 10:02 صبح
سلام
چرا وقتی کد زیر می نویسم درست کار می کنه.

کد:



SELECT PIDParvande, PNameFamily, PFatherName
FROM TParvande
WHERE (PNameFamily LIKE N'%عباس%ابرا%')




بعد وقتی همین کد به صورت زیر می نویسم هیچ رکوردی نمایش نمیدهد؟؟؟؟؟؟؟؟

کد:



ADOTableParvande.Filtered:=False;
ADOTableParvande.fliter:=('PNameFamily LIKE '+QuotedStr('%عباس%ابرا%'));
ADOTableParvande.Filtered:=True;

khoshblagh
پنج شنبه 15 مرداد 1394, 10:51 صبح
ADOTableParvande.Filtered:=False;
ADOTableParvande.fliter:=('PNameFamily LIKE '+QuotedStr('%'+'عباس ابرا'+'%'));

ADOTableParvande.Filtered:=True;

GeneralLeang
پنج شنبه 15 مرداد 1394, 11:06 صبح
ADOTableParvande.Filtered:=False;
ADOTableParvande.fliter:=('PNameFamily LIKE '+QuotedStr('%'+'عباس ابرا'+'%'));

ADOTableParvande.Filtered:=True;


ممنون از پاسخی که دادید ولی من می خواهم جستجو یا % در وسط هم انجام شود دقیقا مثل جستجوی فایل در ویندوز فقط من می خواهم این کار را با فیلتر انجام بدم همین.
شما فقط بگید من چطوری میتونم در فیلتر 3 یا بیشتر % بزارم و البته درست هم کار کند برای مثال کد بالا در کوئری بنویسم کار می کند ولی در جدول خاصیت فیلتر بنویسم کار نمی کند ؟؟؟؟؟
لطفا راهنمایی کنید با تشکر فراوان.

golbafan
پنج شنبه 15 مرداد 1394, 11:29 صبح
سلام
وقتی از فیلتر استفاده میکنید فرمان sql به دیتابیس نمیفرستید و نمیتوانید از قابلیتهای دیتابیس استفاده کنید
کامپوننت های ado در دلفی برای فیلتر کردن از sql92 پشتیبانی میکنند که این حالت باعث میشه امکان سرچ در وسط عبارات انجام نشه!


اگر اصرار دارید از فیلتر استفاده کنید باید از رویداد onFilterRecord استفاده کنید:

procedure TForm1.button1click(Sender: TObject);
begin
ADOTableParvande.Filtered:=False;
ADOTableParvande.fliter:='';
ADOTableParvande.Filtered:=True;
end;

procedure TForm1.ADOTableParvandeFilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
accept := (pos('عباس',ADOTableParvande.fieldbyname('PNam eFamily').asstring)>0)
and
(pos('ابرا',ADOTableParvande.fieldbyname('PNam eFamily').asstring)>0);
end;

GeneralLeang
پنج شنبه 15 مرداد 1394, 22:21 عصر
سلام
وقتی از فیلتر استفاده میکنید فرمان sql به دیتابیس نمیفرستید و نمیتوانید از قابلیتهای دیتابیس استفاده کنید
کامپوننت های ado در دلفی برای فیلتر کردن از sql92 پشتیبانی میکنند که این حالت باعث میشه امکان سرچ در وسط عبارات انجام نشه!


اگر اصرار دارید از فیلتر استفاده کنید باید از رویداد onFilterRecord استفاده کنید:

procedure TForm1.button1click(Sender: TObject);
begin
ADOTableParvande.Filtered:=False;
ADOTableParvande.fliter:='';
ADOTableParvande.Filtered:=True;
end;

procedure TForm1.ADOTableParvandeFilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
accept := (pos('عباس',ADOTableParvande.fieldbyname('PNam eFamily').asstring)>0)
and
(pos('ابرا',ADOTableParvande.fieldbyname('PNam eFamily').asstring)>0);
end;


ممنون دوست عزیز فقط اگه به مروز زمان داده ها حجمش بالا بره هنگ نمیکنه و یا سرعتش کم نمیشه؟؟؟؟؟؟؟

با تشکر فراوان از راهنمایی های شما دوست گرامی.

یوسف زالی
جمعه 16 مرداد 1394, 00:29 صبح
در این صورت باید کوئری تون رو مجدد ران کنید.

golbafan
یک شنبه 18 مرداد 1394, 07:51 صبح
ممنون دوست عزیز فقط اگه به مروز زمان داده ها حجمش بالا بره هنگ نمیکنه و یا سرعتش کم نمیشه؟؟؟؟؟؟؟
.

سرعت در روش فیلتر خیلی خیلی کمتر از کوئری هست
چون اول باید کل دیتا رو لود کنید و سپس روی تک تک رکوردها تست فیلتر انجام میشه